星期四, 9月 10, 2015

python 使用 sha1

如何使用 python 計算 binary sha1.
str 中可以包含 binary data
 
>>> import hashlib
>>> b = "this is binary \x0f\x0b\x0c"
'this is binary \x0f\x0b\x0c'
>>>  hashlib.sha1(b.encode('utf-8')).hexdigest()
'275ef095712a186a6400746efdd4d0e9b51e7874'

星期一, 9月 07, 2015

Arduino 出現 "collect2.exe: error: ld returned 5 exit status" 的訊息

在 Arduino IDE 1.6.1 上編譯時出現以下訊息:

collect2.exe: error: ld returned 5 exit status

執行的 OS: Windows XP

解決的方式是:
換成 Arduino IDE 1.0.6 就可以解決這個問題了.

星期三, 5月 06, 2015

Arduino 無法接收 repeated start 的問題

參考:
https://github.com/arduino/Arduino/issues/848

把 twi.c 的 468 行:
    twi_stop();
comment 掉就行了:
    //twi_stop();

星期四, 3月 26, 2015

如何鎖定 Excel 裡的固定欄位

step 1) 選取所要固定的欄位 (反白)
step 2) 按右鍵(下拉式選單)
step 3) click "儲存格格式"
step 4) open the "保護" tab
step 5) unlock "鎖定", then "確定"
step 6) 在左下角"工作表x"按右鍵(下拉式選單)
step 7) click "保護工作表"
step 8) unlock "選取鎖定的儲存格", then "確定"


星期四, 3月 19, 2015

Arduino 的環境下, 把 Array 寫入到 flash ; 而不是 SRAM

在 MCU 的 SRAM 有限情形下, 要把一些表格放置到 flash 的區域下,而非佔用 SRAM

const byte myArray[] =

{
   0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
   0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
   0x03,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
};

使用 PROGMEM 關鍵字, 同時

#include

const byte myArray[] PROGMEM=

{
   0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
   0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
   0x03,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
};

在讀取時, 使用

pgm_read_byte_near(), ex:

int k;    // counter variable

char myChar; 

myChar =  pgm_read_byte_near(myArray + k); 


 


 


 


星期三, 3月 04, 2015

使用 re 模組抓出檔名內的數字


    #() 內的值就是會取得的變動值, \d 代表數字, \d+ 表示多個數字
    import re

    patt = re.compile('NO(\d+)TIME(\d+)')
    mobj = patt.match('NO9TIME1')
    print mobj.groups()  # ('9','2')
    print len(mobj.groups())
    print mobj.group(2)  # 1
   
    # mobj.groups() 會列出 mobj 裡的 group 資料
    # len(mobj.groups()) 就可以知道有多少筆了
   
    # 可使用名稱來讀取抓到的資料 ?P
   
    patt = re.compile('NO(?P\d)TIME(?P\d)')
    mobj = patt.match('NO9TIME2')
    print mobj.group('left_num')  # 9
    print mobj.group('time_num') # 2

    # 如果沒有 match , mobj 為 None

python 讀取目錄內檔案名稱

   
    cur_path = os.getcwd() #得知目前路徑
    for subdir, dirs, files in os.walk(cur_path):
        for file in files:
            # 得到檔案名稱 file

python 寫資料到 xls 檔中

使用 xlwt 模組,但 xlwt 不相容於 python 3.x 
xlwt-future 0.8.0 可以支援 python 3.x

最多支援到 256 column 的資料檔案
用法:
    import xlwt
    from xlwt  import Workbook
   
    wb = xlwt.Workbook(encoding='utf-8')         # open workbook
    ws = wb.add_sheet('First Sheet')                 # add sheet
    ws.write(row_num, col_num,'hello world')    # write data to cell
    wb.save('data_file.xls')                                 # write to xls file


python 3.x print 用法

python 3.x 的 print 無法像 python 2.x 一樣的用法:
3.x: print('hello world')
2.x: print 'hello world'

如果不斷行
3.x: print('hello world', end='')  # 使用空白字元, 或是空字元代替
2.x: print 'hello world',             # 使用 , (逗點)

星期三, 1月 07, 2015

Excel 向下填滿快速鍵

step 1: 從來源 cell 往目的 cell 做選擇的動作
 方式: 在來源cell 上按下 shift 鍵,移動滑鼠選擇範圍再 click

step 2: Ctrl+D 即可完成自動填滿動作

星期五, 12月 26, 2014

測試 tag

測試文字 block

這是 block

BeagleBone Black 從 SD 卡開機

取得 image 檔, 這裡使用 2 種不同的 image  :
http://beagleboard.org/latest-images
使用 Win32 Disk Imager    寫入 image 到 SD 卡中.

http://www.armhf.com/boards/beaglebone-black/#trusty
使用 ubuntu系統寫入
ref: http://www.armhf.com/boards/beaglebone-black/bbb-sd-install/

試了幾次都無法成功.
每次都無法開機, 用 USB-> UART 接上 BeagleBone Black 後, 再用 Putty 連上.
卡在 #UBOOT 底下.

後來可能是筆電內建讀卡機在寫入 image 檔時, 會有問題.
改用外接 Kingston 讀卡機後. 2 個 image 都能順利啟動.



星期五, 12月 19, 2014

Raspberry Pi, Volume was not properly unmounted..

沒有正常關機, 開機時出現:

[   17.496791] FAT-fs (mmcblk0p6): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

修復方式:

sudo umount /bootsudo git clone http://daniel-baumann.ch/git/software/dosfstools.git
sudo cd dosfstools
sudo make
sudo make install
sudo ./fsck.fat -V /dev/mmcblk0p6
sudo ./fsck.fat -a /dev/mmcblk0p6
sudo mount /boot

重新開機後, 錯誤訊息就消失了. 

星期三, 4月 16, 2014

Binwalk


Binwalk : Firmware Analysis Tool
有空再研究

星期日, 9月 22, 2013

W8111 Accessing deprecated entity '_fastcall TThread::Resume()'

新的 C++ Builder 不再使用 Resume();
用 thread->Suspended = false 來取代.

Suspend() 改成
thread->Suspended = true;

星期四, 11月 10, 2011

重整程式碼的工具

UniversalIndentGUI
http://universalindent.sourceforge.net/index.php

Uncrustify

http://uncrustify.sourceforge.net/

改天試用看看

星期四, 8月 18, 2011

原文書上的 Foreword , Preface 有什麼不同?

"foreword 是由作者以外的某人或某些人所撰寫,可能是業界的專家學者、同類型書籍的作家或其他人,而 preface 則是由作者本人所撰寫."

ref: http://blog.cybertranslator.idv.tw/archives/3116

星期五, 7月 29, 2011

關於 Qt 的 qconfig.cpp

  在編譯 Comment (一個 pdf annotator) 前, 使用 cmake 來產生 .sln 檔時要需入 Qt 的相關路徑.
輸入完後產生了:

Warning: QT_QMAKE_EXECUTABLE reported QT_INSTALL_LIBS as C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.6/qt/lib

  接著在 Qt 的目錄下找找看有沒有 "qt-greenhouse" 字串, 在 qconfig.cpp 裡有找到. 其中的路徑就是上面訊息所示. 看了一下, 這個應該是由其他的程式來設定.

  在 http://blog.csdn.net/zhudelunalpha/article/details/5841394 這個網頁剛好有提到, qconfig.cpp 是由 Qt 其中一個目錄下 configure.exe 來設定. 這個網頁也提到了他在產生 qconfig.cpp 所遇到的問題.

星期三, 7月 20, 2011

PDF 相關函式庫

ref: http://hi.baidu.com/jrckkyy/blog/item/fb18f1162d9f484121a4e9c8.html

【C++函式庫】

PDF函式庫 PoDoFo
http://podofo.sourceforge.net/
PoDoFo 是一個用來操作 PDF 文件格式的 C++ 函式庫。它還包含一些小工具用來解析、修改和創建 PDF 檔案。

Xpdf
http://www.foolabs.com/xpdf/download.html
Xpdf是一個開放原始碼的PDF檔案瀏覽器,Xpdf 可解碼LZW壓縮格式並閱讀加密的PDF文件。

PDF生成工具 Poppler
http://poppler.freedesktop.org/
Poppler 是一個用來生成 PDF 的C++函式庫,從xpdf 繼承而來。它使用了很多先進的函式庫例如 freetype 和 cairois 來達到更好的輸出效果,同時也提供了一組命令行工具包。

JagPDF
http://www.jagpdf.com/
JagPDF 提供給 C/C++ 和 Python 編程語言用來生成 PDF 檔案的函式庫。

libHaru
http://libharu.org/wiki/Downloads
開源的PDF函式庫

CLibPDF
http://hpux.connect.org.uk/hppd/hpux/Shells/ClibPDF-2.02/
ClibPDF是C函數函式庫,可以直接生成PDF文件, 不需要Adobe Acrobat等工具支持.

------------------------------------------------------------------------

【JAVA函式庫】
PDF操作函式庫 iText
http://www.lowagie.com/iText/
iText是一個能夠快速產生PDF文件的java函式庫。iText的java類對於那些要產生包含文件,表格,圖形的只讀檔案是很有用的。它的函式庫尤其與java Servlet有很好的給合。使用iText與PDF能夠使你正確的控制Servlet的輸出。

PDFBox
http://www.pdfbox.org/
非常強悍的PDF生成和解析Java函式庫

jpedal
http://www.jpedal.org/
jpedal是開源純Java的PDF檔案解析函式庫,可以用來讀取PDF檔案中的文字、圖形。

JasperReports
http://jasperforge.org/plugins/project/project_home.php?group_id=102
JasperReports是一個基於Java的開源報表工具,它可以在Java環境下像其它IDE報表工具一樣來製作報表。JasperReports 支持PDF、HTML、XLS、CSV和XML文件輸出格式。JasperReports是當前Java開發者最常用的報表工具。

Fourfive
http://sourceforge.net/projects/fourfive
Fourfive是一個領先的開源Web報表解決方案,使用XML作為它的配置文件。支持集群、負載平衡、動態發佈、PDF, Excel, LDAP,圖表、過濾器、排序、佈局定製、門戶、JasperReports、Velocity模板、兼容Internet Explorer, Netscape, Mozilla, Opera。

FOP
http://xmlgraphics.apache.org/fop/
FOP是由James Tauber發起的一個開源項目,原先的版本是利用xsl-fo將xml文件轉換成pdf文件。但最新的版本它可以將xml文件轉換成pdf,mif,pcl,txt等多種格式以及直接輸出到印表機,並且支持使用SVG描述圖形。

JFreeReport
http://sourceforge.net/projects/jfreereport/
JFreeReport是一個用來生成報表的Java函式庫。它為Java應用程序提供一個靈活的列印功能並支持輸出到印表機和PDF, Excel, HTML和XHTML, PlainText, XML和CSV文件中。

YaHP
http://www.allcolor.org/YaHPConverter/
YaHP是一個能夠把html檔案轉換成pdf檔案的Java開源包。

PDFjet
http://pdfjet.com/os/edition.html
PDFjet是一個用於動態生成PDF檔案的Java函式庫。支持繪製點、線、方框、圓、貝塞爾曲線(Bezier Curves) 、多邊形、星形、複雜路徑和形狀。支持unicode,文件間距調整,嵌入超鏈接等。它同時有Java和.NET兩個版本。

vPDF
http://sourceforge.net/projects/vpdf/
一個將RTF檔案轉成PDF檔案的工具

【.NET組件】
--------------------------------------------------

iTextSharp
http://itextsharp.sourceforge.net/
iTextSharp 是用來生成 PDF 檔案的 C# 組件

PDFsharp
http://www.pdfsharp.com/
PDFsharp is a C# library that easily creates PDF documents on the fly. The same GDI+ like drawing routines can be used to create PDF documents, draw on the screen, or send output to any printer. PDFsharp can also modify, merge, and split existing PDF files or incorporate pages from existing PDF files into new PDF documents.

Report.NET
http://report.sourceforge.net/
Report.NET 是一個功能強大且易用的用來生成 PDF 檔案的 C# 組件
---------------------------------------------------------------------

【PHP】

Php Pdf Factory
http://sourceforge.net/projects/pdf-factory/
一個PHP的PDF操作函式庫。

TCPDF
http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf
TCPDF是一個用於快速生成PDF文件的PHP5函數包。TCPDF基於FPDF進行擴展和改進。支持UTF-8,Unicode,HTML和XHTML。

HTML2PDF
http://html2fpdf.sourceforge.net/
HTML2PDF能夠把一個HTML文件轉換成一個印表機友好的PDF文件。這個PHP腳本構建在FPDFPHP腳本之上。

cPdfWriter
http://www.palos.ro/index.php?page=opensource_active
cPdfWriter是一個能夠輸出PDF檔案的PHP5 class。基於TCPDF,FPDF和其它相關腳本。

FPDF
http://www.fpdf.org/
FPDF這個PHP Class允許你採用純PHP(更確切地說就是不需要使用PDFlib)來生成PDF文件。它所具有的特點包括:可選擇的unit大小,頁面格式和頁邊 距;頁眉和頁腳管理;自動分頁;自動換行與文件自動對齊;支持JPEG與PNG圖片格式;支持著色和文件超鏈接;支持TrueType,Type1與 encoding;支持頁面壓縮。...

------------------------------------------------------------------------

【Python和Ruby】
Prawn
http://prawn.majesticseacreature.com/
Prawn: 用Ruby生成PDF更簡捷

ReportLab
http://www.reportlab.org/
Reportlab是用python開發的生成pdf的工具包,它是一個開源軟件。

PDF生成工具 pyPdf
PyPDF這是一個用於構建PDF的純Python工具包

星期一, 7月 04, 2011

Exception

今天在 VC 2008 debug 遇到 exception, 當 OnInitDialog( )結束時,
在 ATL::CStringData::Release() Line 107 + 0x3 bytes 發生 exception!
後來在字串的處理上出現一點問題.
原來的 code:

DWORD dwRetVal;
TCHAR pPathBuf[MAX_PATH*2];
TCHAR pSrcFileName[] = _T("abc.txt");


dwRetVal = GetTempPath(sizeof(pPathBuf),pPathBuf);
memcpy(&pPathBuf[dwRetVal],pSrcFileName,sizeof(pSrcFileName));

// 我想是因為是編譯成 unicode 的關係, string 使用 memcpy 去做 append 的動作.

修改後的 code:

DWORD dwRetVal;
TCHAR pPathBuf[MAX_PATH*2];
TCHAR pSrcFileName[] = _T("abc.txt");


dwRetVal = GetTempPath(MAX_PATH*2 - 2,pPathBuf);
_tcscat_s(pPathBuf, _countof(pPathBuf), pSrcFileName);


exception 錯誤消失了!!