#include
#include
#include
#define strincr(s,l) ({int i = l - 1; for(;i>=0 && (s)[i] == '9';(s)[i--] = '0'); (i>= 0) && (++(s)[i]); s;})
char a[4] = "999";
int main(int argv, char **args){
char *s = strincr(a, strlen(a));
strincr(s, strlen(s));
printf("%s", s);
return 0;
}
Just for fun, that might not be faster than by the regular way of using 'atoi'
2008年12月9日星期二
Snippet : string number increment(done with macro)
2008年7月21日星期一
To Change USB Disk Label in Linux
There are 6 programs used to label a partition - the program used depends on the partition's filesystem type:
*
For FAT16 and FAT32 partitions, use mtools.
*
For NTFS partitions, use ntfsprogs.
*
For ext2 or ext3 partitions, use e2label.
*
For JFS partitions, use jfs_tune.
*
For ReiserFS (v3) partitions, use reiserfstune.
*
For XFS partitions, use xfs_admin
2008年3月8日星期六
performance camparison between php4 and php5
zz from sourceLib
The hardware used was a 2 CPU server, where each CPU was a Intel Xeon 2.8Ghz processor.
The machine contained 2Gig of RAM(DDR2 PC3200 ECC REG 400). The hard drives on the machine were 2-40Gig SATA.
The server was running Red Hat Enterprise Linux version 3.2 with the kernel version 2.4.21-27 and the x86_64 architecture.
The version of Apache running on the machine was 1.3.33.
Each version of PHP was built with the following configuration settings:
With mysql
With ftp enabled
With pcntl (process control) enabled
With memory limit enabled
With cgi disabled
The default php.ini was used as well.
| Test | PHP4 | PHP5 | Net |
| test_arithmetic | 0.065 | 0.063 | 3.54% |
| test_array_operators | 0.059 | 0.058 | 1.85% |
| test_bitwise | 0.029 | 0.025 | 13.19% |
| test_casting | 0.186 | 0.176 | 5.63% |
| test_chr_fixed | 0.342 | 0.336 | 1.87% |
| test_chr_hardcoded | 0.191 | 0.181 | 4.83% |
| test_chr_var | 0.364 | 0.358 | 1.68% |
| test_comment_loop | 0.079 | 0.070 | 11.50% |
| test_compare | 0.054 | 0.049 | 9.98% |
| test_compare_false | 0.008 | 0.008 | 0.00% |
| test_compare_invert | 0.005 | 0.004 | 8.89% |
| test_compare_strict | 0.014 | 0.012 | 18.88% |
| test_compare_unstrict | 0.017 | 0.014 | 18.13% |
| test_constants | 0.039 | 0.039 | -2.34% |
| test_crc32 | 0.016 | 0.017 | -4.43% |
| test_do_while | 0.390 | 0.353 | 9.54% |
| test_do_while_break | 0.056 | 0.048 | 14.70% |
| test_empty | 0.004 | 0.004 | 13.95% |
| test_empty_loop | 0.078 | 0.070 | 10.65% |
| test_ereg | 1.000 | 1.017 | -1.63% |
| test_foreach | 1.240 | 1.120 | 9.68% |
| test_get_class | 0.017 | 0.017 | 1.15% |
| test_global_scalar_assign | 0.085 | 0.071 | 16.17% |
| test_global_string_assign | 0.140 | 0.129 | 7.85% |
| test_if_constant | 0.010 | 0.010 | 0.00% |
| test_increment | 0.043 | 0.041 | 5.07% |
| test_is_array | 0.009 | 0.008 | 5.88% |
| test_is_object | 0.008 | 0.008 | 2.38% |
| test_is_type | 0.029 | 0.027 | 8.16% |
| test_isset | 0.005 | 0.004 | 18.37% |
| test_line | 0.009 | 0.008 | 2.35% |
| test_local_array_assign | 0.187 | 0.176 | 5.73% |
| test_local_boolean_assign | 0.074 | 0.073 | 0.41% |
| test_local_float_assign | 0.048 | 0.044 | 8.88% |
| test_local_hash_assign | 0.040 | 0.038 | 5.28% |
| test_local_integer_assign | 0.048 | 0.044 | 7.92% |
| test_local_object_assign | 0.028 | 0.023 | 20.49% |
| test_local_scalar_assign | 0.086 | 0.074 | 13.08% |
| test_local_string_assign | 0.123 | 0.114 | 7.25% |
| test_md5 | 0.078 | 0.077 | 1.79% |
| test_microtime | 0.075 | 0.087 | -15.65% |
| test_mt_rand | 0.011 | 0.011 | 0.00% |
| test_ord | 1.447 | 1.416 | 2.17% |
| test_ordered_functions | 0.629 | 0.602 | 4.18% |
| test_ordered_functions_references | 0.603 | 0.576 | 4.56% |
| test_preg_match | 0.050 | 0.065 | -29.37% |
| test_rand | 0.011 | 0.011 | -0.94% |
| test_references | 0.017 | 0.015 | 12.21% |
| test_sha1 | 0.094 | 0.099 | -5.98% |
| test_string_append | 0.091 | 0.083 | 8.88% |
| test_strlen | 0.009 | 0.009 | -2.22% |
| test_switch | 0.190 | 0.191 | -0.37% |
| test_time | 0.023 | 0.023 | -1.31% |
| test_unordered_functions | 0.715 | 0.663 | 7.35% |
| test_variable_variables | 0.038 | 0.034 | 10.90% |
| test_while | 0.423 | 0.358 | 15.49% |
LAMP starts
First it is ftp. That is always the way one deploy a site to server. Download vsftp, ./configure and then make install. anon_root=/data To add another user, todo here... Then we go with mysql 5.0(5.0.51a.) Get mysql noninstall version, unpack it into /usr/local. shell> groupadd mysql copy one of the support-files/my-*.cnf to /etc/my.cnf as the default mysql config. To stop mysql : mysqladmin shutdown If needed, use mysqladmin -u root -p shutdown After mysql started, we need to add some account to it. mysql> 'all privileges' means this user can do anything. To use old passward format for old mysql client : Alternative : Then we go with php5 (mysql 4.1 or later requires php 5). download php source & ./configure --with-mysql & make install.
Or install with yum or atp.
Edit /etc/vsftpd.conf(or maybe /etc/vsftpd/vsftpd.conf).
To enable anonymous access, add the 2 following line:
anon_upload_enable=YES
make a symbol link as /usr/local/mysql to /usr/local/mysql.real.path.
and execute the following command to create users and start mysql daemon:
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> gunzip < /PATH/TO/MYSQL-VERSION-OS.tar.gz | tar xvf - shell> ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';
*.* means all tables
'monty' is the user name, 'localhost' is the ip address from where this user can login.
'some_pass' is password.
'grant option' means this user can do grant operation.mysql>
SET PASSWORD FOR
-> ' some_user'@'some_host' = OLD_PASSWORD('newpwd');mysql>
UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
-> WHERE Host = 'some_host' AND User = 'some_user';mysql>
FLUSH PRIVILEGES;
--old-passwords option.
2008年2月28日星期四
Where's it in iphone
in iphone 1.1.3:
addressbook : /var/mobile/Library/AddressBook
2008年2月27日星期三
2008年2月24日星期日
dynamic lib in linux
/etc/ld.so.conf
dynamic libs config file
command : ldconfig
Each time after changing that file, run 'ldconfig' to flush config data.
command : ldd
Check which lib has been linked by an executable.
example : ldd a.out
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00986000)
libc.so.6 => /lib/tls/libc.so.6 (0x0081c000)
/lib/ld-linux.so.2 (0x007fe000)
command : objdump
Print out many useful information about an executable file.
example : objdump -p a.out
a.out: 文件格式 elf32-i386
程序头:
PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2
filesz 0x000000e0 memsz 0x000000e0 flags r-x
INTERP off 0x00000114 vaddr 0x08048114 paddr 0x08048114 align 2**0
filesz 0x00000013 memsz 0x00000013 flags r--
LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
....
动态节:
NEEDED libpthread.so.0
NEEDED libc.so.6
....
版本引用:
required from libpthread.so.0:
0x0d696910 0x00 04 GLIBC_2.0
0x0d696911 0x00 03 GLIBC_2.1
required from libc.so.6:
0x0d696910 0x00 02 GLIBC_2.0