2015年2月28日 星期六

[名詞定義] 進貨平均成本

假設A商品有以下幾次進貨

日期                數量       進貨價格
2014/01/01    5             10

2014/01/05   10            9

2014/01/30     1           11

平均成本為

((5*10)+(10*9)+(1*11))/(5+10+1)=151/16=9.4375

2015年2月22日 星期日

[分享] 到屏東租借Pbike

今日小弟路經屏東市區,恰巧看見鮮明的Pbike,此時不借,更待何時。

































































一樣要先加入會員,支援一卡通信用卡。(我在高雄也有加入Cbike,但二個系統不通用)


























入會方式與台北的Ubike很類似,在中控台放入一卡通後,點選加入會員,輸入身份證字號以

及手機號碼,大約20 Sec 會收到一封簡訊,在機器上輸入認證碼即可。

之後把一卡通拿起來,大概隔10秒再放上去,會自動進行開卡動作。








































其他入會方式請參考官網



先來一張借車費用表,一卡通及信用卡前30分鐘免費,之後每半小時10元(信用卡20元),和高雄費用差不多,差在高雄免費是1HR。







































借車方式其實和高雄一樣由主控台借,到按車號到位子按個鈕。

借車速度頗快,高雄的借車速度直接被打趴。

不過有充氣機這點頗強。








































































中柱
 鎖
 反光板
 前LED 燈



























不過俺犯了一個錯,俺弄錯了,它只有信用卡還車時可以刷卡,一卡通跟高雄一樣要再去


中央控制台刷卡還車,當時看人多,確定還車後綠燈恆亮,以為還車完成。


























查閱網路上,Pbike在插入車架後會感應鎖舌RFID,資料來源



















所以理論上有紀錄你的車何時離站何時回站。已撥客服電話,但忙線中,己留言,等待結果

如何處理,我再上來更新紀錄,大不了再溜過去騎一次~^^。


20150222 補充
一早七點客服就打來詢問車輛還車時間地點確認,確定車輛有還車紀錄,但系統並沒有收到我的還車紀錄,建議我去刷個卡還車,不然以後在高雄可能無法借車,我也怕會有一些後續的麻煩,就搭著車到屏東車站附近的租車站做個還車動作(並不是在我所借還車的站喔),致電客服確認有還車。

2015年2月21日 星期六

[小技巧] 用Telnet測試遠端 Postgresql 是否可以連接。

Postgresql 預設的Port為5432 ,假如一直無法順利連上,可以用Telnet來測試一下。


如果在linux上直接打上  telnet 180.218.118.250  5432    (180.218.118.250請自行換成要測試的IP)







如果出現上述畫面就是有連線成功



出現上述這樣的畫面表示失敗囉



我是分隔線


在windows上用命令提示字元輸入 telnet 180.218.118.250  5432 (180.218.118.250 請自行換成要測試的IP)

出現上述畫面就表示有連線成功出現上述畫面表示失敗了。


在windows 上 telnet 預設是沒有安裝的,在第一次使用著要先安裝。
首先進入控制台->程式集
開啟或關閉Windows 功能














Telnet用戶端勾打後按下確定


命令提示字元必須關掉重開才可以使用telnet功能喔。

有時候可以用telnet連線成功,用程式卻連不上,

1.先確定要連線的IP,可以被PING的到。

2.接下來是FireWall。

3.Postgresql Service是否有啟動。




2015年2月20日 星期五

[Linux]虛擬主控台tty1~tty7

Linux作業系統提供虛擬主控台的機制,透過虛擬的方式產生多個主控台介面但是卻共用一組鍵盤來達成虛擬多個主控台的架構。目前Linux作業系統通常僅提供7個虛擬主控台,如果有需要使用到被鎖定的後4個虛擬主控台裝置,需要透過修改/etc/inittab組態檔案才能夠完成。

每一個虛擬主控台編號為ttyN  , N表示第幾個虛擬主控台,切換方式為CTRL + ALT +F1~F7

※tty7是預設保留給圖形介面的虛擬主控台。

※主控台主要是提供給系統管理人員使用,通是常指直接與伺服器主機前端的螢幕與鍵盤連接的組合。


以下是我讀後自己做的筆記


例如我在tty1登入後執行了top指令,

 我按下CTRL+ ALT+F2 切換到tty2


登入後執行ping















再切回去tty1,可以看到我用同一個帳號登入tty2正在執行的ping
































要注意的一點是,切換之餘別忘記要登出喔。

知識來源:
http://www.kingsinfo.com.tw/module.php?i=item&tid=8035#tabImages

一次擁有Linux雙認證 : LPIC Level 1+Novell CLA11自學手冊 (第二版)
商品編號:XQ13051
作者:楊振和
ISBN:9789572242162
頁數:880 
開數:17x23公分
色彩:黑白
光碟:CDx1
出版日期:2013 年 11 月 18 日

ISBN:978-957-22-4216-2

[小技巧] 用ping的方式檢查區網中活著的裝置

1.首先把arp 紀錄清空(記得使用管理者權限)

arp -d

2. 下指令(請自己把192.168.1.%i  換成自己的虛擬IP 區段,例如192.168.0.%i)

for /L %i in (1,1,254) do ping 192.168.1.%i -n 1 -w 200 > NUL


3.再次查詢

arp -a


但用ping有些限制,例如某台裝置設定不回應ping,也就會看不到囉,除非你有跟他在區網內傳遞過資料才會被紀錄在arp 資料表中。

[名詞定義]日劑藥費 MA1 MA2 MA3 MA4 差異

日劑藥費的給付標準可以由下列網址查詢

http://www.nhi.gov.tw/query/query2.aspx?menu=20&menu_id=710&webdata_id=3633


可以查到MA1 MA2 MA3 MA4 4種定義:











MA1 的定義 (http://www.nhi.gov.tw/query/Query2_Detail.aspx?Ser_id=13747)













解釋一下就是,每天的藥錢<22元,不可以超過3天藥,沒有開立原瓶包裝的口服液劑。

MA1當中不可以有下圖螢光筆畫的藥品備註,如何查詢請參考這一篇




















原瓶包裝口服液劑的定義:
(1)由藥廠生產包裝於容器內供口服使用之液劑或包裝於容器內之藥品粉未或顆粒,於臨用時泡製者皆屬口服液劑。
(2)由藥廠生產包裝,直接提供予病患使用之原瓶。

資料來源─健康生活網


MA2 (http://www.nhi.gov.tw/query/Query2_Detail.aspx?Ser_id=13748)












重點: 12歲以下,給藥天數<=3天,所有的藥中只有一種原瓶包裝口服液劑,並且每天的藥錢<31塊

MA3(http://www.nhi.gov.tw/query/Query2_Detail.aspx?Ser_id=13749)












重點: 12歲以下,給藥天數<=3天,所有的藥中只有二種原瓶包裝口服液劑,並且每天的藥錢<37塊

MA4(http://www.nhi.gov.tw/query/Query2_Detail.aspx?Ser_id=13750)











重點: 12歲以下,給藥天數<=3天,所有的藥中>=3種原瓶包裝口服液劑,並且每天的藥錢<41塊


所以如果是超過12歲的有開原瓶藥水,依然是看有沒有<22塊,3天內,有的話依然是以MA1,並不會因為開幾種而有差異,超過22塊一天,或是總天數超過3天就不算日劑藥費了。

2015年2月19日 星期四

[C]好題目 (1)

下列這個C語言程式執行後,到底會輸出什麼呢?

 #include <stdio.h>  
 int main()  
 {  
   int a = 9, b = 0, c = 7;   
   a = (a = b) && (c = b);  
   printf("%d\t%d\t%d",a,b,c);  
   return 0;  
 }  

輸出結果為

0    0    7

一開始我也覺得很奇怪,為什麼C的值會是7而不是0。

後來去查了一下,原來

&& 有一個特性,也就是它的左邊如果是false (0) ,就不會去執行右邊的敘述

所以(c=b) 是不會被執行到的,上方的程式碼其實等效於下方這段程式。

 #include <stdio.h>  
 int main()  
 {  
   int a = 9, b = 0, c = 7;   
   a = (a = b);  
   printf("%d\t%d\t%d",a,b,c);  
   return 0;  
 }  


a被指定為b的值,所以為零。



我是分隔線



今天我們把b的值改成1,如下所示

 #include <stdio.h>  
 int main()  
 {  
   int a = 9, b = 1, c = 7;   
   a = (a = b) && (c=b);  
   printf("%d\t%d\t%d",a,b,c);  
   return 0;  
 }  

結果將大大不相同,因為a=b 也就是說a=1 ,所以&&左邊成立,所以會執行&&右邊的敘述,

把c=b ,因此c的值也為1,所以a= 1 && 1 ,因此輸出將變成 1    1    1

[Python] 使用Python 取得網頁原始碼

我們取一下高雄市立圖書總館的簡介,網址如下
http://pwbgis.kcg.gov.tw/construction/construction.aspx?id=63                                                            
程式碼只要3行                                                                                         ..

import requests
 
res = requests.post("http://pwbgis.kcg.gov.tw/construction/construction.aspx?id=63")

print res.text.encode('big5')


但中間可能會遇到一些問題,例如找不到requests模組








使用pin來安裝模組,windows 版本的python 在2.7 後有把pip內建了,放在python27\Scripts。

輸入 pip install requests   就會自動安裝了。


接下來是輸出的問題。

假設我如果沒有指定編碼

import requests
 
res = requests.post("http://pwbgis.kcg.gov.tw/construction/construction.aspx?id=63")

print res.text

會發生錯誤



這個原因是因為預設編碼的問題,我們用另一個python程式來讀取一下系統預設

import sys
print sys.getdefaultencoding()

在 win 7 上輸出為ascii

今天如果我們要輸出的內容中有不在ascii範圍內的字元,則會抛出上述的錯誤,所以我們要

指定編碼,或是修改預設編碼,詳細內容可以參閱以下網址。



[Java] String v.s StringBuilder 動態串接字串效能差異

之前寫過一篇[C#] string 串接  P.K  StringBuilder  就想來試試看Java上字串動態患接會怎樣,

實際用程式跑看看,程式碼如下:

 
package test;



public class Test {



    public static void main(String[] args) {

      

        double start=System.currentTimeMillis();

        String str="";

        for (int i=0;i<10000;i++)

        {

            str+= String.valueOf(i);

        }

        double end=System.currentTimeMillis();

       

        System.out.println((end-start)+"ms");

        start=System.currentTimeMillis();

        StringBuilder sb=new StringBuilder();

        for (int i=0;i<10000;i++)

        {

            sb.append(String.valueOf(i));

        }  

        end=System.currentTimeMillis();

        System.out.println((end-start)+"ms");       

    }   

}














看起來依然是StringBuilder 海放String。 相差268倍。

2015年2月18日 星期三

[Postgresql] 用 dblink 做跨資料庫查詢

dblink 是一個Postgresql的模組,透過dblink,你可以做跨資料庫查詢

(select, insert , join)等等 ,它預設是沒有安裝的,

每一個資料庫第一次使用都必須手動安裝。



安裝方式

CREATE EXTENSION dblink


安裝好後可以看到Extension中多出了dblink,表示可以使用了。

















dblinke有以下function可以使用 - 資料來源








dblink_connect -- opens a persistent connection to a remote database
dblink_connect_u -- opens a persistent connection to a remote database, insecurely
dblink_disconnect -- closes a persistent connection to a remote database
dblink -- executes a query in a remote database
dblink_exec -- executes a command in a remote database
dblink_open -- opens a cursor in a remote database
dblink_fetch -- returns rows from an open cursor in a remote database
dblink_close -- closes a cursor in a remote database
dblink_get_connections -- returns the names of all open named dblink connections
dblink_error_message -- gets last error message on the named connection
dblink_send_query -- sends an async query to a remote database
dblink_is_busy -- checks if connection is busy with an async query
dblink_get_notify -- retrieve async notifications on a connection
dblink_get_result -- gets an async query result
dblink_cancel_query -- cancels any active query on the named connection
dblink_get_pkey -- returns the positions and field names of a relation's primary key fields
dblink_build_sql_insert --  builds an INSERT statement using a local tuple, replacing the primary key field values with alternative supplied values
dblink_build_sql_delete -- builds a DELETE statement using supplied values for primary key field values
dblink_build_sql_update -- builds an UPDATE statement using a local tuple, replacing the primary key field values with alternative supplied values





在這裡只簡單介紹自己最常用的 dblink  這個function ,如何查詢遠端資料,

與遠端資料庫做Join ,如果有興趣,可以參考這個網頁 。


首先我有2個資料庫,都有相同的資料表結構,但有不同的資料。

store_a 與 store_b













我們先來看一下store_a 以及 store_b 的資料表




































接下來是資料

store_a   user_basi



stroe_a user_login
















store_b  user_basic















store_b user_login













接下來,我們在store_a 資料庫下如下的SQL,測試一下是否可以連線

 select dblink_connect('hostaddr=127.0.0.1 port=5432 dbname=store_b user=postgres password=mypwd');  


如果可以正常連線,則會顯示如下訊息

若無法連線則會顯示(包含使用者帳、密打錯也是如此,用在程式中要注意Exception)

我們在store_a 資料庫想要查詢store_b的user_basic則如此寫


 SELECT id,name,year  
   FROM dblink('hostaddr=127.0.0.1 port=5432 dbname=store_b user=postgres password=mypwd', 'SELECT id,name,year  
  FROM user_basic;')  
    AS t1(id integer ,name character varying(10) ,year integer) ;  

執行結果,的確查到了store_b  的user_basic資料表


接下來我要把二個資料資的表做Join,找出二個資料表中都有的人名


 SELECT user_basci.name,user_basci.year  
   FROM user_basci LEFT JOIN dblink('hostaddr=127.0.0.1 port=5432 dbname=store_b user=postgres password=mypwd', 'SELECT name,year  
  FROM user_basic;')  
    AS t1(name character varying(10) ,year integer) on user_basci.name=t1.name where length(t1.name)>0;  

執行結果,找到2邊都有的bert。















今天我示範的是在同一個Postgresql Server內的不同資料庫做查詢,其實是可以跨Server做查詢

的,只要把IP的部份由 127.0.0.1 改成 另一個資料庫所在的IP即可。

以上簡單紀錄一個使用dblink的心得,新年快樂。

[好軟體] 用Tuxboot把CloneZilla ISO 檔寫入USB 隨身碟

CloneZilla (再生龍)是一套由國網中心研發的自由與開放原始碼的硬碟備份,還原對拷軟體

今天來紀錄一下怎樣把它弄進隨身碟中,windows 下的話建議使用Tuxboot 工具軟體。
首先到這裡下載

http://sourceforge.net/projects/tuxboot/files/0.8/Windows/

下載後直接執行


























在這裡,我選擇由電腦中的ISO





 按下OK
奔跑中























跑完了,不會很久,幾分鐘內,不必重開機,除非你是要備份現這台電腦 。