Situee's BLOG. This a blog about iphone / mobile development, programming and other information technology. Welcome!
Wednesday, October 15, 2014
iOS Set Navigation Bar Back Button Title
In summary, to set the back button title of the current ViewController, we create a backBarButtonItem for the previous ViewController.
Friday, October 10, 2014
Config Apache SVN server for Mavericks
I have a post about Config Apache SVN server for Mountain Lion
This time, after upgrade to 10.9 Mavericks, Apache fails again.
The mod_dav_svn.so and mod_authz_svn.so are missing.
Here's the fix
add symlink
This time, after upgrade to 10.9 Mavericks, Apache fails again.
The mod_dav_svn.so and mod_authz_svn.so are missing.
$ apachectl -S
httpd: Syntax error on line 501 of /private/etc/apache2/httpd.conf: Syntax error on line 2 of /private/etc/apache2/other/svn.conf: Cannot load /usr/libexec/apache2/mod_dav_svn.so into server: dlopen(/usr/libexec/apache2/mod_dav_svn.so, 10): image not foundHere's the fix
Download And Build Subversion
http://archive.apache.org/dist/subversion/subversion-1.6.23.tar.bz2add symlink
ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain
cd subversion-1.6.23 ./configure make sudo cp subversion/mod_dav_svn/.libs/mod_dav_svn.so /usr/libexec/apache2/. sudo cp subversion/mod_authz_svn/.libs/mod_authz_svn.so /usr/libexec/apache2/.
Thursday, September 11, 2014
Download previous versions Titanium Studio
Links to download previous versions Appcelerator Titanium Studio.
Cannot find the version you want in the following links?
Check this http://builds.appcelerator.com.s3.amazonaws.com/index.html
The latest version is here
http://titanium-studio.s3.amazonaws.com/latest/Titanium_Studio.dmg
Titanium Studio 3.2.3
Titanium Studio 3.2.0
Titanium Studio 3.1.3
Wednesday, July 30, 2014
iOS define local and global NSString constant
situee.blogspot.com
(1) static NSString * const kMyConstant = @"constant string";
(2) #define kMyConstant @"constant string"
"static const" is a better way, although "#define" is much shorter,
Here are some reasons:
---------------- .m file --------------
// define in a .m file OUTSIDE @implementation like...
The
Remove the
1. Local Constant
There are two type of constants.(1) static NSString * const kMyConstant = @"constant string";
(2) #define kMyConstant @"constant string"
"static const" is a better way, although "#define" is much shorter,
Here are some reasons:
- "#define" are not type-safe.
- We can test the value of the "static const" constant with debugger;
- Memory. Preprocessor create a new string each time the macro appear, while "static const" reuse the same string.
2. Global Constant
---------------- .h file --------------
extern NSString *const kMyConstant;
---------------- .m file --------------
// define in a .m file OUTSIDE @implementation like...
NSString *const kMyConstant = @"my constant";
The
extern
declaration says that there exists an NSString * const
by the name kMyConstant
whose storage is created in some other place.[1]Remove the
static
-- that specifies that kMyConstant
is only visible in files linked with this one.[1]C pointer and constant
Review C pointer and constant:
situee.blogspot.com
"const" precedes the *, that means the pointer treat *ptr as constant
This is NOT valid :
*ptr = 'b';
Another example;
int nValue = 5;
const int *pnPtr = &nValue;
Thus, the following is okay:
nValue = 6; // nValue is non-const
But the following is not:
*pnPtr = 6; // pnPtr treats its value as const
This means the pointer ptr is a constant pointer
This is NOT valid:
char char_B = 'b';
ptr = &char_B;
http://www.learncpp.com/cpp-tutorial/610-pointers-and-const/
http://www.cprogramming.com/reference/pointers/const_pointers.html
http://www.noxeos.com/2011/07/29/c-const-static-keywords/
http://www.codeguru.com/cpp/cpp/cpp_mfc/general/article.php/c6967/Constant-Pointers-and-Pointers-to-Constants.htm
situee.blogspot.com
1. Pointer to Constant Value
const char *ptr = 'a'; OR char const *ptr = 'a';"const" precedes the *, that means the pointer treat *ptr as constant
This is NOT valid :
*ptr = 'b';
Another example;
int nValue = 5;
const int *pnPtr = &nValue;
Thus, the following is okay:
nValue = 6; // nValue is non-const
But the following is not:
*pnPtr = 6; // pnPtr treats its value as const
2. Constant Pointer
char * const ptr = 'a';This means the pointer ptr is a constant pointer
This is NOT valid:
char char_B = 'b';
ptr = &char_B;
3. Constant Pointer to Constant Value
const char * const ptr = 'a'; OR char const * const ptr = 'a';Reference:
http://www.learncpp.com/cpp-tutorial/610-pointers-and-const/
http://www.cprogramming.com/reference/pointers/const_pointers.html
http://www.noxeos.com/2011/07/29/c-const-static-keywords/
http://www.codeguru.com/cpp/cpp/cpp_mfc/general/article.php/c6967/Constant-Pointers-and-Pointers-to-Constants.htm
Sunday, July 20, 2014
Android - SuppressLint cannot be resolved to a type
After upgrading my Android SDK 20 and ADT-23.0.2, some projects got error "SuppressLint cannot be resolved to a type"
I fixed this by
1. In project property -> Android, change to another API level and change back.
2. change the order in project property ->Java build path -> Order and Export.
3. also please try refresh and clean the project.
Hope it can help and save some hours.
I fixed this by
1. In project property -> Android, change to another API level and change back.
2. change the order in project property ->Java build path -> Order and Export.
3. also please try refresh and clean the project.
Hope it can help and save some hours.
Tuesday, July 08, 2014
OpenDrive cloud storage direct link
I am trying OpenDrive storage service.
You will get 5G storage, and 1G traffic for a basic account.
It is great that you can share file by direct link.
I think it is very useful for a developer.
We can put XML, JSON, image files on the OpenDrive for testing.
Go to their website and have a look:
www.opendrive.com
You will get 5G storage, and 1G traffic for a basic account.
It is great that you can share file by direct link.
I think it is very useful for a developer.
We can put XML, JSON, image files on the OpenDrive for testing.
Go to their website and have a look:
www.opendrive.com
Wednesday, January 22, 2014
Setup DNSmasq MAC DNS server
$ brew install dnsmasq
$ cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
$ sudo cp -fv /usr/local/opt/dnsmasq/*.plist /Library/LaunchDaemons
$ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
Go to System Network preference,
Set the only one DNS as 127.0.0.1
/usr/local/etc/dnsmasq.conf
#upstream dns servers
resolv-file=/etc/resolv.dnsmasq.conf
#for the host domain to the ip, like the "hosts" file
address=/dev/127.0.0.1
address=/double-click.net/127.0.0.1
# set listen address as your IP
listen-address=127.0.0.1, 192.168.11.12
/etc/resolv.dnsmasq.conf
Put upstream server in /etc/resolv.dnsmasq.conf , such as 8.8.8.8
nameserver upstream_dns_server
nameserver 8.8.8.8
Kill the process, it will restart and reload new config.
$ sudo kill $(ps aux | grep '[d]nsmasq' | awk '{print $2}')
Reference:
Install DNSmasq locally on Mac OS X via Homebrew
http://blog.philippklaus.de/2012/02/install-dnsmasq-locally-on-mac-os-x-via-homebrew/
Setup a wildcard TLD using Dnsmasq on OS X
http://bhamrick.com/2013/04/18/setup-a-wildcard-tld-using-dnsmasq-on-os-x/
https://gist.github.com/g3d/2709563
http://unixhelp.ed.ac.uk/CGI/man-cgi?ps
Appendix:
ps aux : to see every process on the system using bSD syntax;
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
timothy 29217 0.0 0.0 11916 4560 pts/21 S+ 08:15 0:00 pine
root 29505 0.0 0.0 38196 2728 ? Ss Mar07 0:00 sshd: can [priv]
can 29529 0.0 0.0 38332 1904 ? S Mar07 0:00 sshd: can@notty
USER = user owning the process
PID = process ID of the process
%CPU = It is the CPU time used divided by the time the process has been running.
%MEM = ratio of the process’s resident set size to the physical memory on the machine
VSZ = virtual memory usage of entire process
RSS = resident set size, the non-swapped physical memory that a task has used
TTY = controlling tty (terminal)
STAT = multi-character process state
START = starting time or date of the process
TIME = cumulative CPU time
COMMAND = command with all its arguments
ps -aux VS ps aux
Note that "ps -aux" is distinct from "ps aux". The POSIX and UNIX standards require that "ps -aux" print all processes owned by a user named "x", as well as printing all processes that would be selected by the -a option. If the user named "x" does not exist, this ps may interpret the command as "ps aux" instead and print a warning. This behavior is intended to aid in transitioning old scripts and habits. It is fragile, subject to change, and thus should not be relied upon.
Subscribe to:
Posts (Atom)