2016-02-11

以 TPerlRegEx.Replace 替代掉符合樣式的字串

環境:Win7+XE4

uses System.RegularExpressionsCore;
:
procedure TForm1.Button1Click(Sender: TObject);
var
  RE: TPerlRegEx;
  slFile,slTmp: TStringList;
begin
  RE:=TPerlRegEx.Create;
  slFile:=TStringList.Create;
  slTmp:=TStringList.Create;

  slFile.LoadFromFile(FOD1.FileName);
  RE.Subject:=slFile.Text;
  RE.Options:=[preCaseLess];   //忽略大小寫
  slTmp.Delimiter:='|';
  slTmp.Text:=Memo1.Lines.Text;
  RE.RegEx:='([\s|\.|\=|\[])('+slTmp.DelimitedText+')([\s|\.|\]])';

  while RE.MatchAgain do begin
    RE.Replacement:='$1GA00_$2$3';  //也可以 " \ " 替代  " $ " 結果相同
    RE.Replace;
  end;

  FreeAndNil(RE);
  FreeAndNil(slFile);
  FreeAndNil(slTmp);
end;

備註:
TPerlRegEx.ComputeReplacement;   //經樣式運算後的替代字串
TPerlRegEx.MatchedText;                 //符合樣式的字串等同 TPerlRegEx.Groups[0]
TPerlRegEx.Replacement:='';            //經運算後似乎無法讓Replace再利用,所以看使用狀況必須重覆執行

2016-01-25

清除record的方法

TRecord = record
  a: String;
  b: String;
end;

sRecord:=Default(TRecord)

2015-04-06

Google App Engine memcache 測試

環境:

  • Google App Engine - 1.9.18
  • Python-2.7

# -*- coding: utf-8 -*-
#!/usr/bin/env python2.7
import webapp2
import urllib2
import json

from google.appengine.api import memcache
from google.appengine.ext.webapp.util import run_wsgi_app
   
class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
       
        r = urllib2.urlopen('http://mis.twse.com.tw/stock/api/getIndustry.jsp')
        j = json.loads(r.read())
        for n in range(0,len(j['tse'])):
            memcache.add(key=j['tse'][n]['code'], value=j['tse'][n]['name'], namespace='tse')
           
        for n in range(0,len(j['otc'])):
            memcache.add(key=j['otc'][n]['code'], value=j['otc'][n]['name'], namespace='otc')
       
        self.response.out.write(memcache.get(key='01', namespace='tse'))
        self.response.out.write(memcache.get(key='01', namespace='otc'))

2015-02-21

Delphi 讀取證券交易所股票資訊JSON格式

環境:

  • Win7
  • Delphi XE4

uses IdHTTP, Data.DBXJSON;
...
...


procedure TForm1.Button1Click(Sender: TObject);
var
  H: TIdHTTP;
  JSON: String;
  JO: TJSONObject;
  JV: TJSONValue;
  JP: TJSONPair;
begin
  H:=TIdHTTP.Create(nil);
  H.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)';
  JSON:=H.Get('http://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_3673.tw');
  JO := TJSONObject.ParseJSONValue(JSON) as TJSONObject;
  JP := JO.Get(0);
  ShowMessage(JP.ToString);
  ShowMessage(JP.JsonString.Value);
  JV:=(JP.JsonValue as TJSONArray).Get(0);
  ShowMessage((JV as TJSONObject).Get('n').JsonValue.Value);
  FreeAndNil(JO);
  FreeAndNil(H);
end;


2015-02-11

一次清除 GroupBox 裡所有 CheckBox.Checked 狀態

procedure TMainForm.btnClearClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to GB2.ControlCount-1 do
    if GB2.Controls[i].ClassNameIs('TCheckBox') then
      TCheckBox(Gb2.Controls[i]).Checked:=False;
end;

2015-02-09

動態設定 FastReport frxReport 資料來源

procedure setRepDataSource;
var
  DB : TfrxADODatabase;
  Query: TfrxADOQuery;
begin
  with Main.frxReport1 do begin
    DB := TfrxADODatabase(FindObject('ADODatabase1'));
    DB.Connected := False;
    DB.DatabaseName := DM.ADOC1.ConnectionString;
    DB.Connected := True;

    Query := TfrxADOQuery(FindObject('ADOQuery1'));
    Query.Close;
    Query.SQL.Text:=DM.ADODataSet1.CommandText;
    Query.Open;
  end;
end;

2015-02-07

Delphi MainMenu 字型放大及Menu Checked 提示圖示不見解決方法

Delphi 預設 Menu 字型大小為8,想把它放大為12只要2個步驟即可:
  1. 在Project Source 中加上 Screen.MenuFont.Size:=12; 
  2. MainMenu -> OwnerDraw -> True
Menu字型放大後,點選MenuItem後若有設Checked屬性,會發現無法正常顯示提示圖示,原先想以ImageList顯示圖示為解決方案,後來發現只要加入ImageList並指定給MainMenu後即可解決這個問題,不必載入Bitmap icon也可正常運作:
  1. 加入 ImageList
  2. MainMenu -> Images -> ImageList1

2014-08-27

Indy IdUDPServer/IdUDPClient 接收傳送中文字

透過 Indy 套件的 IdUDPServer / IdUDPClient 收發訊息時,英文基本上一定是沒啥問題,但遇到傳送中文訊息,以Indy的預設編碼傳送後接收顯示為亂碼,很明顯是編碼出了狀況,測試的環境為Win7 + XE4,TextEncoding的功能參數必須 uses IdGlobal 才會正常,最初測試時試了半天找不到正確的參數,只好去 IdGlobal.pas 翻一下,找到這個:

















在使用 IdUDPServer / IdUDPClient 收發時,下列兩種方式都可以正常傳送顯示中文,以IdUDPClient為例,IdUDPServer 也適用:

測試環境:

  • Windows 7
  • Delphi XE4 測試版


uses IdGlobal;

..............

IdUDPClient1.Send(Edit1.Text, IndyTextEncoding_UTF8);

or

GIdDefaultTextEncoding := encUTF8;
IdUDPClient1.Send(Edit1.Text);


2014-06-12

Delphi XE? + dbexpress + sqlite3

這兩天空檔在弄個股票資訊蒐集的小工具當練功,想到要用sqlite來當資料庫,以SimpleDataSet來連接sqlite,但在開發階段Connection enable時老是會跳出"sqlite3.dll not found"的錯誤訊息,而且sqlite3.dll已放置在source code目錄下當然也放在win32/debug和win32/release目錄下,還是會出現一樣的錯誤,不過如果直接以執行檔的方式運行後再連接sqlite就可以,看樣子開發階段應該在某個地方也要放才對。
去問了大神找到這篇,原來這兩個地方也要擺,真的有效。

  1. 32bit 的sqlite3.dll 通常放在 C:\Windows\SysWOW64
  2. 64bit 的sqlite3.dll 就放在 C:\Windows\system32

2013-11-06

JSN ImageShow for JOOMLA - 增加 Image Max Size 項目

JSN ImageShowJoomla 上功能強大的圖片或照片播放模組,支援component、module和content plugin三種模式,檔案來源除了本機的目錄外也支援如 Picasa 這類的網路相薄。
在為首頁製作網路相薄播放區塊 + 網路相薄就以 JSN ImageShow + Phoca Gallery + Picasa 的組合來當成解決方案,照片檔經過縮小最佳化後丟在 Picasa 裡,再分別以 JSN ImageShow 和 Phoca Gallery 到 Picasa 讀取同一份相薄即可。
每個模組的設計需求理念不同,像Phoca Gallery 在以幻燈片模式播放照片時是指定在 640 x 480 的解析度在播放,它會自行將照片縮成 640 x 480,而 JSN ImageShow 就不會,而是以預設的 max-width : 1024 為播放標準。問題來了,因為 JSN ImageShow 是放置在首頁上的一個小區塊,只有 326 x 244 的大小,造成無法完整的顯示照片,所以必須讓 JSN ImageShow 可以將照片縮成 max-width 只有 326 來播放。

環境:

  • Joomla-2.5.14
  • JSN ImageShow Free - 4.6.0

  1. 在 Joomla 的管理模式裡,元件 → JSN ImageShow → Configuration → Image Sources → Picasa|See profiles →  Edit,可進到設定 max-width 的畫面

  2. 在最大影像大小的欄位上原本沒有326px 這個大小,所以要修改 source code來達成。

  3. 修改檔名 ./plugins/jsnimageshow/sourcepicasa/classes/jsn_is_picasaselect.php,找到 function getImageSizeOptions,把你需要的大小加入存檔即可。

2013-11-03

下載hichannel影片的方法其中之二

去年弄了一篇下載hichannel影片的方法其中之一,今年來弄篇之二,只是有點換湯不換葯啦,換個Browser而已。

環境:

  • Windows 7
  • Firefox-25.0
  • Net Transport-2.9.3
  1. 當然是開啟 Firefox 並連到 http://hichannel.hinet.net/ 囉!

  2. 選定你"心儀"的影片

  3. 選定點選後也許會看到需安裝外掛的畫面,不過這是好事,這樣我們就不用像之一一樣,要先中斷播放。

  4. 重點工具來了,請啟用"開發者工具列"。

  5. 點選右下角那個位置就可以看到工作頁面。

  6. 啟用"使用滑鼠選取元素"功能,想點左下還是右上皆可。

  7. 接著點選叫你安裝外掛的提示畫面,如果步驟正確應該會有個白色虛線外框,點選時下面的工具列也會顯示對應的Source Code。

  8. 接下來的步驟就和之一大同小異了,把反白的URI以 Ctrl + C 複製下來,為什麼用 Ctrl + C,而不用"複製內部HTML"咧?因為這個功能在Firefox-24.0版是正常的,但是到25.0版就掛了,所以..還是用 Ctrl + C吧。

  9. 把找到的URI整理一下,最好是變成反白的那個樣子,最好把http也換成mms,經過測試mms 的protocol下載是正常的。也許其他下載工具可接受經過urlencode後的URL,那你不換應該也可以。

  10. 最後就把整理出來的URL,新增下載工作、貼上、確定,給點耐性,如果這些步驟做完沒經過太久,隔一下子應該就會開始有動作了。Net Transport 操作有問題可參閱之一

  11. 如果連結失效的話,請再快速的重來一次吧。

    P.S.最後還是老話一句,技術要討論教學相長才會進步但請合法使用。

Google App Engine for PHP

一個偶然的機緣下發現這個訊息,找個時間試了一下,透過 Google Developer's Guide 的說明是試出來了,但是還是發生大眼睛看不見小字的習慣,而且人總是健忘的還是記一下吧!

環境:

  • Debian-7.2
  • PHP-5.4.4
  • Python-2.7.3
  • Google App Engine PHP SDK 1.8.3
重點:
  • 安裝照著 Developer's Guide 即可
  • 記得 php-cli 和 php-cgi 是不一樣的東西,確定有裝 php-cgi ,不然應該會看到這行錯誤
    "assert 'Content-Type' in message, 'invalid CGI response: %r' % stdout"
  • dev_appserver.py 預設是以 localhost 為Server IP,若測試環境Server/Client 是分開的,可以 --host 指定Server IP,如下:
    $> google_appengine/dev_appserver.py --host 192.168.13.128 --php_executable_path=/usr/bin/php-cgi helloworld/

2013-10-30

HighPoint RocketRAID 2310 RAID Management/ Inband Service for FreeBSD

年初代管一部ASUS 1U機架式伺服器,原先的管理者不知為何原因沒起動Raid,後來決定將系統重灌成Linux or FreeBSD,Linux中慣用的Debian內建沒RocketRAID-2310的driver,因為懶得再另外弄driver就決定裝FreeBSD。
FreeBSD內建有RocketRAID-2310的drvier,但是沒管理工具可監看raid的即時狀態,RR2310的Bios介面也粉陽春,一樣看不到現在raid的狀態,以至於更換H.D後是否有進行rebuild也不得而知,這部Server更囧了,連H.D讀取燈也沒看到在亮,當然也看不到H.D的故障燈號,還好H.D故障時會叫給你聽就是了。
後來在 HighPoint 官網找到支援FreeBSD的管理工具,安裝後運行正常。

環境:

  • FreeBSD-8.3-p12
  • HighPoint RocketRAID 2310
  • CLI-FreeBSD-3.5-1-100707.tgz

  1. 官網下載FreeBSD版本的CLI管理工具程式,下載時版本為v3.5-1,下載後解開可看到4支檔案,安裝可參考README.txt,HPT_CLI_Guide.pdf 為使用說明,其他為安裝檔。


  2. 安裝完成後啟動服務 /usr/local/etc/rc.d/hptdaemon.sh start,若正常可看到服務起動。


  3. 服務正常啟動後,執行 hptraidconf ,過程中會要輸入帳號密碼,請參閱HPT_CLI_Guide.pdf。


  4. 輸入query arrays,顯示目前已建立的raid,可以看到現行各raid的狀態,下圖可看到正在rebuild。


  5. 輸入query devices,顯示各H.D的狀態。


  6. rebuild完成,Status會由REBUILDING變成NORMAL。


  7. 它也有輸出log檔儲存使用及系統記錄,路徑及檔名為 /vat/log/hpt.log。


  8. 其他指令可在hptraidconf CLI畫面裡 key "help"即可。

2013-10-01

幫DBNavigator功能按鈕新增文字說明

Delphi裡的DBNavigator在資料庫程式中是常用的物件,但是預設只有圖示而沒有文字說明,雖然可以使用Hint,但使用上還有覺得少了些什麼,在網路上找了些資料並試作並把部份重點節錄下來。

環境:Win7 + Delphi XE4 試用版

uses
   Vcl.Buttons;

type
  TMyNavigator = class(TDBNavigator);

procedure TForm1.FormCreate(Sender: TObject);

const
   Captions: array[TNavigateBtn] of string = ('第一筆', '上一筆', '下一筆',
       '最後一筆', '插入', '刪除', '編輯', '儲存', '取消', '刷新', '確認更新', '取消更新');
var
   btn: TNavigateBtn;
begin
   for btn := low(TNavigateBtn) to high(TNavigateBtn) do
   with TMyNavigator(DBNavigator1).Buttons[btn] do
   begin
      Layout:=blGlyphTop;
      Caption:=Captions[btn];
   end;
end;

成果:


2013-08-17

hichannel radio 改版中?

[2015/06/08EzNetRadioU4.40F 

前兩天把EzNetRadio開起來想聽聽古典樂,因為午休時想說聽個古典樂助眠是個不錯的選擇,東點西點才發現有些站台失效連不上有些卻正常,卡好更睡不著...
利用放假天測了一下,才發現hichannel的廣播正悄悄在改版中。之前使用Microsoft的技術,使得chrome和firefox的使用者可能無法正常收聽,改版後的chrome和firefox皆可正常收聽。



既然EzNetRadio部份的站台無法正常收聽就代表它又得改版了,查了下hichannel的新方法,應該是使用 flowplayer.org 的解決方案。


flowplayer.org 主要是應用在web上的解決方案,EzNetRadio是個AP,要再想想怎麼兜...

2013-04-26

Joomla 後台管理選單及文章分類排序不動?

Joomla的選單及文章分類可以依管理人員需求進行排序。最近在構思一個新站台,花了1天的時間以舊站的結構弄了個sample site,在結構確定後再來調整,但在後續調整時,發現某個文章分類無法上調的問題。試了半天後把垃圾筒內的文章分類清掉,這個狀況就解除啦!!

2013-04-17

Joomla 2.5.x 文章相關細部欄位

Joomla的文章列表方式主要分成清單和Blog兩種,清單列表只能顯示標題、發佈日期、作者和點擊數等四個欄位,想以標準的Joomla實現"分類"的最新消息,也就是顯示最新消息的子分類,是無法實現的。
後來以[Multicategories]解決分類的問題後,一直沒搞定清單顯示分類的問題,問題是沒找到"分類"的變數到底是category?categories????後來在不經意的狀況下看到了下圖,原來是"category_title",剩的就只是修正程式碼了。
這裡面應該包括了一篇文章所有相關的欄位了吧?我想。
































檔案位置:/components/com_content/models/category.php
增加清單列表欄位,檔案位置:/components/com_content/views/category/tmpl/vim default_articles.php

2013-04-09

Re-Join Physical Disk to VDisk RAID

公司有部 HP2000 G3 iSCSI Storage,上星期其中一顆HD掛點,報修拿到新HD後當然直接插回原來的slot,但是狀況跟一般的Raid不太相同,一般的Raid卡通常會直接進入Rebuild的程序,但是HP2000在測完HD後,HD並沒有一如預期的直接Rebuild,而新HD的狀態只顯示"AVAIL"。
 後來在 HP Support Forums 找到下面的程序。












這個程序完成後狀態就變成這樣啦,就等吧!!



2013-02-24

以Aptana整備Joomla開發環境

最近發現了個Web程式開發的好工具Aptana,聽說是從Eclipse發展出來的。斷斷續續的使用Joomla這個CMS,雖然Joomla有一狗票extension,但是還是有自己試試看的想法。
Aptana上已整合了Wordpress、Drual的bundle,不過還不支援Joomla,不過網路上已有相關說明囉!

http://www.youtube.com/watch?v=k6bl--auCsY
http://www.youtube.com/watch?v=4HCqomfey34

2013-02-11