2012年7月10日 星期二

資料存取 SharedPreferences

//資料存檔

import android.content.SharedPreferences;


SharedPreferences save_value = getSharedPreferences(SETTING_PREF, 0);

save_value.edit()
    .putString("string_value",  "String"  )
    .putInt("int_value", 123 )
    .putLong("long_value", 1234L ) // 有L才為Long ,否為 int
    .putFloat("float_value", Float.parseFloat("1.23") )
    .putBoolean("boolean_value", true )
    .commit();

//取出資料

SharedPreferences get_value = getSharedPreferences(SETTING_PREF, 0);

 String get_string = get_value.getString("string_value", "" );
 Int get_int = get_value.getInt("int_value", 0 );
 Long get_long =  get_value.getLong("long_value", 0 );
 float get_float =  get_value.getFloat("float_value", 0 );
 boolean get_boolean =  get_value.getBoolean( "boolean_value" , true );


 //用法 : 可用於onStop 以便下次開啟時使用
   protected void onStop(){
        super.onStop();
        SharedPreferences get_value = getSharedPreferences(SETTING_PREF, 0);         get_value.edit()
        .putString("string_value",  "快速存檔值"  )
        .commit();

   }

2012年7月9日 星期一

長按選單 ContextMenu


 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button button = new Button(this);
        registerForContextMenu(  button  ); //引用長按選單

}

//設定長按選單的option
 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
       
        menu.setHeaderTitle("title ?"); //設定長按選單標題
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, 1, 0, "item name 1");
        menu.add(0, 2, 0, "item name 2");
 }


//長按選單的 onclick 動作
public boolean onContextItemSelected(MenuItem item) {

   switch (item.getItemId()) {
        case 1 :
            Toast.makeText( Activity.this , "item name 1", Toast.LENGTH_LONG).show();
        break;

        case 2 :  
            Toast.makeText( Activity.this , "item name 2", Toast.LENGTH_LONG).show();
        break;

   return true;

}




系統Menu選單 onCreateOptionsMenu + SubMenu

//引用系統Menu選單 
public boolean onCreateOptionsMenu(Menu menu) {
      super.onCreateOptionsMenu(menu); 
     //設定 SubMenu 
     SubMenu submenu_1 = menu.addSubMenu(0, 1, Menu.NONE, "submenu_1");  
     SubMenu submenu_2 = menu.addSubMenu(0, 2, Menu.NONE, "submenu_2"); 
      submenu_1.add(0, 1 , 0, "menu 1-1");
      submenu_2.add(0, 2 , 0, "menu 2-1");
     // add ( int groupId, int itemId ,int order , int title ) 
     // add ( 群組 getGroupId , ID  getItemId  , 排序 getOrder ,    標題 getTitle )
     return true;
}
 
//onclick 動作
public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    switch(item.getItemId()){
        case 1 :

        break; 
    }
    return true; 
} 

 
 
 

UI AlertDialog (popup window)

寫法1

new AlertDialog.Builder(this)
        .setTitle("title") // 標題
        .setMessage('content') // 說明內容
        .setPositiveButton("close", null) //關閉按鈕
        .show();

//都需為String 格式


寫法2

 AlertDialog.Builder builder = new AlertDialog.Builder(this);
 builder.setTitle("標題");
 builder.setMessage("內容");
 builder.setPositiveButton("關閉",null); //關閉的動作
 builder.create();
 builder.show();


數值,字串,陣列

數值轉字串
Integer.toString() ;

字串陣列
final String[] string_arr = {
            "array_1",
            "array_2",
            "array_3",
            "array_4",
        };


2012年6月6日 星期三

mysql select latin1 編碼格式

直接在 phpmyadmin 使用 select 語法顯示出正常字串而非亂碼

latin1 to utf8 顯示文字內容

select CONVERT ( CAST ( `row_value` as BINARY )  USING utf8 ) as row_value from DB_TABLE

latin1 to big5  顯示文字內容

select CONVERT ( CAST ( `row_value` as BINARY )  USING utf8 ) as row_value from DB_TABLE

DB_TABLE資料表中 row_value 欄位使用 latin1 的編碼格式存檔 , 使用上例語法可直接將 latin1 轉成
需要的編碼格式在 phpmyadmin 真接顯示其內容 , 免改設定檔

參考資料 :
http://nicj.net/mysql-converting-an-incorrect-latin1-column-to-utf8/ 


phpmyadmin

libraries/select_lang.lib.php
$mysql_charset_map 
更改 utf-8 為  'utf-8' => 'latin1'  即可匯出 latin1 為正常顯常中文


2012年1月10日 星期二

ckeditor 增加字型

檔案
ckeditor/ckeditor.js
行數 50
找到 Geneva, sans-serif
在後面加入所要字型 ,字型分隔為 ;  如
{顯示字型} / {使用的字型} or
{字型}
範例 1
Geneva, sans-serif ;新細明體;標楷體
範例 2
Geneva, sans-serif ;新細明體/新細明體 , sans-serif;標楷體  / 標楷體,sans-serif

存檔 , 即完成加入字型動作


ckeditor 3.6.x 版使用

ckeditor/config.js

加入config 資料

CKEDITOR.editorConfig = function( config )
{

 
config.font_names ='Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif;新細明體;標楷體;微軟正黑體' ; // 為加入額外字體 

}

2011年11月2日 星期三

web 伺服器架設 - 使用yum

安裝 PHP + Apache
自動安裝 httpd(Apache)  和 php
yum -y install httpd php 

php.ini位置
/etc/php.ini

網頁放置位置 www
/var/www/html

Apache 的 httpd.conf
/var/httpd/conf/httpd.conf

啟動 httpd
service httpd start

防火牆 80 port 請開放

安裝 mysql

yum -y instal mysql mysql-server

啟動 mysql
service mysqld start

修改 root密碼
/usr/bin/mysqladmin -u root password [新密碼]

登入測試
mysql -u root -p
Enter password: [新密碼]

顯示 mysql>
即成果登入
 
PS:因本人安裝 fedora 15 的 mysql 時出錯經驗 , 所以在這提醒 ,遇到無法啟動時,請在重新yum mysql-server 檢視錯誤看少那個檔,直接使用yum 安裝即可  

安裝 phpmyadmin

yum -y install phpmyadmin php_mysql php_mbstring 

安裝完成後,開放外部電腦登入
vi /etc/httpd/conf.d/phpMyAdmin.conf



找到 phpmyadmin安裝路徑 /usr/share/phpMyAdmin/開放登入
<Directory /usr/share/phpMyAdmin/>
   Order Deny,Allow
   allow from All
</Directory>

修改 phpmyadmin 設定檔
cd /usr/share/phpmyadmin 
複製 config 設定檔
cp  config.sample.inc.php config.inc.php

重啟httpd 
service httpd restart
檢視是否成功
http://[IP]/phpMyAdmin

2011年11月1日 星期二

自動更新 yum

指令

檢查可更新檔
yum check-update


安裝更新檔
yum update

刪除yum 安裝檔
yum remove [檔案]

列出可更新檔案
yum list

安裝
yum install [檔案]
or
yum -y install [檔案]

清除 yum暫存cache
yum clean all


-- yum 安裝列表說明 --

2011年10月31日 星期一

web 伺服器架設 - XMAPP

使用 XMAPP 快速架設 PHP + MYSQL

XMAPP官網下載

下載 linux 版

切換最高權限管理者
su root

至下載目錄解 tar

ls 檢視下載的 xmapp 檔案名稱 

因當時下載案為 xampp-linux-1.7.7.tar.gz
-C 為覆蓋至此版本的 
下述為解 tar 到  /opt 這目錄
tar xvfz xampp-linux-1.7.7.tar.gz -C /opt

開啟xmapp
下方指令請照打,不然找不到執行檔
/opt/lampp/lampp start

啟動後會看到
Starting XAMPP 1.7.7...
LAMPP: Starting Apache...
LAMPP: Starting MySQL...
LAMPP started.

啟動完成

使用 http://localhost 可看到頁面

mysql 管理頁面
root 密碼為空白,請立即變更密碼
http://localhost/phpmyadmin 

自動開機啟用

vi 開起
/etc/rc.d/rc.local


加入
/opt/lampp/lampp start

reboot重開檢視是否成功

外網無法檢視問題
1. 檢查 防火牆
2. 檢查 SELinux


ssh 啟用

啟用 SSH
切換至最高權限使用者
su root

使用 vi 開起
/etc/ssh/sshd_config

取消 #

允許同時連接入最大數量
MaxSessions 10
允許連接最大數量
MaxStartups 10

vi  :wq 存檔


開啟 ssh 服務
 service sshd start

設定 開機自動啟用

vi 開起
/etc/rc.d/rc.local

加入後, vi 存檔
/etc/ssh/sshd start

reboot 重開檢視是否成功

外網無法檢視問題
1. 檢查 防火牆
2. 檢查 SELinux

2011年10月14日 星期五

CSS HACK

IE6 , IE7 only
#bg{
  * background:#FFF;
}

IE7, IE8, IE9 only
#bg{
  background:#FFF \9;
}

IE7 only
*+#bg{
  background:#FFF;
}

IE6 only
#bg{
  _background:#FFF;
}


IE8 only 
@media \0screen {
  #bg{margin-top:-15px;}
}


IE9 only
:root #bg{
color: #F00\9;
}





FF6 FF7
  html>/**/body #bg, x:-moz-any-link, x:default {
background:#FFF;
}

判斷 win7 並 FF only
在win7 和 winXP firefox 會有css誤差 , 所以在頁尾判斷出作業系統 , 在使用FF only的CSS Hack
if(navigator.oscpu == "Windows NT 6.1"){
  document.write('<style>html>/**/body #bg, x:-moz-any-link, x:default { margin-top:-20px; }</style>');
}

2011年7月12日 星期二

ckfinder 縮圖取消

編輯 config.php 檔
將 enabled 部份設定為 flase , 即關閉縮圖

$config['Thumbnails'] = Array(
'url' =>  $baseUrl . '_thumbs',       
'directory' => $baseDir . '_thumbs',
'enabled' => false,
'directAccess' => false,
'maxWidth' => 100,
'maxHeight' => 100,
'bmpSupported' => true,
'quality' => 80);



顯示ckfinder圖片 , 不使用 _thumbs 資料夾縮圖圖片
將路徑變更位置

$config['Thumbnails'] = Array(
'url' =>  $baseUrl ,
'directory' => $baseDir ,
'enabled' => false ,
'directAccess' => false,
'maxWidth' => 100,
'maxHeight' => 100,
'bmpSupported' => true,
'quality' => 80);

2011年5月19日 星期四

TCPDF 中文字型


$pdf->SetFont('msungstdlight', '', 14, '', true); // 繁中
$pdf->SetFont('dejavusans', '', 14, '', true); // 預設 utf8

2011年4月26日 星期二

SQL 計算欄位字串出現次數

資料表建立

CREATE TABLE `test1` (
`C1` int(11) NOT NULL auto_increment,
`C2` varchar(11) default NULL,
PRIMARY KEY (`C1`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8


INSERT INTO `test1` VALUES (1, '10442');
INSERT INTO `test1` VALUES (2, '4403');
INSERT INTO `test1` VALUES (3, '6513');
INSERT INTO `test1` VALUES (4, '2222');

SELECT 語法 for Mysql

方式 1

SELECT CHAR_LENGTH(Replace(C2,'4','4z'))-CHAR_LENGTH(C2) FROM TEST1 where C2 LIKE '%4%'

方式 2

SELECT CHAR_LENGTH(C2)-CHAR_LENGTH(Replace(C2,'4','')) FROM TEST1 where C2 LIKE '%4%'


原理 :
用replace的方式 , 取出 4 後將 4的部份變更字元數 , 就會增加字串的長度或減少 , 在使用 Len ( SQL ) , CHAR_LENGTH ( MYSQL ) 來計算字串的長度 , 將變更後的長度和原本長度互減就可找出字串欄位出現的次數

2011年4月21日 星期四

正規化表示法

資料來源:張智星的網站 – 正規表示式

通用範例
通用式 說明及範例 比對不成立之字串
/a/ 含字母 "a" 的字串,例如 "ab", "bac", "cba" "xyz"
/a./ 含字母 "a" 以及其後任一個字元的字串,例如 "ab", "bac"(若要比對.,請使用 \.) "a", "ba"
/^xy/ 以 "xy" 開始的字串,例如 "xyz", "xyab"(若要比對 ^,請使用 \^) "axy", "bxy"
/xy$/ 以 "xy" 結尾的字串,例如 "axy", "abxy"以 "xy" 結尾的字串,例如 "axy", "abxy" (若要比對 $,請使用 \$) "xya", "xyb"
/[13579]/ 包含 "1" 或 "3" 或 "5" 或 "7" 或 "9" 的字串,例如:"a3b", "1xy" "y2k"
/[0-9]/ 含數字之字串 不含數字之字串
/[a-z0-9]/ 含數字或小寫字母之字串 不含數字及小寫字母之字串
/[a-zA-Z0-9]/ 含數字或字母之字串 不含數字及字母之字串
/b[aeiou]t/ "bat", "bet", "bit", "bot", "but" "bxt", "bzt"
/[^0-9]/ 不含數字之字串(若要比對 ^,請使用 \^) 含數字之字串
/[^aeiouAEIOU]/ 不含母音之字串(若要比對 ^,請使用 \^) 含母音之字串
/[^\^]/ 不含 "^" 之字串,例如 "xyz", "abc" "xy^", "a^bc"

伏號說明
字元 說明 簡單範例
\ 避開特殊字元 /A\*/ 可用於比對 "A*",其中 * 是一個特殊字元,為避開其特殊意義,所以必須加上 "\"
^ 比對輸入列的起始位置 /^A/ 可比對 "Abcd" 中的 "A",但不可比對 "aAb"
$ 比對輸入列的結束位置 /A$/ 可比對 "bcdA" 中的 "A",但不可比對 "aAb"
* 比對前一個字元零次或更多次 /bo*/ 可比對 "Good boook" 中的 "booo",亦可比對 "Good bk" 中的 "b"
+ 比對前一個字元一次或更多次,等效於 {1,} /a+/ 可比對 "caaandy" 中的 "aaa",但不可比對 "cndy"
? 比對前一個字元零次或一次 /e?l/ 可比對 "angel" 中的 "el",也可以比對 "angle" 中的 "l"
. 比對任何一個字元(但換行符號不算) /.n/ 可比對 "nay, an apple is on the tree" 中的 "an" 和 "on",但不可比對 "nay"
(x) 比對 x 並將符合的部分存入一個變數 /(a*) and (b*)/ 可比對 "aaa and bb" 中的 "aaa" 和 "bb",並將這兩個比對得到的字串設定至變數 RegExp.$1 和 RegExp.$2。
xy 比對 x 或 y /a*b*/g 可比對 "aaa and bb" 中的 "aaa" 和 "bb"
{n} 比對前一個字元 n 次,n 為一個正整數 /a{3}/ 可比對 "lllaaalaa" 其中的 "aaa",但不可比對 "aa"
{n,} 比對前一個字元至少 n 次,n 為一個正整數 /a{3,}/ 可比對 "aa aaa aaaa" 其中的 "aaa" 及 "aaaa",但不可比對 "aa"
{n,m} 比對前一個字元至少 n 次,至多 m 次,m、n 均為正整數 /a{3,4}/ 可比對 "aa aaa aaaa aaaaa" 其中的 "aaa" 及 "aaaa",但不可比對 "aa" 及 "aaaaa"
[xyz] 比對中括弧內的任一個字元 /[ecm]/ 可比對 "welcome" 中的 "e" 或 "c" 或 "m"
[^xyz] 比對不在中括弧內出現的任一個字元 /[^ecm]/ 可比對 "welcome" 中的 "w"、"l"、"o",可見出其與 [xyz] 功能相反。(同時請同學也注意 /^/ 與 [^] 之間功能的不同。)
[\b] 比對退位字元(Backspace character) 可以比對一個 backspace ,也請注意 [\b] 與 \b 之間的差別
\b 比對英文字的邊界,例如空格 例如 /\bn\w/ 可以比對 "noonday" 中的 'no' ;

/\wy\b/ 可比對 "possibly yesterday." 中的 'ly'
\B 比對非「英文字的邊界」 例如, /\w\Bn/ 可以比對 "noonday" 中的 'on' ,

另外 /y\B\w/ 可以比對 "possibly yesterday." 中的 'ye'
\cX 比對控制字元(Control character),其中 X 是一個控制字元 /\cM/ 可以比對 一個字串中的 control-M
\d 比對任一個數字,等效於 [0-9] /[\d]/ 可比對 由 "0" 至 "9" 的任一數字 但其餘如字母等就不可比對
\D 比對任一個非數字,等效於 [^0-9] /[\D]/ 可比對 "w" "a"... 但不可比對如 "7" "1" 等數字
\f 比對 form-feed 若是在文字中有發生 "換頁" 的行為 則可以比對成功
\n 比對換行符號 若是在文字中有發生 "換行" 的行為 則可以比對成功
\r 比對 carriage return  
\s 比對任一個空白字元(White space character),等效於 [ \f\n\r\t\v] /\s\w*/ 可比對 "A b" 中的 "b"
\S 比對任一個非空白字元,等效於 [^ \f\n\r\t\v] /\S/\w* 可比對 "A b" 中的 "A"
\t 比對定位字元(Tab)  
\v 比對垂直定位字元(Vertical tab)  
\w 比對數字字母字元(Alphanumerical characters)或底線字母("_"),等效於 [A-Za-z0-9_] /\w/ 可比對 ".A _!9" 中的 "A"、"_"、"9"。
\W 比對非「數字字母字元或底線字母」,等效於 [^A-Za-z0-9_] /\W/ 可比對 ".A _!9" 中的 "."、" "、"!",可見其功能與 /\w/ 恰好相反。
\ooctal 比對八進位,其中octal是八進位數目 /\oocetal123/ 可比對 與 八進位的ASCII中 "123" 所相對應的字元值。
\xhex 比對十六進位,其中hex是十六進位數目 /\xhex38/ 可比對 與 16進位的ASCII中 "38" 所相對應的字元。

使用範例:

//禁止使用不含 英文 + 數字 + .-_()
//用於禁止使用中文 

str = "123.d" ;
reg = /[^a-zA-Z0-9\.\-_\(\)]/ ;
if (reg.test(str)) alert("禁止使用不含 英文 + 數字 + .-_()");

2011年4月7日 星期四

列出目錄檔案資料

使用 php 列出檔案資料 , 在使用 include 引用 php , 會 hidden 檔名會 bak 檔案 , 預設目錄為 列出include 子目錄底下檔案


function list_files($dir = "include/" ){
  if (is_dir($dir)) {
    if ($dir_list = opendir($dir)) {
      while (($file = readdir($dir_list)) !== false) {
       if($file != '.' && $file != '..' && !strpos( $file , "bak" ) ){
     include_once ( $dir . $file ) ;
    }
   }
   closedir($dir_list);
   }
  }
}
list_files();

2011年4月5日 星期二

jquery select 運用

對select 設定 id="val"
取值

$("#val").val();

取顯示值

$("#val option:selected").text();

PS : 單使用$("#val").text(); 會列出所有option值

2011年3月29日 星期二

facebook sdk 開發環境備註

 在開發 facebook 應用程式時 , 找空間需注意事項除支援 php + mysql 外 , 也要支援 php_curl.dll , 因 facebook 回傳資訊會使用SSL的方式 , 而官網提供的 php sdk 也運用到 php_curl.dll 內的函式庫 , 可查看 src/facebook.php19 行 , 一開始就判斷 php.ini 有沒有引用 php_curl.dll
src/facebook.php

if (!function_exists('curl_init')) {
  throw new Exception('Facebook needs the CURL PHP extension.');
}

要如何知道自己免空有無支援 php_curl.dll方式
phpinfo

<?
phpinfo(); // 使用phpinfo 查出有無 curl 資訊
?>

facebook 無 php_curl.dll 會出現之錯誤訊息 PS : 線上空間有時會hidden訊息,可用 .htaccess 方式顯示出

Fatal error: Uncaught exception 'Exception' with message 'Facebook needs the CURL PHP
PS : 這是直接執行 php sdk 範例的錯誤訊息


自管server 的話 , 請安裝 php_curl.dll 即可解決 , 而線上空間的話就只能請空間商幫你安裝  php_curl.dll , 如果你使用免空呢 , 就只能換空間 ORZ....
使用免空者不要想用 dl() .htaccess 的方式引用 , 因自行測試結果為 dl()方式會被關閉,怕被攻擊 , .htaccess 不支援 dll 引用載入 , 所以換空間會比較快

空間測試列表
co.cc    PS : 網上說免費只有一年限制 ( 找不出空間設定 , 只有測出設定DNS )
kodingen.com 測試後很棒 , 推行

2011年3月28日 星期一

fckeditor . ckeditor 變更skin 佈景主題

fckeditor 2.x 預設佈景主題有三個分別為 default . office2003 . silver
php

$FCKeditor = new FCKeditor('content');
$FCKeditor->BasePath = '/fckeditor/'; //fckeditor 放置位置
$FCKeditor->Config['SkinPath'] = 'skins/office2003/' ; //變更 skins 資料夾中的佈景主題
$FCKeditor->Value =$content; // 預設值
$FCKeditor->CreateHtml();

js

FCKConfig.SkinPath = '/office2003/' ;


變更文字區顏色,更改 fck_editor.css
PS : 方法測試後 ie 無法顯示設定顏色

#xEditingArea {
background-color: #000;
}


ckeditor 預設佈景主題有三個分別為 default . office2003 . v2
js
mysitestyles.css

body
{
/* Font */
font-family: Arial, Verdana, sans-serif;
font-size: 12px;

/* Text color */
color: #f0f0f0;

/* Remove the background color to make it transparent */
background-color: #353c42;
}

html
{
/* #3658: [IE6] Editor document has horizontal scrollbar on long lines
To prevent this misbehavior, we show the scrollbar always */
_overflow-y: scroll
}

img:-moz-broken
{
-moz-force-broken-image-icon : 1;
width : 24px;
height : 24px;
}
img, input, textarea
{
cursor: default;
}


javascript

var editor = CKEDITOR.replace('content',{skin : 'office2003' , contentsCss : 'mysitestyles.css' }); // 使用skin變更佈景
CKFinder.SetupCKEditor( editor, '/ckfinder/' ) ;