2010年12月30日 星期四

[Python] Threading Sample - 執行緒範例

每一秒加一個Thread

每一個Thread Sleep 10 seconds

Result:
sleeping 10 sec from thread 0
sleeping 10 sec from thread 1
sleeping 10 sec from thread 2
sleeping 10 sec from thread 3
sleeping 10 sec from thread 4
sleeping 10 sec from thread 5
sleeping 10 sec from thread 6
sleeping 10 sec from thread 7
sleeping 10 sec from thread 8
sleeping 10 sec from thread 9

[Python] 將List 內的項目轉換型態

>>> a = ['1', '2', '3', '4']
>>> a
['1', '2', '3', '4']

>>> a[:] = [int(x) for x in a]
>>> a
[1, 2, 3, 4]

See Also:
http://stackoverflow.com/questions/4561113/python-list-conversion

2010年12月29日 星期三

[Django] Don't use field_id to named your field 別用_id命名資料庫爛位

class Car(models.Model):
    manufacturer = models.ForeignKey('production.Manufacturer')

Django 會自動加個 manufacturer_id 所以你不用自己去處理他
如果自己定義一個 xxx_id Django會confuse
除非你想自己處理SQL

官網原文

DATABASE REPRESENTATION
Behind the scenes, Django appends "_id" to the field name to create its database column name. In the above example, the database table for the Car model will have a manufacturer_id column. (You can change this explicitly by specifying db_column) However, your code should never have to deal with the database column name, unless you write custom SQL. You'll always deal with the field names of your model object.


See Also
http://docs.djangoproject.com/en/dev/ref/models/fields/#database-representation

2010年12月28日 星期二

[Python] Convert String to List 字串轉串列

我把一個List ['aaa', 'bbb'] 存到資料庫

讀出來時會變成 "['aaa', 'bbb']" 字串

所以如果要一一列出時

l = "['aaa', 'bbb']" # 從資料庫讀出的

for v in l:
  print v

會變
[
'
a
a
a
'
,
b
b
b
'
]

所以要先用eval() 把 String 轉回 List即可

for v in eval(l):
  print v

aaa
bbb


See Also:
http://docs.python.org/library/functions.html#eval

[Django] Model中的null 和 blank 設定與差異



models.CharField(max_length=200, null=False, blank=True)

Django的驗證, 預設每個攔位都是為必要的(required)

所以如果你想要將欄位設為空值, 必須再另外設定

在Django的Field有兩種值可以設定: blank and null

blank 只是用於Django自己的input欄位驗證 (Django’s input validation)

Null 是否允許讓你在Database裡插入NULL, 就是空值 (whether the database accepted NULL)

Null = Python的None = 不存在

blank = True 欄位檢查允許為空值
blank = False 欄位檢查不允許為空值
null = True 寫入資料庫允許為NULL (Python 為 None)
null = False 寫入資料庫不允許為NULL (Python 為 None)

See Also:
http://www.b-list.org/weblog/2006/jun/28/django-tips-difference-between-blank-and-null/

2010年12月27日 星期一

[Django] list all Session

for k in request.session.keys():
    print ' key = ', k
    print request.session.__getitem__(k)

See Also:
django - How to use sessions

2010年12月25日 星期六

[Music] MC Hot Dog 2010 - MC來了

MC Hot Dog真的很棒!!  聖誕節應景一下吧^^

MC = Microphone Controller
MC = Menstrual Cycle
MC = Merry Christmas

===========



歌詞:

[CSS] 改變反白顏色 Change Selection Color

測試後只有IE沒效果


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body {
 background: black;
 color: white;
}

::selection {
        background: red; /* Safari */
        }
::-moz-selection {
        background: red; /* Firefox */
}
</style>

12345678910
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
はひふへほ
まみむめも
やゆよ
らりるれろ
わをん

[Python] 逐行顯示檔案內容 read file line by line

f = open('C:\test.txt')
for l in f:
    print(l.strip())

Reference:

http://docs.python.org/library/stdtypes.html#str.strip
http://maestric.com/doc/python/misc

2010年12月13日 星期一

[Django] Getting Started part 2 - 設置與同步資料庫

Step 1: 編輯setting.py

設置DATABASE的ENGINE and NAME, 在這我用sqlite

such as:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'mysite.sqlite',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}


Step 2: 同步資料庫

python manage.py syncdb

syncdb會根據setting.py裡INSTALLED_APPS的內容來建立需要的資料庫


你可以透過SQLite Manager來查看建立了哪些資料表
http://code.google.com/p/sqlite-manager/

[JavaScript] 將JSON data寫入新開的視窗

例如我要把產生的JSON Code, 顯示在新開的視窗中


<script type="text/javascript" src="http://www.json.org/json.js"></script> 
<script type="text/javascript"> 
 
var Beatles = new Object();
Beatles.Country = "England";
Beatles.YearFormed = 1959;
Beatles.Style = "Rock'n'Roll";
 
function prevJSON() {
  var win = window.open(" ", "_new");
  win.document.open();
  win.document.write("<pre>" + JSON.stringify(Beatles, null, '\t') + "</pre>"); }
</script> 
<input type="button" value="preview JSON code" onClick="prevJSON()"> 


References:
http://www.learn-ajax-tutorial.com/Json.cfm

[Ubuntu 10.10] 如何安裝JDK - How to install Java(JDK)

$ sudo apt-get install openjdk-6-jdk

After installation, you can try to get version information like below

$ java -version
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.2) (6b20-1.9.2-0ubuntu1)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)

2010年12月9日 星期四

[jQuery] Select All Checkbox 選取所有選取框checkbox

Sample Below: (save to html to try this)

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

<script type="text/javascript">
$(function() {
/**
 * Select all checkbox
 */
  flag = false;
  $(".selectall").click(function() {
    flag = !flag;
    $("input[name='box[]']").each(function() {
      $(this).attr("checked" , flag);
    });
    $(".selectall").attr("checked", flag);
  });
});
    

</script>

<input type="checkbox" class="selectall"> Select All<br />
<input type="checkbox" name="box[]"><br />
<input type="checkbox" name="box[]"><br />
<input type="checkbox" name="box[]"><br />
<input type="checkbox" name="box[]"><br />
<input type="checkbox" name="box[]"><br />
<input type="checkbox" name="box[]"><br />
<input type="checkbox" name="box[]"><br />
<input type="checkbox" name="box[]"><br />

[jQuery] Select DIV element by ID

It's a sample code below.

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
  $('div[id*="mydiv"]').append('*');  // containing the a given substring.
  $('div[id|="mydiv"]').append('|');  // mydiv- (string followed by a hyphen (-)
  $('div[id$="mydiv"]').append('$');  // a value ending exactly with a given string.
});

</script>

</script>
<div id="mydiv"></div>
<div id="0mydiv0"></div>
<div id="mydiv-1"></div>
<div id="mydiv1"></div>
<div id="mydiv2"></div>
<div id="3mydiv"></div>


Result:

*$
*
*|
*
*
*$

Reference: http://api.jquery.com/category/selectors/

2010年12月8日 星期三

[Apache] 新增虛擬目錄 Create Virtual Directory

因為有時候一些在家寫的小程式, 會想要在工作或是別的地方拿出來用或測試, 所以我都是放在dropbox裡, 但是每次都要copy出來放到網頁目錄覺得很麻煩, 所以我新增了一個虛擬目錄到My Dropbox裡的www資料夾, 這樣就不用每次都要複製了, 可以直接修改, 直接測試。

Open the Apache configuration : httpd.conf
打開Apache的設定檔httpd.conf

Add code on below, save then restart Apache Server
設定如下, 存檔後重啟Apache

Alias /www/ "C:/My Dropbox/www/"

<Directory "C:/My Dropbox/www/">
    Options FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

2010年12月7日 星期二

[Django] Getting Started part 1 -建立專案和應用程式

在開始之前, 你的系統必須安裝好Python及Django

我的作業系統是Ubuntu, 所以如果你是用Fedoa或其他系統, 你得用其他方式來安裝
My OS is Ubuntu, so if you use Fedora or CentOS, maybe you have to use yum install to do.

Step 1. Install Python 安裝Python
# apt-get install python


Step 2. Install Django 安裝Django
# apt-get install python-django

你可以試著執行python, 然後打入以下語法來測試是否成功安裝Django
Then you can try to see Django version from above command line:

# python
>>> import django
>>> print django.get_version()
1.2.3


[Python] String 字串 速記

>>> s = 'Hank'
>>> len(s)  # 字串長度
4

>>> s[0]
'H'

>>> s[1]
'a'

>>> s[-1]
'k'

>>> s
'Hank'

>>> s[1:3]
'an'

[Python] Math and Random 速記

>>> import math
>>> math.pi
3.141592653589793
>>> math.sqrt(85)
9.219544457292887
>>> import random
>>> random.random()
0.7685885105411999
>>> random.choice([1,2,3,4])
2
>>>

Reference:
math — Mathematical functions
random — Generate pseudo-random numbers
Learning Python, 3e

2010年12月2日 星期四

[Tools] Zen Coding : Generating HTML from selectors 使用選擇器產生HTML

顧名思義就是用來自動產生HTML, 第一次用也是覺得超酷, 用習慣真的能增加工作效率

直接看範例, 我是用Aptana, 打下面的selectors

html:xt>div#header>div#logo+ul#nav>li.item-$*5>a

按下Ctrl+Alt+E後會自動產生成下列的HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
 <title></title>
</head>
<body>
 <div id="header">
  <div id="logo"></div>
  <ul id="nav">
   <li class="item-1"><a href=""></a></li>
   <li class="item-2"><a href=""></a></li>
   <li class="item-3"><a href=""></a></li>
   <li class="item-4"><a href=""></a></li>
   <li class="item-5"><a href=""></a></li>
  </ul>
 </div>
</body>
</html>

Reference:
Zen Coding: Generating HTML from selectors
Zen Coding: A Speedy Way To Write HTML/CSS Code

2010年12月1日 星期三

[Moodle] 解決圖表顯示中文變成框框

隨便選一個中文字體複製修改成default.ttf

然後複製到moodledata資料夾下的 lang//zh_tw_utf8/fonts即可

2010年11月29日 星期一

[PHP] 解決 date(): It is not safe to rely on the system's timezone settings

Message:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

解決方法:

修改php.ini, 加上預設timezone, 重新啟動Apache即可

date.timezone = "Asia/Taipei"

2010年11月25日 星期四

[PHP] 解決使用Windows IIS執行PHP時的檔案上傳限制

今天在解決一個PHP檔案大小上傳限制的問題


系統是Windows 2008 Server
Web Server是IIS


原以為跟Apache一樣, 改一下php.ini的兩個設定即可



post_max_size = 10M
upload_max_filesize = 10M



沒想到開phpinfo出來看還是沒有作用, Google一下發現, 原來Windows Server本身基於安全性問題, 自己就有限制。


解決方法如下:


Step 1. 系統管理工具 -> 服務 (或是直接用 執行 -> services.msc)


Step 2. 停止IIS Admin ServiceWorld Wide Web Publishing Service服務 (否則修改檔案後要存檔時, 他會說有服務在使用)


Step 3. 用文字編輯器開啟 C:\Windows\system32\inetsrv\metabase.xml


Step 4. 尋找 AspMaxRequestEntityAllowed,原本預設為 204800 (代表 200 KB)

Step 5. 我的需求為10M 所以我改成 10240000

Step 6.存檔後重新啟動上述兩個服務即可



2010年11月21日 星期日

[Django] 相關資源網站






Django focuses on automating as much as possible and adhering to the DRY principle.

Django Document

modwsgi - Python WSGI adapter module for Apache.




The Python Haven - Django powered AJAX Chat – Part 1

ericks - 用 Python + django 10分鐘內作出一個 blog


fcamel - Django 內建的 template

[phpmyadmin] Windows 7 phpmyadmin首頁空白 無法登入

今天灌好Apache + MySQL + PHP時, 一直用phpmyadmin一直無法登入

最後到網路上去查才發現原來Windows 7的hosts預設是空的

hosts的路徑在 C:\Windows\System32\drivers\etc\hosts



把127.0.0.1前面的# 拿掉存檔就可以了

[Software] Firefox + Selenium IDE 網頁自動測試

 先貼起來放, 有空再補用法跟圖。

錄製網頁的使用畫面, 然後自動測試, 例如新增, 刪除, 修改, 可以省下Web Developer的測試時間, 順便可以做功能性的Demo

Selenium IDE
http://seleniumhq.org/projects/ide/

2010年11月18日 星期四

[J2EE] Install Tomcat and Ant on CentOS 5.5 安裝Tomcat, Ant在CentOS

== Download 下載檔案 ==


JDK 1.6
http://www.oracle.com/technetwork/java/javase/downloads/index.html

Apache Ant
http://ftp.twaren.net/Unix/Web/apache//ant/binaries/apache-ant-1.8.1-bin.tar.gz

Apache Tomcat
http://apache.stu.edu.tw//tomcat/tomcat-6/v6.0.29/bin/apache-tomcat-6.0.29.tar.gz



== Install 安裝 ==

安裝SDK
cd /opt
mkdir java
cd java
sh jdk-6u22-linux-i586.bin

解壓縮Ant, Tomcat

tar -zxv -f apache-ant-1.8.1-bin.tar.gz -C /opt/
tar -zxv -f apache-tomcat-6.0.29.tar.gz -C /opt/

ln -s /opt/apache-ant-1.8.1/bin/ant /usr/bin

複製serlet-api.jar給ant
cp /opt/apache-tomcat-6.0.29/lib/servlet-api.jar /opt/apache-ant-1.8.1/lib

設定環境變數
export ANT_HOME=/opt/apache-ant-1.8.1/
export JAVA_HOME=/opt/java/jdk1.6.0_22/
export PATH=${PATH}:${ANT_HOME}/bin

啟動Tomcat
cd /opt/apache-tomcat-6.0.29/bin
./startup.sh

檢查Server Log
less /opt/apache-tomcat-6.0.29/logs/catalina.out

== Automate startup 自動啟動Tomcat ==

cd /etc/init.d
vim tomcat


#!/bin/bash
# chkconfig: 234 20 80
# description: Tomcat Server start/shutdown script
# processname: tomcat
JAVA_HOME=/opt/java/jdk1.6.0_22
export JAVA_HOME
TOMCAT_HOME=/opt/apache-tomcat-6.0.29/bin
START_TOMCAT=/opt/apache-tomcat-6.0.29/bin/startup.sh
STOP_TOMCAT=/opt/apache-tomcat-6.0.29/bin/shutdown.sh

start() {
echo "Starting tomcat: "
cd $TOMCAT_HOME
${START_TOMCAT}
echo "Tomcat start done."
}
stop() {
echo "Shutting down tomcat: "
cd $TOMCAT_HOME
${STOP_TOMCAT}
echo "Tomcat shutdown done."
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 10
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
esac
exit 0


chmod 755 tomcat

/sbin/chkconfig --add tomcat
/sbin/chkconfig --level 234 tomcat on
/sbin/chkconfig --list tomcat

2010年11月12日 星期五

[Android] 預設開啟Menu選單 openOptionsMenu

在Activity加上onAttachedToWindow() 方法

public void onAttachedToWindow() {
  super.onAttachedToWindow();
  openOptionsMenu();
}

2010年11月11日 星期四

[Linux] VirtualBox - Kubuntu 調整解析度

用VirtualBox灌完KUbuntu後調解析度時, 只有800x600和640x480, 那麼大的螢幕, 解析度當然要調高點。

System Setting -> Display and Monitor
系統設定 -> 顯示與螢幕



























可以透過VirtualBox的安裝Guest Additions...來達成

[Python] 相關資源筆記

Last update: 2010-11-11


Frozen Binary
cx_Freeze
py2exe
Pyinstaller


GUI
wxPython - a GUI toolkit


Web Framework
Django is a high-level Python Web framework
http://www.djangoproject.com/
http://docs.djangoproject.com/en/dev/
http://www.djangobook.com/


Specialize Compiler
Psyco - High-level languages need not be slower than low-level ones. - Just-in-time compiler
shedskin - An experimental (restricted) Python-to-C++ compiler


Books
Dive Into Python 3(英文書籍)


酷!學園 - Python相關資源
Python課堂(簡)
啄木鳥社區(簡)
Python天天美味(总)

Style Guide for Python Code


Cinpy - C in Python



thenewboston - Python Programming Tutorial




lxml - Processing XML and HTML with Python

2010年11月10日 星期三

[JavaEE] 防止偽造跨站請求(CSRF) Prevent Cross-Site Request Forgery

防止偽造跨站請求(CSRF) Prevent Cross-Site Request Forgery

if(request.getHeader("Referer") == null || request.getHeader("Referer").indexOf("http://localhost:8080/myProject/") < 0) return false;

透過referer來判斷Domain是否相同


==

在survey時有搜尋到一篇文章, 說Tomcat7新的feature有支援擋csrf

有興趣可以看看

Tomcat 7 新特性学习之一 - 防止CSRF攻击

[Android] Conversion to Dalvik format failed with error 1 解決方法

今天Eclipse的Console突然出現一堆錯誤訊息都是
Conversion to Dalvik format failed with error 1

解決方法


1. 選取所有的Project

2. 點選單列的Project -> Clean


3. 選Clean All Projects, 然後按OK就解決了!


可能有其他情況會出現一樣的錯誤, 如果這成功/不成功 解決你的問題, 請讓我知道 :)  thanks

2010年11月9日 星期二

[彈彈唱唱] 至少還有妳(cover by me)。想一個人,唱一首歌。


我怕來不及 我要抱著妳 直到感覺妳的皺紋 有了歲月的痕跡
直到肯定妳是真的 直到失去力氣 為了妳 我願意

動也不能動 也要看著妳 直到感覺妳的髮線 有了白雪的痕跡
直到視線變得模糊 直到不能呼吸 讓我們 形影不離

如果 全世界我也可以放棄 至少還有妳 值得我去珍惜
而妳在這裡 就是生命的奇蹟
也許 全世界我也可以忘記 就是不願意 失去妳的消息

妳掌心的痣 我總記得在那裡

我們好不容易 我們身不由己
我怕時間太快 不夠將妳看仔細
我怕時間太慢 日夜擔心失去妳
恨不得一夜之間白頭 永不分離

2010年11月8日 星期一

[Android] 將ImageButton背景設為透明

左邊透明, 右邊是一般



我發現設為透明最快的方法, 就是設為@null:
<ImageButton android:id="@+id/ImageButton01"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:src="@drawable/normal"
  android:background="@null"
  />

在網路上看到有人說
透明是#00000000
半透明是#e0000000
不過目前我試不出半透明跟透明差在哪= ="

[Android] Activity Lifecycles 生命週期




































執行App時: OnCreate() -> OnStart() -> OnResume()
結束App時: OnPause() -> OnStop() -> OnDestroy()
Finish() -> OnPause() -> OnStop() -> OnDestroy()
暫停App時: OnPause() -> OnStpop()
重啟App時: OnRestart() -> OnStart() -> OnResume()

以下是測試程式 (使用Toast顯示文字):

package com.demo.activitycycle;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class ActivityLifeCycle extends Activity {

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     Toast.makeText(this, "OnCreate()", Toast.LENGTH_SHORT).show();
 }

 @Override
 protected void onDestroy() {
  super.onDestroy();
  Toast.makeText(this, "OnDestroy()", Toast.LENGTH_SHORT).show();
 }

 @Override
 protected void onPause() {
  super.onPause();
  Toast.makeText(this, "OnPause()", Toast.LENGTH_SHORT).show();
 }

 @Override
 protected void onRestart() {
  super.onRestart();
  Toast.makeText(this, "OnRestart()", Toast.LENGTH_SHORT).show();
 }

 @Override
 protected void onResume() {
  super.onResume();
  Toast.makeText(this, "OnResume()", Toast.LENGTH_SHORT).show();
 }

 @Override
 protected void onStart() {
  super.onStart();
  Toast.makeText(this, "OnStart()", Toast.LENGTH_SHORT).show();
 }

 @Override
 protected void onStop() {
  super.onStop();
  Toast.makeText(this, "OnStop()", Toast.LENGTH_SHORT).show();
 }
}

Reference:
http://developer.android.com/guide/topics/fundamentals.html#lcycles
http://developer.android.com/reference/android/widget/Toast.html

[Android] ADB常用指令

adb [-d | -e | -s <serialNumber>] <command>

-d 是送到USB的實際連接設備
-e 是只送到模擬器

如果執行複數個模擬器, 就要用serialNumber來區別
-s <serialnumber>


安裝或移除apk


install安裝後面接的參數是apk的檔案路徑名稱
uninstall移除後面接的參數是package name
ex:
adb -s emulator-5554 install helloworld.apk
adb uninstall com.myandroid.helloworld



偵測設備資訊


# List of devices attached
adb devices 

# device(運作中), offline(離線), bootloader(開機中)
adb get-state

# 取得執行模擬器的序號
adb get-serialno


進入shell命令列模式

指令跟Linux一樣

adb shell
# ls /data/data
# ls /data/app

2010年11月5日 星期五

[Android] HTC Desire 開發機環境設置

安裝Android SDK

安裝HTC Sync

USB連線類型選HTC Sync

手機設定:
設定->應用程式
未知的來源 -> 打勾
開發 -> 除錯 -> 打勾

2010年11月2日 星期二

[Codeigniter] 使用URI Routing來做網址自訂及SEO

URI Routing
http://codeigniter.com/user_guide/general/routing.html


上周在思考製作Blog時, 如何讓網址可以一個name對應到一個post_id

假設我有一個網址

http://localhost/post/list/10

我想要他不要每篇post都只是跟隨著post_id

我可以利用route來做

在route.php中加入
$route['post/cool'] = "post/list/10";

這樣我就可以用
http://localhost/post/cool

來mapping到post/list/10

來達到SEO的效果。

2010年11月1日 星期一

[PHP] 用microtime 記錄PHP執行時間

在PHP的開頭貼上:
$mtime = explode(" ", microtime()); 
$startTime = $mtime[1] + $mtime[0];

在結尾貼上

$mtime = explode(" ", microtime()); 
$endTime = $mtime[1] + $mtime[0]; 
$totalTime = ($endTime - $startTime); 
echo $totalTime." seconds";


就會顯示如
3.99565601349 seconds
的結果

2010年10月16日 星期六

[PHP] 延長phpmyadmin的 timeout時間

在PHP開發階段使用到phpmyadmin, 常會發生過一段時間後, phpmyadmin timeout了, 又要重新登入一次, 實在是很麻煩, 所以調高timeout時間, 較為方便, 做法如下:

修改config.inc.php

$cfg['LoginCookieValidity'] = 7200; // In seconds

2010年10月15日 星期五

[PEAR] Windows使用PHP安裝PEAR遇到failed to open stream: phar error

C:\php>go-pear.bat

在Windows上使用PHP安裝PEAR時遇到錯誤

Warning: require_once(phar://go-pear.phar/index.php): failed to open stream: phar error: invalid url or non-existent phar "phar://go-pear.phar/index.php" in C:\php\PEAR\go-pear.phar on line 1236


解決方法:

修改php.ini

找到

;phar.require_hash = On

改成

phar.require_hash = Off

再安裝一次
C:\php>go-pear.bat

就可以跑了~

[Python] Calculate execution time 計算程式執行時間

'''
Created on 2010/10/15
@author: Hank Wang
'''

import time, itertools

# 記錄開始時間 Record start time
tStart = time.time()

# 跑一個permutation
for item in (itertools.permutations("0123456789", 6)):
    print(''.join(item))

# 記錄結束時間 Record stop time
tStop = time.time()

print(tStop - tStart)

[Linux] LDAP相關資料收集

LDAP Data Interchange Format (LDIF)

http://www.l-penguin.idv.tw/article/ldap-1.htm
http://phorum.study-area.org/index.php?topic=50725.0
http://dhorrigan.com/blog/article/ldap-library-for-codeigniter
http://docs.moodle.org/en/LDAP_authentication

2010年10月13日 星期三

[CentOS] 設定TimeZone 與 Date更改時間

調整 CentOS 的 Time Zone
$ cp /usr/share/zoneinfo/Asia/Taipei /etc/localtime

修改以下檔案變更Timezone
$ vim /etc/sysconfig/clock
ZONE="Asia/Taipei"

# MMDDhhmmYYYY 月日時分年
$ date 101322202010

# 查看 BIOS 時間
$ hwclock -r

# 將系統時間寫入到 BIOS 時間
$ hwclock -w

2010年10月12日 星期二

[Moodle] 修正Moodle 1.9.9無法在某些瀏覽器正常使用HTML Editor

修正方法需些改兩個檔案~ 分別如下:

/lib/moodlelib.php

line 6519 } else {
line 6520 return 1;
line 6521 }

/lib/editor/htmlarea/htmlarea.php 
line 2408 //alert("Mozilla < 1.3 Beta is not supported!\n" +
line 2409 // "I'll try though, but it might not work.");
line 2410 return 'HTMLArea.is_gecko';
line 2414 //return false;
line 2415 return 'HTMLArea.is_gecko';

It Works!

Reference:

Making Moodle work better on #Chrome browser
http://moodle.org/mod/data/view.php?d=13&rid=3945

2010年10月11日 星期一

[CodeIgniter] 解決 CI 下載函數 force_download 使用 IE 下載時檔名亂碼

$file = file_get_contents($this->config->item('upload_path').$row->fullname);
    
// 防止中文檔名IE會亂碼
if(mb_strlen($row->title,"Big5") != strlen($row->title)) $row->title = iconv('utf-8', 'big5', $row->title);
    
force_download($row->title.$row->ext, $file);

參考的文章是直接改download_helper.php的code
我是直接寫在Controller, 傳入前先判斷是否為中文, 若是就先轉換

Reference:

[PHP] 判斷字串是否為中文
小惡魔 - [CodeIgniter] 解決 CI 下載函數 force_download 在 IE 底下檔案標題亂碼

2010年10月10日 星期日

[轉貼] 原來月經不洗頭 不是冷不冷的問題

於阿桑、梅豔芳的死去,給女人的忠告: 女人月經來潮前會有頭暈者,是癌症的前兆。
抗癌之母—莊淑旗博士生於1922年, 今年80歲了, 莊淑旗博士的抗癌養生法--女生月經來時為何不能洗頭 ? 很早以前就常聽到老一輩的人這樣規勸我們這些不怕死的年青人,因為問他們: 為什麼不行?沒人回答得出來,只說:那是以前人經驗累積的告戒,不聽的話, 以後老了就會知道!所以就這樣,一直覺得那可能是古早環境不好, 沒有像我們現在有吹風機,洗好馬上吹乾,應該就沒事了… 想不到…… 看了這篇文章後,才知道不是有沒有吹乾的問題。

不論是小女孩還是大女人,都應該要注意,不要洗頭就對了。男生收到也看一看, 跟你有關的女人都應該讓他知道這個正確觀念才是! 台灣的女醫學博士莊淑旗根據研究醫學,先後在日本慶應大學修得藥理博士、醫學博士,她對日本癌症患者三萬人的病發前的生活調查發現,絕大多數的癌症患者均有極端的偏食習慣,並在調查中有驚人的發現,大多數的乳癌及子宮癌患者,凡在月經來潮時,洗頭髮、提重東西、或產後不注意調養或吃冰冷食物,致子宮收縮不 完全,而使體內賀爾蒙分泌不平衡,長久累積而致癌。

由於這項發現,莊博士乃潛心研究女性月經期間生理調理的方法,在日本發表改善月經期間飲食法,與改變生 活方式療法,結果使許多日本婦女因乳癌、子宮癌症及得患其它癌症開刀者,因飲食、生活的改善,而使癌症不再發。現在這個療法已在日本被廣為宣傳,每年有數 萬人因而得救,這個方法就是,在月經期不能洗頭,她說古老的時侯,婦女們都知道月經期間不能洗頭,將之傳給她的女兒媳婦,但不知其原因,有許多現代人總以 為科學發達,古老的說法無憑據,不信,結果竟得乳癌,莊博士說:以往子宮大量出血的婦女,在婦科未發達以前,她們都不願找醫師看病,而有一個自療方法,即 是將頭髮用水打濕,則子宮收縮,血立刻止掉。 

因為這個原理,她發現,月經來潮時, 不 能洗髮,不能吃冰冷食物,以免讓排出的污血未排淨,而殘留在子宮之內,日積月累,賀爾蒙分泌失調,而有乳癌、子宮癌的發生,除了不洗髮,不吃冰冷食物外, 如月經來潮前會有頭暈、脹奶、便泌者,這是癌症的前兆,預防方法可依體型用黑糖、蓮藕、蘿葡、薏仁等,熬湯飲之,則可防止癌細胞的發展,達到最佳的預防方 法 。
喝奶茶,不吃剛烤的面包,遠離充電電源,白天多喝水晚上少喝,一天不喝多於兩杯咖啡,少吃油多的食物,最佳睡眠時間為晚10點到早6點,晚5點後少吃大 餐,一天喝酒不能超過1杯,不用冷水服膠囊,睡前半小時服藥忌立即躺下,睡眠不足8小時人會變笨,有午覺習慣的人不易變老,手機剩一格點時不要打電話,因 為一格電打電話時的輻射是平常的1000倍,還要記得要用左耳接電話,右耳接電話會直接傷到大腦

現在很多女性朋友們,都有一個最愛得的毛病,就是乳腺癌。(千萬不要摘。一摘就麻煩了,摘一個,過不了幾年另一個必摘),和子宮肌瘤,卵巢囊腫三位一體的婦科病。我本人不是醫生,但是知道這病的病理,他們都來至我們的例假。第5 條,非常好。要養成記錄生理週期的習慣。

正常的例假情況是每月28天,正負不能超過一天,每次時間應該4到5天。忽前忽後都不行 量多了也不行,量少了也不行 。如果有痛經的女性朋友,不要不去管他,長期不管他,以後可能得以上三種的機率很大。經痛到醫院去醫生說是很正常的,確實這個不叫病。叫症狀。特別是要准 備在懷孕的媽媽們,一定要調好。為什麼有的寶寶生出來,有小孩多動症,隔三岔五的感冒,絕對偏食?就是媽媽的例假出問題了。

在食譜裡添加雜糧和蔬菜,一定要多吃五穀雜糧。五穀:大豆,大米,玉米,小麥,谷黍 大家有沒有發現電視上的不孕症的廣告也越來越多了?其實就是因為我們長期吃的食物中激素,農藥,化肥多過,肝臟的排泄力度不夠,排不出來以後,很多的髒東 西要通過卵巢來走,走不出來就會逐漸在堵塞,輸卵管一堵,不孕症就太正常了。夏天大家一定要禁嘴,不要吃冰冷的食物。寒氣就到胃裡,就像莊博士說的,就形 成寒淤,讓排出的污血未排淨,而殘留在子宮之內,日積月累。(子宮肌瘤就是積累的殘留)

 1. 在乾淨的床上裸睡
 2. 生理期不吃巧克力,因為會加重痛經
 3. 養成記錄生理週期的習慣
 4. 通過運動而非調整型內衣來塑造曲線
 5. 不翹二郎腿,以免壓迫神經
 6. 貼身衣物不干洗
 7. 拉風的丁字褲不適宜日常穿著
 8. 去年的衣服要進行曝曬後才可以穿
 9. 如非必要,不使用衛生護墊
10. 定期檢查化妝品的保質期
11. 洗浴後一小時再化妝
12. 即使愛美,也不要在耳朵上部的外緣軟骨部位穿耳洞
13. 瞭解自己的家庭病史,特別是母親和外婆的病史

補充幾條調理的好方法。

1,每天泡一杯紅茶生薑水喝,幾塊新鮮生薑進去,還可以加蜂蜜進去,益母草蜂蜜是最好的
2.益母草膏(益母草膏算是痛經中的聖草了),維威製藥廠出產的,百花牌的貌似不錯,幾塊錢一瓶,提前2天吃,一次一勺,一天3次,再就是提前一個星期吃逍遙丸。
3.泡腳也很好,堅持每天熱水泡腳。
4。還有一定要運動,每天堅持,也不能熬夜

轉貼 From:

[Python] Introducing Lists example 串列範例



Reference:


http://docs.python.org/tutorial/datastructures.html#more-on-lists
http://effbot.org/zone/python-list.htm
http://diveintopython.org/native_data_types/lists.html

[Python] Multiplication 九九乘法

Python Version: 3.1.1

2010年10月9日 星期六

[Game] Ragdoll Cannon 把人當炮彈~ 超好玩XD

Ragdoll Cannon

Ragdoll Cannon, shooting game, target game 



http://www.grungi.com/game/Ragdoll_Cannon.html

全破+全成就


超酷的iPad動畫! Amazing iPad Animations!

超酷的iPad效果~

[Moodle]安裝佈景主題 Installing a new theme

http://docs.moodle.org/en/Installing_a_new_theme


按照以下步驟
Steps are
1) Download the zip file of the theme
1)下載新的佈景主題壓縮檔
2) Extract to it's own named folder
2) 解壓縮成資料夾
3) copy this folder to the /theme folder of your Moodle installation site
3) 複製資料夾到 moodle/theme
4) Go to yourdomain.com/admin/ or your site administration block
4) 打開你Moodle的管理區塊
5) You will have to have administrative rights as the user
5) 你必須擁有管理者的權限
6) Expand Appearance icon/link
6) 打開"外觀"選項
7) Expand Theme icon/link
7) 打開"佈景主題"
8) click on Theme Selector icon/link
8) 打開 "佈景主題選擇"
9) Find your theme picture and theme name displayed here
9) 找到你上傳的佈景主題名稱
10) First click preview link on the right side of your theme picture to preview before selection
10) 先按預覽看看喜不喜歡
11) press Choose button to select your new theme, your theme will now be displayed on the site.
11) 選擇套用你的佈景主題, 整個畫面就會換了

2010年10月6日 星期三

微軟MVP講師給大家的一封信(邵志東)

1. 學習的重點:培養一種 "習慣" 

      我們每個人都應該把學習的重點放在能力,方法的長進上, 而不是具體某種技術、某個知識點的學習。在如今的,知識爆炸的時代,新的技術,新的知識層出不窮,即使我們窮其一生,乃然不可能學習掌握所有的知識、技術,而只能在茫茫的知識海洋中佔據一片孤島。所以我們的重點應該放在培養適合於自己的一種學習方法,更確切地說,是培養一種習慣,一種學習的習慣。 

        我再三強調大家要自己有意識地總結一套學習新東西的方法,就是這個意思。 

          如果能夠掌握一套得心應手的學習新東西的方法,面對茫茫的知識海洋你也會信心十足的。正如一句笑話:「如果你是一個數學高手,當面對新的技術挑戰時,你問一下自己:難道這個技術比高等數學還複雜?這樣一想,你兩會信心十足。雖是笑話,但也是很有道理的。」 

2. 思維方式的培養。 

            生活、學習中每個問題的求解,到最後或者是歸結為一種數學模型,或者是歸結成一種哲學思想。因此我建議大家在自己的自己時間抽空學習一些哲學,數學方面的思想。你的身價就會一幾個新的台階。 

3. 何為「高手」如何成為「高手」? 

      所謂的高手是否就是什麼都懂?並不是。上面談過,世界上是沒有一個人精通所有的知識的,從古至今都沒有,所謂的高手只不過是對於某些事情的處理已經養成了一種良好的習慣。舉例說明,一個VC高手,是否就是熟透MPC的每個類?瞭解Windows的所有SDK?顯然不是。現實中可能有這樣的高手,但寥寥無幾。 

    只要在遇到各種問題後能很快地找到解決問題的方法,就可以算上是一個真正的高手了。 

  因此在實際生活、學習中,我們應該注意多總結方法,修訂方法,特別是對於一些重複發生的事情(大到學習這個行為,小到VC編程中每次遇到的問題),都是我們應該總結每次發生時自己採取的方法並在下次發生時採用。 

      時間一長,就會行成一種習慣。並能時常修訂自己的這種習慣。 

4。求精與求廣 

    對於知識的學習或者我們可以「求精」,限選中一個點,精通它,因為儘管知識是無限的,具體到某個知識點是有限的,我們有可能對某個知識點的所的知識加以瞭解;或者『求廣』,因為人的生存,歸根到底是人的競爭,你懂得東西比別人多,你就會在競爭中獲勝。 

        相比較兩種情況,後都難一些,因為在求廣的同時,其精度不好掌握;淺了如同一無所知:深了精力有限不太可能。前者容易些,但這個點必須選對,否則就可能被社會遺棄。比如,對於我們知識點有;VC,數據庫,網絡等,選擇網絡可能就比選擇數據庫的競爭力強些。 

          對於我們,我感覺還是先「求精」,有了一技之長,然後在這個基礎上拓展掌握知識的範圍。但最重要的還是要逐漸從「靠技術吃飯」轉到「靠思想吃飯

      因此我們的重點應該是總結、培養自己的各種「習慣」當一切成為一種下意識的舉動時,你自己的「修力」就又上了一個新的台階。 

  其實,在我看來,生活就是在培養一種新的習慣,如果把根據結果修訂習慣也變為一種習慣,那就是一種真正意義上的「習慣」。(比如,朋友,如果根本不相往來的話,那根本不算是朋友但如果你和他的相處已經成為一種「習慣」後,你會發現他才是你真正的朋友,他已經成為你生活的一個部分) 

[Moodle] 解決Scorm無法順利上傳檔案及解壓

使用Moodle裡的Scorm時, 如果壓縮檔檔案太大會發現無法上傳檔案

解決方法是把php.ini的post_max_size和upload_max_filesize調大

post_max_size = 500M
upload_max_filesize = 500M

成功上傳檔案後又發現新增Scorm課程時無法順利解壓縮, 導致的原因為php預設的memory是128M, 所以無法解壓大小為300Mb的檔案
調大php.ini的memory_limt即可解決

memory_limit  = 512Mb

php.ini通常位於/etc/php.ini

修改完畢記得重啟Apache

# /sbin/service httpd restart



太大的檔案Moodle無法自己正常解壓縮,要使用外部程式
[網站管理]->[主機]->[系統路徑]

Linux平台
zip的路徑:/usr/bin/zip
unzip的路徑:/usr/bin/unzip

Windows平台:(需先下載並安裝GnuWin32)
zip的路徑:C:\Program Files\GnuWin32\bin\zip.exe
unzip的路徑:C:\Program Files\GnuWin32\bin\unzip.exe

2010年9月29日 星期三

2010年9月28日 星期二

[CodeIgniter] 讓CI支援rar 檔案上傳 20101026修正

今天在用CodeIgniter作檔案上傳功能時, 才發現不管怎麼傳rar都會顯示

The filetype you are attempting to upload is not allowed.

後來發現原來CI的MIME(Multipurpose Internet Mail Extensions)檔根本沒有rar

所以手動加入rar 這個檔案類型

但因不同瀏覽器判斷rar的結果不一樣, 所以要三種都加上

IE8, Chrome, Safari:   application/octet-stream
Firefox: application/rar
Opera:  application/x-rar-compressed


打開 codeigniter\system\application\config\mimes.php


在mime陣列中加上


'rar'   =>  array('application/x-rar-compressed', 'application/rar', 'application/octet-stream')
 

2010-10-26 更新

今天發現Chrome跟Firefox瀏覽器更新之後, 都會發現mimes type抓不到的情形

Firefox是上傳rar時顯示document/unknown
Chrome則是zip和rar都完全抓不到

所以之後就用CI內建的file_helper

有個函數叫get_mime_by_extension, 直接透過副檔名來抓它的type, 即可解決

2010年9月26日 星期日

[Chrome] CSS Viewer 滑鼠移到哪, CSS資訊就在哪

我覺得挺方便的~ 有在寫網頁的人可以裝看看^^


Google Chrome Extension - CSSViewer


https://chrome.google.com/extensions/detail/ggfgijbpiheegefliciemofobhmofgce


CSS Scan (簡中版)
https://chrome.google.com/extensions/detail/nnnadlfihgoldfbmigdbbhlejpenlihe


[Music] Bruno Mars - Just the way you are (& Jayesslee cover)



(Jayesslee cover)




她們好久沒錄新的歌了~ 其實我是剛好看到她們前天有發新的影片才知道這首歌~

這首歌超好聽~ 她們唱的很好聽^^

這部影片結束還表演一刀削完一顆大梨子~@@"


===

Oh her eyes, her eyes
Make the stars look like they're not shining
Her hair, her hair
Falls perfectly without her trying

She's so beautiful
And I tell her every day

Yeah I know, I know
When I compliment her
She wont believe me
And its so, its so
Sad to think she don't see what I see

But every time she asks me do I look okay
I say

When I see your face
There's not a thing that I would change
Cause you're amazing
Just the way you are
And when you smile,
The whole world stops and stares for awhile
Cause girl you're amazing
Just the way you are

Her lips, her lips
I could kiss them all day if she'd let me
Her laugh, her laugh
She hates but I think its so sexy

She's so beautiful

And I tell her every day

Oh you know, you know, you know
Id never ask you to change
If perfect is what you're searching for
Then just stay the same

So don't even bother asking
If you look okay
You know I say

When I see your face
There's not a thing that I would change
Cause you're amazing
Just the way you are
And when you smile,
The whole world stops and stares for awhile
Cause girl you're amazing
Just the way you are

The way you are
The way you are
Girl you're amazing
Just the way you are

When I see your face
There's not a thing that I would change
Cause you're amazing
Just the way you are
And when you smile,
The whole world stops and stares for awhile
Cause girl you're amazing
Just the way you are

[Lovely Song] 初戀紅豆冰主題曲-純文藝戀愛





你是洶湧的海浪 我是疲憊的沙灘
暖暖的斜陽 吊在我們的肩膀
你用醉人的眼波 拴住戀愛的繩索
那麼痴迷 那麼綺麗

你輕輕柔柔的細述著檳城下的雨
淋濕你的長發幾十年來抹也抹不去
啊 我會慢慢的想起 幾十年都不會忘記

輕輕的為你唱首歌 幾十年的歌
靠在你的背後 緊緊握著你的右手
慢慢的教你寫首詩 要你記著我的事
當你孤孤單單的時候我要繼續為你唱出這首歌

---
這首歌對我的意義很特別, 看完這部電影, 心中有深刻的感觸與悸動...

[CSS] 將footer 浮動固定在網頁下方

HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<div id="footer">footer圖片 and 內容</div>


CSS:
#footer {
  position: fixed;
  width: 100%;
  bottom: 0;
  z-index: 1;
}

Note: 不支援IE6以下瀏覽器

如果要支援的話請搜尋 " position: fixed IE6 Hack "

2010年9月16日 星期四

[CodeIgniter] Show all session userdata 列出所有session

使用CI 時, 在http://codeigniter.com/user_guide/libraries/sessions.html

找不到列出所有Session key & value的方法

後來直接到CI Library打開Session.php

發現裡面有個方法叫 all_userdata


/**
  * Fetch all session data
  *
  * @access public
  * @return mixed
  */
 function all_userdata()
 {
  return ( ! isset($this->userdata)) ? FALSE : $this->userdata;
 }

所以他有提供這方法, 只是Document沒有寫

使用方法
$this->session->all_userdata();

2010年9月15日 星期三

[PHP] 執行緒安全Thread Safe or None-Thread Safe ?

None-Thread Safe就是非執行緒安全,在執行時不進行執行緒(thread)安全檢查;
Thread Safe就是執行緒安全,執行時會進行執行緒(thread)安全檢查,以防止有新要求就啟動新執行緒的 CGI 執行方式耗盡系統資源。

PHP執行有兩種方式:ISAPI和FastCGI。

FastCGI執行方式是以單一執行緒來執行操作,所以不需要進行執行緒的安全檢查,除去執行緒安全檢查的防護反而可以提高執行效率,所以,如果是以 FastCGI(無論搭配 IIS 6 或 IIS 7)執行 PHP ,都建議下載執行 non-thread safe 的 PHP。

而執行緒安全檢查正是為ISAPI方式的PHP準備的,因為有許多php模塊都不是執行緒安全的,所以需要使用Thread Safe的PHP。

[PHP] 我該選擇哪個版本的PHP on Windows

在PHP的官網上有兩種Windows Binaries的版本for windows, 翻譯以下官方原文讓不知道該下載哪個的人參考


我該選擇哪個版本?
Which version do I choose?


如果你用Apache1 和 Apache2, 你要用VC6版本的PHP
If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP


如果你在IIS上用PHP, 你需要VC9版本的PHP
If you are using PHP with IIS you should use the VC9 versions of PHP


VC6 版本是用古老的Visual Studi 6編譯器來編譯
VC6 Versions are compiled with the legacy Visual Studio 6 compiler


VC9 版本是用Visual Studio 2008編譯器來編譯, 改進了效能且更加穩定
VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability.


VC9  版本要求安裝 Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) 執行環境
The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64)installed


別在Apache使用VC9 的版本
Do NOT use VC9 version with apache.org binaries

2010年9月9日 星期四

[CentOS] vsftpd 安裝與管理

安裝
# yum install vsftpd

設定檔
# vim /etc/vsftpd/vsftpd.conf

限制使用者不能離開家目錄
修改vsftpd.conf

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
write_enable = YES

touch /etc/vsftpd.chroot_list

Bind 網頁目錄到家目錄
# vim /etc/vsftpd.chroot_list  # 將要允許的使用者帳號加入
# mkdir /home/user/www
# mount --bind /var/www /home/user/www
# chmod 755 /var
# chmod 755 /var/www


更改預設的port
在vsftpd.conf加入 listen_port=1234

[CentOS] 常用用戶管理指令 User Manage Command

新增使用者

$ useradd UserName

設定使用者密碼

$ passwd UserName

刪除使用者

$ userdel UserName

查看可以登入系統的使用者

$ cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1

查看某一使用者

$ w hank

查看登入的使用者

$ who

查看使用者的操作(用root登入)

$ w

查看使用者歷史記錄

$ last

查看系統中有哪些使用者

$ cut -d : -f 1 /etc/passwd

2010年9月5日 星期日

[CentOS] 限制使用SSH登入的User

# vim /etc/ssh/sshd_config

在檔案最後一行加上:
AllowUsers username1 username2

重新啟動 ssh 服務:

# /etc/rc.d/init.d/sshd restart

See Also
http://www.openssh.com/manual.html

[CentOS] ADSL設定PPPOE 網路連線

$ adsl-setup

然後照著指示填入帳號密碼及設定

ADSL連線:
$ ifup ppp0

關閉ADSL連線:
$ ifdown ppp0

查看ADSL連線狀況
$ adsl-status /etc/sysconfig/network-scripts/ifcfg-ppp0

[CentOS] 手動設定區域網路 Configuring a DHCP Client

編輯以下檔案來設置DHCP


# vi /etc/sysconfig/network-scripts/ifcfg-eth0

靜態IP設定範例:


DEVICE=eth0
BOOTPROTO=static
HWADDR=00:19:D1:2A:BA:A8
IPADDR=10.10.29.66
NETMASK=255.255.255.192
ONBOOT=yes

用DHCP自動取得IP:


DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=00:19:D1:2A:BA:A8
ONBOOT=yes

將設定檔存檔後, 重新啟動網卡:

$ /etc/init.d/network restart

Reference:

http://www.cyberciti.biz/faq/setting-up-a-linux-for-dhcp/

[CentOS] ifconfig command not found

CentOS安裝完預設$PATH沒有/sbin

查看目前$PATH

$ echo $PATH


手動加上

$ export "$PATH:/sbin"

[UML] StarUML 自動從diagram產生PHP Class檔














參考網站


<?php

class ShopProduct {

 public $title;
 public $produceMainName;
 public $producerFirstName;
 public $price;

 public function __construct($title,$firstName,$mainName,$price) {

  return;
 }

 public function getProducer() {

  return;
 }

 public function getSummaryLine() {

  return;
 }
}

?>

2010年9月3日 星期五

[PHP] 你的PHP程式是否會產生Y2K38的Bug?

原本的時間取得方式會導致Y2K38

<?php
$date = '2040-02-01';
$format = 'l d F Y H:i';
$mydate1 = strtotime($date);
echo date($format, $mydate1);
?>

用PHP 5.2.0 後的新的DateTime Class來修正

<?php  
$date = '2040-02-01';  
$format = 'l j F Y H:i';  
$mydate2 = new DateTime($date);  
echo $mydate2->format($format);
?>

不過2038還那麼久, 現在擔心好像還太早, 目前很難出現災情, 不然以後都習慣用DateTime Class就好了

2010年8月30日 星期一

[Theory] 台灣身分證驗證規則 R.O.C. ID

身分證共有9個數字(N1~N9)加上開頭一個英文字(N0)

N0 N1 N2 N3 N4 N5 N6 N7 N8 N9

N0的英文字代表出生戶籍登記的地區 (不見得是出生地)

英文字與出生地區對照表如下:

A台北市 B台中市 C基隆市 D台南市 E高雄市 F台北縣 G宜蘭縣
H桃園縣 I嘉義市 J新竹縣 K苗栗縣 L台中縣 M南投縣 N彰化縣
O新竹市 P雲林縣 Q嘉義縣 R台南縣 S高雄縣 T屏東縣 U花蓮縣
V台東縣 W金門縣 X澎湖縣 Y陽明山 Z連江縣

每個英文字有其代表的數字, 用來稍後驗證時用, 其對照表如下:
A=10 B=11 C=12 D=13 E=14 F=15 G=16
H=17 I=34 J=18 K=19 L=20 M=21 N=22
O=35 P=23 Q=24 R=25 S=26 T=27
U=28 V=29 W=32 X=30 Y=31 Z=33

身份證號碼驗證方式:

(N0 十位數 + (N0 個位數 x 9) + (N1 x 8) + (N2 x 7) +  (N3 x 6) +  (N4 x 5) +  (N5 x 4) +  (N6 x 3) +  (N7 x 2) + N8 + N9)

以上算式得出來的結果如果能被10整除, 此身分證字號即為正確。

[Theory] ISBN國際標準書號

http://zh.wikipedia.org/zh-tw/國際標準書號

國際標準書號(International Standard Book Number,ISBN;擬發音is-ben),是國際通用的圖書或獨立的出版物(除定期出版的期刊)代碼。出版社可以通過國際標準書號清晰的辨認所有非期刊書籍。一個國際標準書號只有一個或一份相應的出版物與之對應。新版本如果在原來舊版的基礎上沒有內容上太大的變動,在出版時也不會得到新的國際標準書號碼。當平裝本改為精裝本出版時,原來相應的國際標準書號號碼也應當收回。


校驗碼的計算方法(13碼)

  1. 假設某國際標準書號號碼前12位是:978-986-181-728;
  2. 計算加權和S:S = (9x1)+(7x3)+(8x1)+(9x3)+(8x1)+(6x3)+(1x1)+(8x3)+(1x1)+(7x3)+(2x1)+(8x3) = 164;
  3. 計算S÷10的餘數M:M = 164 mod 10 = 4;
  4. 計算10 - M 的差N:N = 10 − 4 = 6;
  • 如果N = 10,校驗碼是數字「0」;
  • 如果N為其他數字,校驗碼是數字N。;

2010年8月11日 星期三

[HTML] mailto:

<a href="mailto:收件者?cc=副本&bcc=密件&subject=標題&body=內文">寄信給我</a>

[CodeIgniter] 使用Model時, 檔案名稱要用小寫

避免在不同的作業系統(Linux, Windows) Server大小寫錯誤。
The file name will be a lower case version of your class name. For example, if your class is this:
class User_model extends Model {

    function User_model()
    {
        parent::Model();
    }
}
Your file will be this:
application/models/user_model.php
都怪我沒把說明文件看清楚= =" 除錯除很久~

2010年8月10日 星期二

[PHP] convert date to timestamp 時間戳記

http://php.net/manual/en/function.strtotime.php
strtotime  Parse about any English textual datetime description into a Unix timestamp


Datetime to Timestamp

$timestamp = strtotime($datetime);


Timestamp to Datetime

date('Y-m-d', $timestamp);


<?php 
    // Calculate the difference in days.  
    $date1 = strtotime(2010-10-10);
    $date2 = strtotime(2011-12-01);
    $daysDiff = ($date2 - $date1)/(24 * 60 * 60);

    // Which is the latest?
    if ($date2 > $date1) {
      echo "$date2 is later than $date1";
    }
?>

可以用以上Code來作時間前後的比較, But if you do, your code will be susceptible to the 2038 bug.
Related Posts Plugin for WordPress, Blogger...