2011年2月28日

如何判断OS是32位还是64位

近年64位操作系统逐步普及,类Linux上该如何判断是32bit还是64bit呢?简单方法如下:

【file /usr/bin/file】        -》此法甚为巧妙
【getconf LONG_BIT】或者【getconf WORD_BIT】
【uname -a | grep "x86_64"】
【uname -m】

2011年2月26日

类Linxu系统管理和参数调整

作为开发人员,除了编码基本功以外,对OS系统参数配置也需要具有一定的了解。
(随意试验有可能导致系统崩溃,后果自负!!!)

sysctl是比较常用的命令工具,尤其是系统优化时,用开修改系统级内核参数,【sysctl -a】可以查看当前的所有配置状况。
类似【cat /proc/sys/kernel/shmmax】的方法也是可以查看个别参数值的,同时也可以用
【echo 268435456 > /proc/sys/kernel/shmmax】以及【echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout】、
【sysctl -w net.ipv4.tcp_keepalive_time=1800】等方法临时调整参数,当然系统重启后有恢复了原来的配置。永久保存的话,可以修改【/etc/sysctl.conf】
主要涉及到,共享内存(Shared Memory),信号灯(Semaphore),消息队列(Message Queue),网络(TCP/IP),还有磁盘IO等等。
比如网络参数,常用的有net.ipv4.tcp_tw_reuse、net.ipv4.tcp_tw_recycle、net.core.wmem_max、net.core.rmem_max、net.ipv4.tcp_rmem、net.ipv4.tcp_wmem、timeout_timewait等。
系统目录【/etc/sysconfig/】下面有很多内容,允许使用者根据自己的实际需要进行自由定制。

还有就是ulimit(bash)和limit(csh),比如调整core文件的大小(配置不当,会导致程序因内存错误而down时core dump文件无法生成)等。
[root@host ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16255
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) unlimited
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16255
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[root@host ~]#


系统语言(LANG)的调整,可以修改【/etc/sysconfig/i18n】这个配置文件。

在开发的调试阶段,有时需要监视系统内存,CPU负荷的变化等等来检测自己程序,此时下面的系统工具会很有帮助的。
「iostat」「sar」「mpstat」「top」「uptime」「free」「pmap」「vmstat」「gprof」

远程登录时,涉及到一些安全配置,【/etc/hosts.allow】以及【/etc/hosts.deny】,
【/etc/group】的【wheel】,尤其是想允许root的情况下,还有
【/etc/security/access.conf】的【-:ALL EXCEPT admin developer:ALL】部分,
【/etc/ssh/sshd_config】的【PermitRootLogin】选项。
系统的认证授权相关的有【/etc/sysconfig/authconfig】、以及【/etc/pam.d】下面的【sshd】【passwd】【login】【nsswitch.conf】等。
当然,对于ssh来说,【/etc/ssh/sshd_config】的配置是必需的。

2011年2月25日

Spotify and Shazam

就像主页上写的那样【Discover with Shazam, play with Spotify】,是最好的概括。

Shazam,是一款“音乐探索”手机软件,只要将手机面向音乐源,无论是在哪儿播放的歌曲,都能识别出其名称和演唱者,在你听到一首歌或一段旋律,但不知道歌曲名字的时候就派上用场了。主要是应用在智能手机上,当然包括iPhone和iPad。

Spotify,是一款优秀的音乐流媒体软件,能在互联网上选择自己喜欢的音乐,即可在线播放,也可下载后离线播放。可以运行在台式电脑,平板电脑,智能手机等各种设备,而且移动版能与桌面电脑版进行同步。


另外,向喜欢电影的朋友推荐一款软件【IMDb】,也就是“互联网电影数据库”,可以细致查阅电影电视剧相关的各种详细信息。

iPhone版

2011年2月24日

C/C++开发

一般采用系统默认配置就可以了,但有时候需要优先使用自己特定的链接库或者头文件,
可以使用下面的GCC命令来确认当前的搜索路径等配置参数。
【gcc -print-search-dirs】
【cpp -v】

有两个重要的变量【C_INCLUDE_PATH】和【CPLUS_INCLUDE_PATH】,设置以后就优先于系统默认的头文件搜索顺序。
还有就是通过设置环境变量【PATH】和【LD_LIBRARY_PATH】来改变command和链接库的默认搜索顺序。
补充一下,系统默认的链接库设置文件为【/etc/ld.so.conf】,修改此文件或者添加/删除其中的库文件以后需要用【ldconfig】使其生效。

制作动态连接库的时候,会用到下面的工具。
【nm --dynamic --demangle YourLibrary.so】

内存泄漏等问题最让人头疼,检测工具除了大名鼎鼎的IBM的Purify,还有很多开源的工具,供参考(部分已经过时了):
mpatrol njamd valgrind dmalloc electric-fence memprof memwatch leaktracer libgc6

在结合JNI使用时,需要指定so文件的路径,比如Tomcat5的情况下,在配置文件【/etc/tomcat5/tomcat5.conf】中添加【CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/lib"】

关于RPM的几个技巧

《运行时选项判断》
在做RPM安装包时,需要判断用户是在【安装】或者【更新】还是【卸载】,如何来做呢?
可以使用【$1】这个系统变量来判定,在不同的情况下其值是不同的,具体如下:

rpm -irpm -Urpm -e
%pre12
%post12
%preun0
%postun0



《解包》
有些情况下,只是想看看RPM内的文件内容,并不想进行安装,此时候可以如下来解包。
【rpm2cpio yourrpmfilename.rpm | cpio --extract --make-directories】



《宏定义》
可以通过修改系统级【/etc/rpm/macros】,用户级【~/.rpmmacros】文件,添加宏定义,改变默认路径等配置。

%_topdir /tmp/RPM
%_tmppath /tmp

修改完成以后,可以用命令【rpm --eval %_topdir】来检测是否生效。
其他常用的还有下面的几个参数
rpm --eval %_host_vendor
rpm --eval %_target_platform
rpm --eval %_build_name_fmt
rpm --eval %_rpmdir
rpm --eval %_os
想看所有选项信息的话,使用【rpm --showrc】。

另外,spec文件中的宏定义也可以使用bash脚本,例如:
%define C2 `grep CentOS /etc/issue`
%define CMD_TEST `if (test -n "%{C2}") ; then \
echo "centos"; fi`

%define GETOS getOS() {                              \
  VERSION_FILE=/proc/version                         \
                                                     \
  if (test -r $VERSION_FILE) then                    \
    :                                                \
  else                                               \
    return                                           \
  fi                                                 \
                                                     \
  turbolinux=`grep Turbolinux $VERSION_FILE`         \
  if (test -n "$turbolinux") then                    \
    echo "turbolinux"                                \
    return                                           \
  fi                                                 \
                                                     \
  centos=`grep "centos" $VERSION_FILE`               \
  if (test -n "$centos") then                        \
    echo "centos"                                    \
    return                                           \
  fi                                                 \
                                                     \
  redhat=`grep "Red Hat" $VERSION_FILE`              \
  if (test -n "$redhat") then                        \
    echo "redhat"                                    \
    return                                           \
  fi                                                 \
                                                     \
  return                                             \
}

2011年2月23日

NEC LifeTouch NOTE

2月15号,NEC发布了便携式智能笔记本「LifeTouch NOTE」,兼顾笔记本和智能手机的长处,引人注目。
主要指标如下:

  • OS采用Android 2.2
  • 7型LED液晶触摸屏并附带物理键盘
  • 电池续航能力达9个小时
  • 重量约699g



Android(TM)搭載の個人向けスマートブック「LifeTouch NOTE」を発売


目前网上已经开始了预约贩卖,发烧者赶紧哦^O^

2011年2月15日

東京セントラルユースホステルオープン

以后来东京游玩,又多了一个好住处,那就是【东京都心青年旅馆】,位于JR及地铁的【饭田桥】站,非常方便。


原文如下(链接):

東京国際ホステルは平成23年4月1日より、運営母体を財団法人日本ユースホステル協会に変更し、名称も「東京セントラルユースホステル」に変更いたします。

かつての花街「神楽坂」は、オフィス街・学生街らしい賑やかな表通 りと、対照的に細い路地と坂に囲まれた町並みの残る、落ち着いた都心のスポットです。文豪に愛され、尾崎紅葉や泉鏡花の住まいは、それぞれ区の指定史跡・登録史跡として残ります。作品の舞台としても数多く取り上げられるなどしたその風情は、新しい感性を巻き込みながらゆるやかに変化を続け、東京の隠れたスポットとして近年注目度を増してきています。

そんな神楽坂のすぐそば、JR・地下鉄あわせて5路線が交わる「飯田橋駅」のすぐそばに東京セントラルユースホステルはあります。

2011年2月10日

让任何人都能看懂你的网页

网页做好了以后,有想过让母语以外的人也能读得懂吗?告诉你一个简单的办法,就是Google的翻译工具,只需加入几行代码就能搞定。

Website Translator Gadget

代码大致如下,其中gaTrack和gaId是访问日志分析相关的,请使用自己的ID,如果没有申请的话,去掉即可。

<div id="google_translate_element"></div><script>
function googleTranslateElementInit() {
  new google.translate.TranslateElement({
    pageLanguage: 'zh-CN',
    includedLanguages: 'zh-CN,zh-TW,en,ja,ko',
    autoDisplay: false,
    gaTrack: true,
    gaId: 'UA-NNNNNNNN-N',
    multilanguagePage: true
  }, 'google_translate_element');
}
</script><script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>

2011年2月9日

iPhone版Google翻訳APP公開

近来Android上的Google翻译APP异常火热,AU起用【嵐】做大规模宣传。据今天最新消息iPhone版【Google Translate】也推出了,支持57种语言,15种语音输入,23种语音朗读,超强!以后出国游时会大有帮助。



苹果商店链接: GoogleTranslate@AppStore

2011年2月3日

《让子弹飞》看懂了吗

年末时哥们传给了我时下热门的贺岁片《让子弹飞》,在充满粗口,暴力的场面中一笑而过,体验了姜文的幽默,很是放松。昨晚,朋友跟我说,实际上影射了很多社会现实,网上百度了一下,【啊,原来如此】的感觉,长见识。原来看电影也是脑力活儿哦,不过呢,真是佩服各路网友,太有才了!


让子弹飞映射现实(网友整理版)

《让子弹飞》,究竟在煽动什么?

RHEL启动时不能正常映射NFS

在RHEL5机器上,配置好了NFS客户端,但是关掉电源重启之后,NFS映射无法正常加载,原因在于网络通信硬件环境没有准备好之前(跟交换机的Spanning Tree设置有关)就开始了MOUNT,导致失败,一个简单的解决办法就是,在网络配置文件【/etc/sysconfig/network】中加入延时等待。
NETWORKDELAY=30(了可以根据实际情况调节此数值)


一篇介绍nfs的好文章

Metro引入WSDL时的定义冲突

在使用Metro的导入工具,引入基于Microsoft的WCF的WSDL时,偶尔会出现下面的错误,

[ERROR] Two declarations cause a collision in the ObjectFactory class.

[ERROR] (Related to above error) This is the other declaration.

原因主要在于数据的绑定,简单来说在<tagA>下面有<BC>,而<tagAB>下面有<C>,于是在代码生成时都被定义为tagABC,造成了定义声明的冲突。解决的办法,其实也不难,需要改变默认的命名规则,也就是使用xpath将其中的一个映射强制修改掉,同时也可以调整package的名字,示例如下。

wsimport -Xendorsed -extension -keep -Xnocompile -target 2.1 -b SomeService.xjb "http://HostName/SomeService.wsdl"

SomeService.xjb:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.1"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    jaxb:extensionBindingPrefixes="xjc">

    <jaxb:globalBindings
        generateElementClass="false"
        mapSimpleTypeDef="false"
        generateMixedExtensions="false"
        optionalProperty="primitive">
    </jaxb:globalBindings>

    <jaxb:bindings schemaLocation="http://Hostname/SomeService.xsd" node="/xs:schema">
        <jaxb:schemaBindings>
            <jaxb:package name="name.own.defined.package" />
        </jaxb:schemaBindings>

        <jaxb:bindings node=".//xs:complexType[@name='Customer']/xs:sequence/xs:element[@name='Mobile']">
            <jaxb:factoryMethod name="MobileNum" />

        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>


数据绑定JAXB的参考文档:
JAXB Guide - Dealing with errors

2011年2月1日

跨域(Cross-domain)POST问题

随着WE2.0以及SNS应用的普及,越来越多地要求实现跨域(Cross-domain)的访问需求,传统的方法是【GET加上JsonP】,【iFrame】等技术手法,大家知道GET方法对数据长度有限制,IE无法提交超过2K的数据。而iFrame方法又很难获取POST的响应。唯一较好的传统方法就是结合Flash。
当然,既然有需要,标准也会应运而生,W3C已经制定了【Cross-Origin Resource Sharing】规范,一些主流的浏览器已经开始支持,不过IE8以前的版本是不可以的。另外,需要WEB服务器的支持。
下面的一些链接资料可以参考。


另外,在HTML5中,可以简单地使用【postMessage】。

日本第一家网上国际汇款

2011年1月25日,SBI旗下的【SBIレミット】推出了网上国际汇款服务,不出门就可以搞定,非常便利,手续费也不高,尤其是小额汇款,有4种方式可供选择。到2011年3月末之前的活动期间,手续费不到2000日元。当然,限制是有的,目前单笔汇款不得超过80万,一个月不得超过150万,且最多为6次。

https://www.remit.co.jp

SBIホールディングス