每一秒加一個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
2010年12月30日 星期四
[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']" 字串
所以如果要一一列出時
會變
所以要先用eval() 把 String 轉回 List即可
aaa
bbb
See Also:
http://docs.python.org/library/functions.html#eval
讀出來時會變成 "['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
===========
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:
Step 2: 同步資料庫
syncdb會根據setting.py裡INSTALLED_APPS的內容來建立需要的資料庫
你可以透過SQLite Manager來查看建立了哪些資料表
http://code.google.com/p/sqlite-manager/
設置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, 顯示在新開的視窗中
References:
http://www.learn-ajax-tutorial.com/Json.cfm
<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.
Result:
*$
*
*|
*
*
*$
Reference: http://api.jquery.com/category/selectors/
<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>
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
我的作業系統是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'
>>> 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
>>> 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
按下Ctrl+Alt+E後會自動產生成下列的HTML
Reference:
Zen Coding: Generating HTML from selectors
Zen Coding: A Speedy Way To Write HTML/CSS Code
直接看範例, 我是用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日 星期三
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即可
解決方法:
修改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的兩個設定即可
沒想到開phpinfo出來看還是沒有作用, Google一下發現, 原來Windows Server本身基於安全性問題, 自己就有限制。
解決方法如下:
Step 1. 系統管理工具 -> 服務 (或是直接用 執行 -> services.msc)
Step 2. 停止IIS Admin Service和World Wide Web Publishing Service服務 (否則修改檔案後要存檔時, 他會說有服務在使用)
Step 3. 用文字編輯器開啟 C:\Windows\system32\inetsrv\metabase.xml
Step 4. 尋找 AspMaxRequestEntityAllowed,原本預設為 204800 (代表 200 KB)
Step 5. 我的需求為10M 所以我改成 10240000
Step 6.存檔後重新啟動上述兩個服務即可
系統是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 Service和World 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前面的# 拿掉存檔就可以了
最後到網路上去查才發現原來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/
錄製網頁的使用畫面, 然後自動測試, 例如新增, 刪除, 修改, 可以省下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
解壓縮Ant, Tomcat
複製serlet-api.jar給ant
設定環境變數
啟動Tomcat
檢查Server Log
== Automate startup 自動啟動Tomcat ==
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...來達成
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
lxml - Processing XML and HTML with Python
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
透過referer來判斷Domain是否相同
==
在survey時有搜尋到一篇文章, 說Tomcat7新的feature有支援擋csrf
有興趣可以看看
Tomcat 7 新特性学习之一 - 防止CSRF攻击
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突然出現一堆錯誤訊息都是
1. 選取所有的Project
2. 點選單列的Project -> Clean
3. 選Clean All Projects, 然後按OK就解決了!
可能有其他情況會出現一樣的錯誤, 如果這成功/不成功 解決你的問題, 請讓我知道 :) thanks
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:
在網路上看到有人說
透明是#00000000
半透明是#e0000000
不過目前我試不出半透明跟透明差在哪= ="
我發現設為透明最快的方法, 就是設為@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中加入
這樣我就可以用
http://localhost/post/cool
來mapping到post/list/10
來達到SEO的效果。
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的開頭貼上:
在結尾貼上
就會顯示如
3.99565601349 seconds
的結果
$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
修改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
就可以跑了~
在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)
2010年10月13日 星期三
[CentOS] 設定TimeZone 與 Date更改時間
調整 CentOS 的 Time Zone
修改以下檔案變更Timezone
ZONE="Asia/Taipei"
# MMDDhhmmYYYY 月日時分年
# 查看 BIOS 時間
# 將系統時間寫入到 BIOS 時間
$ 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
/lib/editor/htmlarea/htmlarea.php
It Works!
Reference:
Making Moodle work better on #Chrome browser
http://moodle.org/mod/data/view.php?d=13&rid=3945
/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:
2010年10月9日 星期六
[Game] Ragdoll Cannon 把人當炮彈~ 超好玩XD
Ragdoll Cannon
Ragdoll Cannon, shooting game, target game
http://www.grungi.com/game/Ragdoll_Cannon.html
全破+全成就
[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) 選擇套用你的佈景主題, 整個畫面就會換了
按照以下步驟
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,數據庫,網絡等,選擇網絡可能就比選擇數據庫的競爭力強些。
對於我們,我感覺還是先「求精」,有了一技之長,然後在這個基礎上拓展掌握知識的範圍。但最重要的還是要逐漸從「靠技術吃飯」轉到「靠思想吃飯」
因此我們的重點應該是總結、培養自己的各種「習慣」當一切成為一種下意識的舉動時,你自己的「修力」就又上了一個新的台階。
其實,在我看來,生活就是在培養一種新的習慣,如果把根據結果修訂習慣也變為一種習慣,那就是一種真正意義上的「習慣」。(比如,朋友,如果根本不相往來的話,那根本不算是朋友但如果你和他的相處已經成為一種「習慣」後,你會發現他才是你真正的朋友,他已經成為你生活的一個部分)
我們每個人都應該把學習的重點放在能力,方法的長進上, 而不是具體某種技術、某個知識點的學習。在如今的,知識爆炸的時代,新的技術,新的知識層出不窮,即使我們窮其一生,乃然不可能學習掌握所有的知識、技術,而只能在茫茫的知識海洋中佔據一片孤島。所以我們的重點應該放在培養適合於自己的一種學習方法,更確切地說,是培養一種習慣,一種學習的習慣。
我再三強調大家要自己有意識地總結一套學習新東西的方法,就是這個意思。
如果能夠掌握一套得心應手的學習新東西的方法,面對茫茫的知識海洋你也會信心十足的。正如一句笑話:「如果你是一個數學高手,當面對新的技術挑戰時,你問一下自己:難道這個技術比高等數學還複雜?這樣一想,你兩會信心十足。雖是笑話,但也是很有道理的。」
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
解決方法是把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日 星期三
[SQL] 在SQL中使用正規表示式Regular Expression
UPDATE files SET type="image" WHERE origin_type REGEXP '^image' SELECT * FROM files WHERE origin_type REGEXP '^image'
[PHP] 判斷字串是否為中文
echo (mb_strlen($str,"Big5") == strlen($str)) ? "不是中文" : "是中文"
mb_strlen()
http://php.net/manual/en/function.mb-strlen.php
strlen()
http://www.php.net/manual/en/function.strlen.php
2010年9月28日 星期二
[CodeIgniter] 讓CI支援rar 檔案上傳 20101026修正
今天在用CodeIgniter作檔案上傳功能時, 才發現不管怎麼傳rar都會顯示
打開 codeigniter\system\application\config\mimes.php
在mime陣列中加上
2010-10-26 更新
今天發現Chrome跟Firefox瀏覽器更新之後, 都會發現mimes type抓不到的情形
Firefox是上傳rar時顯示document/unknown
Chrome則是zip和rar都完全抓不到
所以之後就用CI內建的file_helper
有個函數叫get_mime_by_extension, 直接透過副檔名來抓它的type, 即可解決
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月27日 星期一
2010年9月26日 星期日
[Chrome] CSS Viewer 滑鼠移到哪, CSS資訊就在哪
我覺得挺方便的~ 有在寫網頁的人可以裝看看^^
Google Chrome Extension - CSSViewer
https://chrome.google.com/extensions/detail/ggfgijbpiheegefliciemofobhmofgce
CSS Scan (簡中版)
https://chrome.google.com/[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:
CSS:
Note: 不支援IE6以下瀏覽器
如果要支援的話請搜尋 " position: fixed IE6 Hack "
<!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
所以他有提供這方法, 只是Document沒有寫
使用方法
找不到列出所有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
我該選擇哪個版本?
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 安裝與管理
安裝
設定檔
限制使用者不能離開家目錄
修改vsftpd.conf
touch /etc/vsftpd.chroot_list
Bind 網頁目錄到家目錄
更改預設的port
在vsftpd.conf加入 listen_port=1234
# 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
手動加上
查看目前$PATH
$ echo $PATH
手動加上
$ export "$PATH:/sbin"
[UML] StarUML 自動從diagram產生PHP Class檔
參考網站
PHP5 Code Generator Template http://staruml.sourceforge.net/en/templates.php
<?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 5.2.0 後的新的DateTime Class來修正
不過2038還那麼久, 現在擔心好像還太早, 目前很難出現災情, 不然以後都習慣用DateTime Class就好了
<?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的英文字代表出生戶籍登記的地區 (不見得是出生地)
英文字與出生地區對照表如下:
每個英文字有其代表的數字, 用來稍後驗證時用, 其對照表如下:
身份證號碼驗證方式:
(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整除, 此身分證字號即為正確。
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),是國際通用的圖書或獨立的出版物(除定期出版的期刊)代碼。出版社可以通過國際標準書號清晰的辨認所有非期刊書籍。一個國際標準書號只有一個或一份相應的出版物與之對應。新版本如果在原來舊版的基礎上沒有內容上太大的變動,在出版時也不會得到新的國際標準書號碼。當平裝本改為精裝本出版時,原來相應的國際標準書號號碼也應當收回。
國際標準書號(International Standard Book Number,ISBN;擬發音is-ben),是國際通用的圖書或獨立的出版物(除定期出版的期刊)代碼。出版社可以通過國際標準書號清晰的辨認所有非期刊書籍。一個國際標準書號只有一個或一份相應的出版物與之對應。新版本如果在原來舊版的基礎上沒有內容上太大的變動,在出版時也不會得到新的國際標準書號碼。當平裝本改為精裝本出版時,原來相應的國際標準書號號碼也應當收回。
校驗碼的計算方法(13碼)
- 假設某國際標準書號號碼前12位是:978-986-181-728;
- 計算加權和S:S = (9x1)+(7x3)+(8x1)+(9x3)+(8x1)+(6x3)+(1x1)+(8x3)+(1x1)+(7x3)+(2x1)+(8x3) = 164;
- 計算S÷10的餘數M:M = 164 mod 10 = 4;
- 計算10 - M 的差N:N = 10 − 4 = 6;
- 如果N = 10,校驗碼是數字「0」;
- 如果N為其他數字,校驗碼是數字N。;
2010年8月28日 星期六
2010年8月11日 星期三
[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
都怪我沒把說明文件看清楚= =" 除錯除很久~
訂閱:
文章 (Atom)