U盘安装rhel 5.5

今天成功在DELL Optiplex 360上安装rhel 5.5,记录如下,具体步骤不是很清晰了,所以步骤不是很详细。

下载rhel 5.5 (http://mirrors.sohu.com/RHEL/AS5U5/i386/rhel-server-5.5-i386-dvd.iso),选择适合你的版本有i386、x86_64。
使用UltraISO打开rhel-server-5.5-i386-dvd.iso里面的images/boot.iso文件。点UltraISO【启动】菜单,【写入硬盘映像…】,写入方式可以是USB-HDD或者USB-HDD+。点【写入】。boot.iso包含了我们启动所需要的两个关键文件:isolinux/vmlinuz和isolinux/initrd.img。
复制rhel-server-5.5-i386-dvd.iso到U盘根目录。
重启系统,F12(有些机器不一样)进入选择启动介质界面。选择USB device。就启动到了linux rescue模式。有多种方式供我们选择,输入linux askmethod,回车。
接下来就是选择语言,键盘布局,然后接下来是最关键是选择安装方式,有NFS/CDROME/HardDisk/FTP/HTTP。选择HardDisk。然后列出来很多分区供我们选择(/dev/sda1,/dev/sda2,/dev/sda3,/dev/sdb4),一般sda指硬盘,sdb是我们插上去的u盘。选择/dev/sdb4,就查找到u盘上的iso镜像。接下来是分区,设置密码、防火墙、SELinux、网卡配置、选择软件包等。。这些不详讲。关键一步,选择grub安装在那个地方,默认只有/dev/sdb,不能安装grub到u盘,否则u盘grub被覆盖了就完蛋鸟。选择no boot loader will be installed。等待安装完成。
安装完了,继续F12进u盘,输入chroot /mnt/sysimage,挂载root分区。
fdisk -l 查看继续上的分区情况。一般有swap,根分区,/boot分区等。假设硬盘是/dev/sda,u盘是/dev/sdb。、dev/sda1是/boot,dev/sda2是/,dev/sda3是swap。

grub-install /dev/sda
grub> find /grub/stage1 (或者/boot/grub/stage1)
grub> root (hd0,0) (这个是/boot分区,对应/boot,如果没有单独划分/boot分区,这里root指定/分区)
grub> setup (hd0)
grub> quit

这样grub就安装在硬盘上了,还需要新建一个grub菜单。

vi /boot/grub/grub.conf

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
title rhel 5.5
root (hd0,0)
kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/ rhgb quiet
initrd /initrd-2.6.18-194.el5PAE.img

修改权限:

chmod 600 /boot/grub/grub.conf

软链接:

ln -s /boot/grub/grub.conf /boot/grub/menu.lst
第一次启动后的设置,不详讲。

 

mysql去掉隐藏的换行符号

update tb1 set test1= replace(test1 ,"\n\r","")
update tb1 set test1= replace(test1 ,"\n","")
update tb1 set test1= replace(test1 ,"\r","")

\n也可以是用char(10)代替,\n可以用char(13)代替。winhex下0A0D就是换行。

0A是LF(NL line fee, new line)

0D是CR(carriage return)

如果说有换行,输入被调用到js代码中,js是不会忽略换行的,所以js报错:

google maps api 报错:OVER_QUERY_LIMIT

google maps api 报错:OVER_QUERY_LIMIT

如果你在for循环里面geocode那我劝你还是算了,不要以为google给你提供了免费的/bandwidth/hosting,不要以为google服务器多如牛毛。但是谁受得鸟你这种粗暴的for循环呢?

参考geocoding usage limits 可知限制如下:

Use of the Google Geocoding API is subject to a query limit of 2,500 geolocation requests per day. (User of Google Maps API Premier may perform up to 100,000 requests per day.) This limit is enforced to prevent abuse and/or repurposing of the Geocoding API, and this limit may be changed in the future without notice. Additionally, we enforce a request rate limit to prevent abuse of the service. If you exceed the 24-hour limit or otherwise abuse the service, the Geocoding API may stop working for you temporarily. If you continue to exceed this limit, your access to the Geocoding API may be blocked.

同时参考:geocoding政策,配额限制

解决方法,我们可以将geocode出来的正确的latitude和longtitude都存到我们自己的数据库,下次就直接用google.map.Marker的position指定latitude和longtitude实现。

  • fetch the latitude+longitude, using the geocoder, when a location is created
  • store those in your database, alongside the address
  • and use those stored latitude+longitude when you want to display the map.

或者试试500ms geocode一个:

You can delay 5 seconds between every 10 calls, subject to change. But your page will load much faster if you use the HTTP geocoder before serving your pages.

mysql source命令导入乱码

环境:winxp/mysql 5.5.8

mysql -uroot -pxxxxxx
use testdb;
source d:/www/testdb.sql

导入很慢,每个row,都有6个warnings。

所有中文全部是问号(乱码)

查看了testdb.sql,发现create table语句后面没有设置default charset,

create table `tb1` (
`col1` varchar (45),
)ENGINE=MyISAM DEFAULT CHARSET=utf8;

成功导入!且速度很快。

WPARAM和LPARAM

c:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinDef.h(183)

/* Types use for passing & returning polymorphic values */
typedef UINT_PTR            WPARAM;
typedef LONG_PTR            LPARAM;
typedef LONG_PTR            LRESULT;

UINT_PTR

typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
typedef [public] unsigned __int3264 UINT_PTR, *PUINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;

LONG_PTR

typedef _W64 long LONG_PTR, *PLONG_PTR;
typedef [public] __int3264 LONG_PTR, *PLONG_PTR;
typedef __int64 LONG_PTR, *PLONG_PTR;

虽然有不同的条件编译,但是总的来说,WPARAM是unsigned int,LPARAM是long

不通的平台(32bit/64bit)有不同的长度。

参见msdn的Data Type Ranges

在32bit windows xp,visual studio 2010下:

sizeof(WPARAM) 0x00000004  unsigned int
sizeof(LPARAM)  0x00000004  unsigned int

WaitForSingleObject

 

DWORD WaitForSingleObject(
  HANDLE hHandle,
  DWORD dwMilliseconds
);
参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。
hHandle可以是下列对象的句柄:
Change notification 
Console input 
Event 
Job 
Memory resource notification 
Mutex 
Process 
Semaphore 
Thread 
Waitable timer
WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。在这里举个例子:
先创建一个全局Event对象g_event:
    CEvent g_event;
在程序中可以通过调用CEvent::SetEvent设置事件为有信号状态。
下面是一个线程函数MyThreadPro()
UINT CFlushDlg::MyThreadProc( LPVOID pParam )
{
     WaitForSingleObject(g_event,INFINITE);
     For(;;)
        {
         ………….
        }
     return 0;
}
在这个线程函数中只有设置g_event为有信号状态时才执行下面的for循环,因为g_event是全局变量,所以我们可以在别的线程中通过g_event. SetEvent控制这个线程。
还有一种用法就是我们可以通过WaitForSingleObject函数来间隔的执行一个线程函数的函数体
     UINT CFlushDlg::MyThreadProc( LPVOID pParam )
{
     while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0)
     {
         ………………
     }
     return 0;
}
在这个线程函数中可以可以通过设置MT_INTERVAL来控制这个线程的函数体多久执行一次,当事件为无信号状态时函数体隔MT_INTERVAL执行一次,当设置事件为有信号状态时,线程就执行完毕了。
 

notepad++正则表达式转换日期格式[mm/dd/yy mm:ss]为[yy.mm.dd]

使用了三个月的gtd软件:BooguNote,一个所谓的树形结构gtd软件。

我发现BooguNote软件的高级功能没用到几个,它使用xml来存储信息。因为本人应用比较肤浅,所以直接转成txt来得快一点。

其中一直实用BooguNote的F12 shortcut来快速插入当前日期,而且格式固定为:[mm/dd/yy mm:ss],i don’t fancy that.所以我用notepad++的regular expression替换了一下。首先查找模式设定为“正则表达式”,不是“普通”也不是“扩展”哦。

\[(\d+)\/(\d+)\/(\d+) (\d+):(\d+)\]

替换为:

[20\3.\1.\2]

最后say good bye to BooguNote。

#2006 – MySQL server has gone away

应用程序(比如PHP)长时间的执行批量的MYSQL语句。执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理。都容易引起MySQL server has gone away。
今天遇到类似的情景,MySQL只是冷冷的说:MySQL server has gone away。
 
大概浏览了一下,主要可能是因为以下几种原因:
一种可能是发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因,你只要修改my.cnf,加大max_allowed_packet的值即可。
 
还有一种可能是因为某些原因导致超时,比如说程序中获取数据库连接时采用了Singleton的做法,虽然多次连接数据库,但其实使用的都是同一个连接,而且程序中某两次操作数据库的间隔时间超过了wait_timeout(SHOW STATUS能看到此设置),那么就可能出现问题。最简单的处理方式就是把wait_timeout改大,当然你也可以在程序里时不时顺手mysql_ping()一下,这样MySQL就知道它不是一个人在战斗。
 
解决MySQL server has gone away
 
1、应用程序(比如PHP)长时间的执行批量的MYSQL语句。最常见的就是采集或者新旧数据转化。
解决方案:
在my.cnf文件中添加或者修改以下两个变量:
wait_timeout=2880000
interactive_timeout = 2880000    
关于两个变量的具体说明可以google或者看官方手册。如果不能修改my.cnf,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = “set interactive_timeout=24*3600”;
mysql_real_query(…)
 
 
2、执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理
解决方案:
在my.cnf文件中添加或者修改以下变量:
max_allowed_packet = 10M(也可以设置自己需要的大小)
max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。