Totatlly forgot how to do this, so I had to look it up...
Use the following methods to catch application exit notifications:
- (void)applicationWillTerminate:(UIApplication *)application
Use this method to catch application interrupt notification:
- (void)applicationWillResignActive:(UIApplication *)application
Use this method to catch application resume notification:
- (void)applicationDidBecomeActive:(UIApplication *)application
POSTGRESQL: Removing POSTGRESQL
The following manual uninstallation guide was grabbed from 2 separate sites. One is for removing 8.3, and the other for removing 8.4.
In Mac OSX: (Assuming Default Locations)
Via uninstaller:
1) In the installation directory, there will be a uninstall-postgresql.app file will be there, executing (double clicking) that will uninstall the postgresql installation.
Manual Uninstallation:
1) Stop the server
sudo /sbin/SystemStarter stop postgresql-8.3
sudo launchctl unload /Library/LaunchDaemons/com.edb.launchd.postgresql-8.4.plist
2) Remove menu shortcuts
sudo rm -rf /Applications/PostgreSQL/8.3
sudo rm -rf /Applications/PostgreSQL/8.4
3) Remove the ini file
sudo rm -rf /etc/postgres-reg.ini
sudo rm -f /etc/postgres-reg.ini
4) Removing startup items
sudo rm -rf /Library/StartupItems/postgresql-8.3
sudo rm -f /Library/LaunchDaemons/com.edb.launchd.postgresql-8.4.plist
5) Remove the data and installed files
sudo rm -rf /Library/PostgreSQL/8.3
sudo rm -rf /Library/PostgreSQL/8.4
6) Delete the user postgres
sudo dscl . delete /Users/postgres
In Mac OSX: (Assuming Default Locations)
Via uninstaller:
1) In the installation directory, there will be a uninstall-postgresql.app file will be there, executing (double clicking) that will uninstall the postgresql installation.
Manual Uninstallation:
1) Stop the server
sudo /sbin/SystemStarter stop postgresql-8.3
sudo launchctl unload /Library/LaunchDaemons/com.edb.launchd.postgresql-8.4.plist
2) Remove menu shortcuts
sudo rm -rf /Applications/PostgreSQL/8.3
sudo rm -rf /Applications/PostgreSQL/8.4
3) Remove the ini file
sudo rm -rf /etc/postgres-reg.ini
sudo rm -f /etc/postgres-reg.ini
4) Removing startup items
sudo rm -rf /Library/StartupItems/postgresql-8.3
sudo rm -f /Library/LaunchDaemons/com.edb.launchd.postgresql-8.4.plist
5) Remove the data and installed files
sudo rm -rf /Library/PostgreSQL/8.3
sudo rm -rf /Library/PostgreSQL/8.4
6) Delete the user postgres
sudo dscl . delete /Users/postgres
SYMBIAN: NewLC vs. NewL
It all has to do with the way you implement NewLC and NewL, but the STANDARD difference between NewLC and NewL is whether or not you have to CleanupStack->pop the object created.
Let's first start with the typical implementation of NewL and NewLC
static CObject* newL();
CObject* CObject::NewL() {
----CObject* self = NewLC();
----CleanupStack::Pop(self);
----return self;
}
static CObject* newLC();
CObject* CObject::NewLC() {
----CObject* self = new (ELeave)CObject();
----CleanupStack::PushL(self);
----self->Construct();
----return self;
}
As such, you would instantiate a CObject by using either of the following:
CObject* obj = CObject::NewL();
or
CObject* obj = CObject::NewLC();
// do something with obj that may require cleanup ie. cptrArray->AppendL(obj);
CleanupStack::Pop(obj);
If you do not pop the object, the stack will be messed up and you'll have a very difficult time figuring out why that is.
Let's first start with the typical implementation of NewL and NewLC
static CObject* newL();
CObject* CObject::NewL() {
----CObject* self = NewLC();
----CleanupStack::Pop(self);
----return self;
}
static CObject* newLC();
CObject* CObject::NewLC() {
----CObject* self = new (ELeave)CObject();
----CleanupStack::PushL(self);
----self->Construct();
----return self;
}
As such, you would instantiate a CObject by using either of the following:
CObject* obj = CObject::NewL();
or
CObject* obj = CObject::NewLC();
// do something with obj that may require cleanup ie. cptrArray->AppendL(obj);
CleanupStack::Pop(obj);
If you do not pop the object, the stack will be messed up and you'll have a very difficult time figuring out why that is.
C++: CONST CAST
Spent about 20 minutes trying to figure out why this wasn't compiling.
void CImageLoader::LoadImageL(const TDesC& filename) {
----TDesC* tmp = &filename; // COMPILER ERROR
}
It's because filename is CONST. So we'll have to 'unconst' it for this line to work:
TDesC* tmp = &(const_cast(filename));
void CImageLoader::LoadImageL(const TDesC& filename) {
----TDesC* tmp = &filename; // COMPILER ERROR
}
It's because filename is CONST. So we'll have to 'unconst' it for this line to work:
TDesC* tmp = &(const_cast
OPENGL ES: Basics
Here's how I usually set up my quads:
Coordinates
D C
A B
Vertices
A B
D C
Here's are the coordinates:
vertices = {-1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1};
coords = {TEX(0, 0), TEX(255, 0), TEX(255, 255), TEX(0, 255)}; // assumes 256x256 texture image
normal = {0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1};
triangles = {1, 0, 3, 1, 3, 2};
Where TEX(u,v) is defined as (GLbyte)( (u) - 128 ) , (GLbyte)( (v) - 128 )
Draw code
glMatrixMode(GL_MODELVIEW);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_BYTE, 0, vertices);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_BYTE, 0, coordinates);
glEnableClientState(GL_NORMAL_ARRAY);
glNormalPointer(GL_BYTE, 0, normals);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glDrawElements(GL_TRIANGLES, 2 * 3, GL_UNSIGNED_BYTE, triangles);
Coordinates
D C
A B
Vertices
A B
D C
Here's are the coordinates:
vertices = {-1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1};
coords = {TEX(0, 0), TEX(255, 0), TEX(255, 255), TEX(0, 255)}; // assumes 256x256 texture image
normal = {0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1};
triangles = {1, 0, 3, 1, 3, 2};
Where TEX(u,v) is defined as (GLbyte)( (u) - 128 ) , (GLbyte)( (v) - 128 )
Draw code
glMatrixMode(GL_MODELVIEW);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_BYTE, 0, vertices);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_BYTE, 0, coordinates);
glEnableClientState(GL_NORMAL_ARRAY);
glNormalPointer(GL_BYTE, 0, normals);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glDrawElements(GL_TRIANGLES, 2 * 3, GL_UNSIGNED_BYTE, triangles);
OS X: Splitting & Joining large files
Took me a VERY long time to figure this out, but...
Problem: Files over 4GB cannot be dragged onto your external HDD if the external HDD is using FAT32 file-system.
Solution: Split the file up using terminal into chunks smaller than 4GB and transfer as usual. You can use terminal to join the file up again at a later time.
To split the file up into 1GB chunks:
split -b 1024m filename.file PREFIX_
To join the file from the separated chunks:
cat sub1 sub2 sub3 sub4 > output.file
I read somewhere the older macs cannot handle splits larger than 2047mb. This is not true on my mac because I just made chunks that are 3gb FTW.
Problem: Files over 4GB cannot be dragged onto your external HDD if the external HDD is using FAT32 file-system.
Solution: Split the file up using terminal into chunks smaller than 4GB and transfer as usual. You can use terminal to join the file up again at a later time.
To split the file up into 1GB chunks:
split -b 1024m filename.file PREFIX_
To join the file from the separated chunks:
cat sub1 sub2 sub3 sub4 > output.file
I read somewhere the older macs cannot handle splits larger than 2047mb. This is not true on my mac because I just made chunks that are 3gb FTW.
MYSQL: Installing MySQL 4.1.22 on OS X 10.5
1. to remove MySQL 5.0, see previous post.
2. download the MySQL 4.1.22 installer from MySQL website.
3. install mysql-standard-4.1.22...i686.pkg
4. install mysqlStartupItem.pkg
5. set up MySQL config. In command prompt type:
sudo pico /etc/my.cnf
6. paste the following 4 lines into pico:
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
7. exit pico & save file (ctrl+x, Yes for save)
8. now we can start the MySQL server using sudo:
sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
9. open up command prompt, and enter mysql by typing:
/usr/local/mysql/bin/mysql -u root
EDIT: Getting it to work with OSX's installation of PHP...
Only follow the following instructions if you are having problems with the @mysql_connect method in PHP.
1. create a info.php file that calls the phpinfo(); method
----- NOTE: my version of PHP is 5.2.8
----- scroll down to the mysql section, and look for the value for key: MYSQL_SOCKET
----- MYSQL_SOCKET = /var/mysql/mysql.sock
----- goto /var/mysql and make sure mysql.sock... if the directory is missing or file is missing, you have the same problem I did. Your mysql.sock is probably inside /private/tmp...
2. in command prompt, type the following:
sudo mkdir /var/mysql
sudo chown _mysql /var/mysql
3. (OPTIONAL) in command prompt, type the following:
cp /private/tmp/mysql.sock /var/mysql/mysql.sock
4. edit the my.cnf file again, this time make sure its whole contents are the following 6 lines:
[client]
default-character-set=utf8
socket = /var/mysql/mysql.sock
[mysqld]
default-character-set=utf8
socket = /var/mysql/mysql.sock
5. restart the apache service through System Preferences > Sharing > Web Sharing
6. restart the MySQL service by typing the following 2 lines (one at a time) into command prompt:
sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop
sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
At this point the mysql_connect() php method should work as expected...
2. download the MySQL 4.1.22 installer from MySQL website.
3. install mysql-standard-4.1.22...i686.pkg
4. install mysqlStartupItem.pkg
5. set up MySQL config. In command prompt type:
sudo pico /etc/my.cnf
6. paste the following 4 lines into pico:
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
7. exit pico & save file (ctrl+x, Yes for save)
8. now we can start the MySQL server using sudo:
sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
9. open up command prompt, and enter mysql by typing:
/usr/local/mysql/bin/mysql -u root
EDIT: Getting it to work with OSX's installation of PHP...
Only follow the following instructions if you are having problems with the @mysql_connect method in PHP.
1. create a info.php file that calls the phpinfo(); method
----- NOTE: my version of PHP is 5.2.8
----- scroll down to the mysql section, and look for the value for key: MYSQL_SOCKET
----- MYSQL_SOCKET = /var/mysql/mysql.sock
----- goto /var/mysql and make sure mysql.sock... if the directory is missing or file is missing, you have the same problem I did. Your mysql.sock is probably inside /private/tmp...
2. in command prompt, type the following:
sudo mkdir /var/mysql
sudo chown _mysql /var/mysql
3. (OPTIONAL) in command prompt, type the following:
cp /private/tmp/mysql.sock /var/mysql/mysql.sock
4. edit the my.cnf file again, this time make sure its whole contents are the following 6 lines:
[client]
default-character-set=utf8
socket = /var/mysql/mysql.sock
[mysqld]
default-character-set=utf8
socket = /var/mysql/mysql.sock
5. restart the apache service through System Preferences > Sharing > Web Sharing
6. restart the MySQL service by typing the following 2 lines (one at a time) into command prompt:
sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop
sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
At this point the mysql_connect() php method should work as expected...
MYSQL: Removing MYSQL from a mac
Do the following in the terminal:
1. sudo rm /usr/local/mysql
2. sudo rm -rf /usr/local/mysql*
3. sudo rm -rf /Library/StartupItems/MySQLCOM
4. sudo rm -rf /Library/PerformancePanes/My*
5. (Edit /etc/hostconfig) sudo vi /etc/hostconfig (Remove line MYSQLCOM=-YES)
6. sudo rm -rf /Library/Reciepts/mysql*
7. sudo rm -rf /Library/Reciepts/MySQL*
1. sudo rm /usr/local/mysql
2. sudo rm -rf /usr/local/mysql*
3. sudo rm -rf /Library/StartupItems/MySQLCOM
4. sudo rm -rf /Library/PerformancePanes/My*
5. (Edit /etc/hostconfig) sudo vi /etc/hostconfig (Remove line MYSQLCOM=-YES)
6. sudo rm -rf /Library/Reciepts/mysql*
7. sudo rm -rf /Library/Reciepts/MySQL*
SQL: MySQL + USERS + MAC
when installing mysql for the very first time, you will need to create a root password in order to enter the mysql database:
mysqladmin -u ROOT_USER_NAME -p ROOT_PASSWORD
sign into mysql using the following command:
mysql --user=ROOT_USER_NAME --password=ROOT_PASSWORD
once in, you want to first navigate to the mysql database:
use mysql;
you can now insert more users to your liking by using the following commands:
create user 'SUB_USER_NAME'@'LOCALHOST';
set that person's password by using:
set password for 'SUB_USER_NAME'@'LOCALHOST' = PASSWORD('SUB_USER_PASSWORD');
now to give all permissions for the new user...
grant all privileges on *.* to 'SUB_USER_NAME'@'LOCALHOST' IDENTIFIED BY 'SUB_USER_PASSWORD' WITH GRANT OPTION;
or if you want to just grant certain privileges (in this case, SELECT):
grant SELECT on *.* to 'SUB_USER_NAME'@'LOCALHOST' IDENTIFIED BY 'SUB_USER_PASSWORD';
if you made a mistake, you can revoke the privileges by doing this:
revoke all privileges, grant option from 'SUB_USER_NAME'@'LOCALHOST';
NOTE:
1. *.* means you are granting permission to SELECT on all databases. Alternatively you could also specify a specific database, ie. mysql.user
2. GRANT OPTION is a special command that allows the SUB_USER to grant that same permission to other users
mysqladmin -u ROOT_USER_NAME -p ROOT_PASSWORD
sign into mysql using the following command:
mysql --user=ROOT_USER_NAME --password=ROOT_PASSWORD
once in, you want to first navigate to the mysql database:
use mysql;
you can now insert more users to your liking by using the following commands:
create user 'SUB_USER_NAME'@'LOCALHOST';
set that person's password by using:
set password for 'SUB_USER_NAME'@'LOCALHOST' = PASSWORD('SUB_USER_PASSWORD');
now to give all permissions for the new user...
grant all privileges on *.* to 'SUB_USER_NAME'@'LOCALHOST' IDENTIFIED BY 'SUB_USER_PASSWORD' WITH GRANT OPTION;
or if you want to just grant certain privileges (in this case, SELECT):
grant SELECT on *.* to 'SUB_USER_NAME'@'LOCALHOST' IDENTIFIED BY 'SUB_USER_PASSWORD';
if you made a mistake, you can revoke the privileges by doing this:
revoke all privileges, grant option from 'SUB_USER_NAME'@'LOCALHOST';
NOTE:
1. *.* means you are granting permission to SELECT on all databases. Alternatively you could also specify a specific database, ie. mysql.user
2. GRANT OPTION is a special command that allows the SUB_USER to grant that same permission to other users
IPHONE: NSXMLParser leak NSPlaceholderString
This is probably the most annoying leak I've every faced. With the NSXMLParser, I was getting these crazy 16 byte NSCFString leaks. The leaks traced back to [NSXMLParser parse], caused by NSPlaceholderString initWithBytes/initWithString.
I believe this is caused by the [parser:foundcharacters] method. Generally, the xml document being parsed has a bunch of \t and \n characters. It would appear these are the culprit. I got rid of the parse leaks by doing the following:
- (void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)cdata {
NSString* tmp = [cdata stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if(curr && tmp && [tmp length] > 0) {
curr.content:tmp;
}
}
Where curr is the variable saving the cdata 'found characters'.
I believe this is caused by the [parser:foundcharacters] method. Generally, the xml document being parsed has a bunch of \t and \n characters. It would appear these are the culprit. I got rid of the parse leaks by doing the following:
- (void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)cdata {
NSString* tmp = [cdata stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if(curr && tmp && [tmp length] > 0) {
curr.content:tmp;
}
}
Where curr is the variable saving the cdata 'found characters'.
Eclipse: Eclipse bin and .svn directories
Eclipse tends to like picking up .svn folders and throwing them into the /bin directory. For me, this defeats the purpose of doing a svn-ignore on the /bin directory. To prevent this from happening:
Configure Build Path > Source tab, under each SOURCE (or resource) directory, set the following excludes:
.svn
**/.svn/**
Clean & rebuild
XP: Map local directory as a drive
type in command prompt:
subst:
example:
subst e: c:\mpowerplayer\hdd
you should now see a e:\ volume in windows explorer.
subst
example:
subst e: c:\mpowerplayer\hdd
you should now see a e:\ volume in windows explorer.
UNIX: Find command
Common uses for the FIND command.
1. find all hidden .svn folders and delete them
find /path/to/search -name '.svn' -type d -exec rm -rf '{}' \;
2. find all hidden .svn folders and print them
find /path/to/search -name '.svn' -type d -print
1. find all hidden .svn folders and delete them
find /path/to/search -name '.svn' -type d -exec rm -rf '{}' \;
2. find all hidden .svn folders and print them
find /path/to/search -name '.svn' -type d -print
SVN: Subversion Server + MAC
This tutorial assumes that you have already installed the SVN binaries, and modified your PATH to the svn/bin.
Step 1: Creating a local repo
svnadmin create /path/to/repo
Step 2: Change the default configurations, svnserve.conf
[general]
anon-access = none
auth-access = write
authz-db = authz
password-db = passwd
realm = Subversion Server
Step 3: Edit the authz file
[groups]
admin = alex, bob, cathy
engineers = donny, emily
producers = frank
visitors = greg
[/]
* =
@admin = rw
@engineers = rw
@producers = rw
@visitors = r
Step 4: Edit the passwd file
[users]
alex = pw1
bob = pw2
cathy = pw3 (... and so forth)
Step 5: Chmod the entire repo directory
cd /path/to
find repo -exec chmod 777 '{}' \;
Step 6: Start the svn server
svnserve -d -r /path/to/repo
Step 7: Do a sample checkout
svn co svn://localhost /download/path --username bob --password pw2
Hopefully it works :) Oh yea, and to restart the server, you can use the command killall svnserve
Step 1: Creating a local repo
svnadmin create /path/to/repo
Step 2: Change the default configurations, svnserve.conf
[general]
anon-access = none
auth-access = write
authz-db = authz
password-db = passwd
realm = Subversion Server
Step 3: Edit the authz file
[groups]
admin = alex, bob, cathy
engineers = donny, emily
producers = frank
visitors = greg
[/]
* =
@admin = rw
@engineers = rw
@producers = rw
@visitors = r
Step 4: Edit the passwd file
[users]
alex = pw1
bob = pw2
cathy = pw3 (... and so forth)
Step 5: Chmod the entire repo directory
cd /path/to
find repo -exec chmod 777 '{}' \;
Step 6: Start the svn server
svnserve -d -r /path/to/repo
Step 7: Do a sample checkout
svn co svn://localhost /download/path --username bob --password pw2
Hopefully it works :) Oh yea, and to restart the server, you can use the command killall svnserve
MySQL on OS X
Download MySQL at: http://dev.mysql.com/downloads/ (More Specific) & install the DMG
1. Open up Terminal
2. Add /usr/local/mysql/bin to PATH
- cd ~
- emacs .profile
- export PATH="$PATH:/usr/local/mysql/bin"
3. Restart Terminal
4. Create new user for login
- mysqladmin -u USERNAME -p -password PASSWORD
5. Log in to MySQL with new user created
- mysql --user=USERNAME --password=PASSWORD
You should be in MySQL now
1. Open up Terminal
2. Add /usr/local/mysql/bin to PATH
- cd ~
- emacs .profile
- export PATH="$PATH:/usr/local/mysql/bin"
3. Restart Terminal
4. Create new user for login
- mysqladmin -u USERNAME -p -password PASSWORD
5. Log in to MySQL with new user created
- mysql --user=USERNAME --password=PASSWORD
You should be in MySQL now
SERVER: FSB vs. RAM
Taken from: http://www.directron.com/fsbguide.html
Front Side Bus (FSB) - The Front Side Bus is the most important bus to consider when you are talking about the performance of a computer. The FSB connects the processor (CPU) in your computer to the system memory. The faster the FSB is, the faster you can get data to your processor.
System clock - The actual speed of your FSB with out any enhancements (such as double pumping, or quad pumping) on it. An often-misunderstood property of the system clock is its effect on processor speed. You see, a thing called a "CPU Multiplier" determines the speed of a processor in MHz. If you take the CPU Multiplier and multiply it by the System Clock speed you get the speed of your processor.
DDR2 - DDR2 memory has a different approach to design at the chip level than DDR. The simplest way to understand how it works would be to think that at the low level it had two chips of half the stated memory speed working in tandem together to achieve the full speed stated. So for DDR2 400 it would be something like 2 chips of DDR200 working together to achieve the full 400 speed. Notice that I say "chips" not sticks of memory. All this happens on 1 stick of memory. In other words, when calculating in tandem in respect to the FSB, just divide the given speed by 2.
Example:
Assume my quad-core, quad-pumped FSB = 1066MHz.
This means my System Clock is 1066/4 = 266MHz.
My CPU is clocked at 1.6GHz = 266MHz * CPU MULTIPLIER.
This means my CPU MULTIPLIER must be 1600/266 = 6.
Now here are my options for DDR2:
(A) 533MHz/2 = 266MHz. This is an EXACT MATCH to my System Clock.
(B) 667MHz/2 = 333MHz. This is the next highest speed available.
(C) 800MHz/2 = 400MHz. This is pure overkill since the System Clock is capped at 266MHz.
In these stated cases, (B) is actually preferred. (A) is an exact match which means sometimes its lag can adversely affect the CPU bus speed. As stated, option (C) is overkill.
Front Side Bus (FSB) - The Front Side Bus is the most important bus to consider when you are talking about the performance of a computer. The FSB connects the processor (CPU) in your computer to the system memory. The faster the FSB is, the faster you can get data to your processor.
System clock - The actual speed of your FSB with out any enhancements (such as double pumping, or quad pumping) on it. An often-misunderstood property of the system clock is its effect on processor speed. You see, a thing called a "CPU Multiplier" determines the speed of a processor in MHz. If you take the CPU Multiplier and multiply it by the System Clock speed you get the speed of your processor.
DDR2 - DDR2 memory has a different approach to design at the chip level than DDR. The simplest way to understand how it works would be to think that at the low level it had two chips of half the stated memory speed working in tandem together to achieve the full speed stated. So for DDR2 400 it would be something like 2 chips of DDR200 working together to achieve the full 400 speed. Notice that I say "chips" not sticks of memory. All this happens on 1 stick of memory. In other words, when calculating in tandem in respect to the FSB, just divide the given speed by 2.
Example:
Assume my quad-core, quad-pumped FSB = 1066MHz.
This means my System Clock is 1066/4 = 266MHz.
My CPU is clocked at 1.6GHz = 266MHz * CPU MULTIPLIER.
This means my CPU MULTIPLIER must be 1600/266 = 6.
Now here are my options for DDR2:
(A) 533MHz/2 = 266MHz. This is an EXACT MATCH to my System Clock.
(B) 667MHz/2 = 333MHz. This is the next highest speed available.
(C) 800MHz/2 = 400MHz. This is pure overkill since the System Clock is capped at 266MHz.
In these stated cases, (B) is actually preferred. (A) is an exact match which means sometimes its lag can adversely affect the CPU bus speed. As stated, option (C) is overkill.
WEB: How to set up web-server w/ FiOS
Since Verizon blocks port 80, this is listed online as the only workaround. It entails targeting a different port (like 8015), and then using the Verizon FiOS router to re-route the request to the correct web server machine.
Furthermore, people used no-ip.com's dynamic dns service to automatically forward the url name requests like www.happy.com to www.happy.com:8015, thereby eliminating the ugliness of forcing your customers to specify the ports.
* Prior to following the steps in this guide to hosting your web server, make sure you read the Verizon ToS, which states the following:
You also may not exceed the bandwidth usage limitations that Verizon may establish from time to time for the Service, or use the Service to host any type of server. Violation of this section may result in bandwidth restrictions on your Service or suspension or termination of your Service.
That said, be careful and charging on :)
STEP 1: Goto URL http://192.168.1.1
STEP 2: By default, username = admin, password = password (or password1)

STEP 3: On the top navi-bar, select Firewall Settings

STEP 4: Click yes to proceed

STEP 5: Click on Port Forwarding on the left navi-bar

STEP 6: From that table list, click Add at the bottom

STEP 7: Fill out the following table...
STEP 7a: Networked Computer/Device = danny (actual device name works best, since IPs can be dynamic)

STEP 8: Add new protocol

STEP 9: WAN Connection Type: All Broadband Devices
STEP 10: Forward to Port: Specify - 80
STEP 11: When should this rule occur: Always
STEP 12: Click Apply to get out of the Edit Port Forwarding Rule page
STEP 13: Click Apply to get out of the Port Forwarding page
STEP 14: From an external computer, type http://YOUR.IP:8015/, should direct you to the web server.
Furthermore, people used no-ip.com's dynamic dns service to automatically forward the url name requests like www.happy.com to www.happy.com:8015, thereby eliminating the ugliness of forcing your customers to specify the ports.
* Prior to following the steps in this guide to hosting your web server, make sure you read the Verizon ToS, which states the following:
You also may not exceed the bandwidth usage limitations that Verizon may establish from time to time for the Service, or use the Service to host any type of server. Violation of this section may result in bandwidth restrictions on your Service or suspension or termination of your Service.
That said, be careful and charging on :)
STEP 1: Goto URL http://192.168.1.1
STEP 2: By default, username = admin, password = password (or password1)

STEP 3: On the top navi-bar, select Firewall Settings

STEP 4: Click yes to proceed

STEP 5: Click on Port Forwarding on the left navi-bar

STEP 6: From that table list, click Add at the bottom

STEP 7: Fill out the following table...
STEP 7a: Networked Computer/Device = danny (actual device name works best, since IPs can be dynamic)

STEP 8: Add new protocol

STEP 9: WAN Connection Type: All Broadband Devices
STEP 10: Forward to Port: Specify - 80
STEP 11: When should this rule occur: Always
STEP 12: Click Apply to get out of the Edit Port Forwarding Rule page
STEP 13: Click Apply to get out of the Port Forwarding page
STEP 14: From an external computer, type http://YOUR.IP:8015/, should direct you to the web server.
APACHE: Enabling Apache + PHP on OSX
Step 1. Menu Bar > Go > Go to Folder... > /private/etc/apache2
Step 2. Open httpd.conf with TextEditor
Step 3. Uncomment this line:
#LoadModule php5_module libexec/apache2/libphp5.so
Step 4. Save this file onto the desktop as "httpd.conf"
Step 5. Drag the "httpd.conf" file you just created into /private/etc/apache2
Step 6. Authenticate your privileges: enter your password
Step 7. Make a copy of /etc/php.ini.default onto your desktop
Step 8. Rename php.ini.default to php.ini (the copy on your desktop)
Step 9. Drag the "php.ini.default" file you just created into /private/etc
Step 10. Authenticate your privileges: enter your password
Step 11. Open System Preferences > Sharing > Web Sharing: ON (check this option)
To Test:
Step 12. Create info.php with the content:
Step 13. Save it to /Library/WebServer/Documents
Step 14. Goto http://localhost/info.php
To Publish using your HOME/Sites directory
Step 15. Create info.php with content:
Step 16. Save it to /Users/$MYNAME/Sites
Step 17. Goto http://$COMPUTERNAME.home/~$MYNAME/info.php
Step 2. Open httpd.conf with TextEditor
Step 3. Uncomment this line:
#LoadModule php5_module libexec/apache2/libphp5.so
Step 4. Save this file onto the desktop as "httpd.conf"
Step 5. Drag the "httpd.conf" file you just created into /private/etc/apache2
Step 6. Authenticate your privileges: enter your password
Step 7. Make a copy of /etc/php.ini.default onto your desktop
Step 8. Rename php.ini.default to php.ini (the copy on your desktop)
Step 9. Drag the "php.ini.default" file you just created into /private/etc
Step 10. Authenticate your privileges: enter your password
Step 11. Open System Preferences > Sharing > Web Sharing: ON (check this option)
To Test:
Step 12. Create info.php with the content:
Step 13. Save it to /Library/WebServer/Documents
Step 14. Goto http://localhost/info.php
To Publish using your HOME/Sites directory
Step 15. Create info.php with content:
Step 16. Save it to /Users/$MYNAME/Sites
Step 17. Goto http://$COMPUTERNAME.home/~$MYNAME/info.php
IPHONE: MySQL on iPhone
Before we go on, I'm going to assume you already know that the simplest way to achieve MySQL data connection is by writing a short scriptlet in PHP/JSP, etc. While simpler, it's security is somewhat problematic, since sniffers may be able to pick up the URL requests.
After hours of research I found what seems like the only solution: Cocoa-MySQL + MySQL C-API
According to this blog, all you seem to need is Cocoa-MySQL, but no matter what I tried, I just couldn't seem to get the binaries to link correctly. Not to mention, Apple has a pretty strict limitation on private frameworks, and this solution probably goes against one of their 20 NDAs.
This is where MySQL C-API comes in handy. I downloaded Mac OS X 10.5 (TAR package) for my x86 Intel system. Extract the zip and grab the /lib and /include folders and throw them into some local directory (NOT IN YOUR XCODEPROJ, see steps 4, 5 below).
From the Cocoa-MySQL site, download MCPKit_src_XXX.dmg, and grab the contents of /MCPFoundationKit and throw it into your XCODEPROJ. These are great wrapper classes that help facilitate the connection & query processes.
If you tried to build the app right now, you'd get errors stating missing headers and mysql_xxx_xxx functions. That's because we haven't set up the project settings yet.
1. In Xcode, goto Project > Edit Project Settings.
2. Select the Build tab.
3. Under Linking > Other Linking FLags, add the following flags: -lmysqlclient_r, -lmysqld, -lmysqlclient, -lm, -lz
4. Under Search Paths > Header Search Paths:
5. Under Search Paths > Library Search Paths:
6. Add #import "MCPKit_bundled.h" to the header of any class accessing MySQL
7. Edit MCPKit_bundled.h by changing all #import to #import "XXX.h"
Now you should be able to build, and use the sample code from the blog previously mentioned to directly connect to a remote MySQL server.
After hours of research I found what seems like the only solution: Cocoa-MySQL + MySQL C-API
According to this blog, all you seem to need is Cocoa-MySQL, but no matter what I tried, I just couldn't seem to get the binaries to link correctly. Not to mention, Apple has a pretty strict limitation on private frameworks, and this solution probably goes against one of their 20 NDAs.
This is where MySQL C-API comes in handy. I downloaded Mac OS X 10.5 (TAR package) for my x86 Intel system. Extract the zip and grab the /lib and /include folders and throw them into some local directory (NOT IN YOUR XCODEPROJ, see steps 4, 5 below).
From the Cocoa-MySQL site, download MCPKit_src_XXX.dmg, and grab the contents of /MCPFoundationKit and throw it into your XCODEPROJ. These are great wrapper classes that help facilitate the connection & query processes.
If you tried to build the app right now, you'd get errors stating missing headers and mysql_xxx_xxx functions. That's because we haven't set up the project settings yet.
1. In Xcode, goto Project > Edit Project Settings.
2. Select the Build tab.
3. Under Linking > Other Linking FLags, add the following flags: -lmysqlclient_r, -lmysqld, -lmysqlclient, -lm, -lz
4. Under Search Paths > Header Search Paths:
5. Under Search Paths > Library Search Paths:
7. Edit MCPKit_bundled.h by changing all #import
Now you should be able to build, and use the sample code from the blog previously mentioned to directly connect to a remote MySQL server.
Subscribe to:
Posts (Atom)