發表文章

fprintf segmentation fault

記錄一下 遇到segmentation fault:11 的case 以為只是某個陣列出錯,結果居然是fprintf找不到檔案引起的 某個程式區塊內容 char fileloc[50]; sprintf(fileloc,"move_trace/Node%d", i+1); n.PrintTrace(fileloc); //略 void Node::PrintTrace(char *filename){    //open the file    outfile = fopen(filename,"w"); } 其中的outfile是Node的成員變數(對C++不熟,不知道是不是跟Java的講法一樣) FILE *outfile; 之後程式執行到下面這行就出現segmentation fault fprintf(outfile,"#period %d, community %d:\n", i, j); 最後debug出來是因為fopen(filename,"w")並沒有成功,好像目錄"move_trace"不先建立就不行

Java ActionEvent getModifiers()

前些日子學弟來問怎麼判斷按下Button時,是否有同時按下Ctrl+Alt。學弟是在actionPerformed裡,用ActionEvent的getModifiers()與ActionEvent.ALT_MASK和ActionEvent.CTRL_MASK來判斷,不過他執行出來的結果卻是錯的。由於以前也沒有用過getModifiers(),所以花了點時間研究,再加上這過程還發生怎麼在Mac上可以用,但在Win上反而不行的情況,因此在這邊整理了一下學習心得。 首先是getModifiers()的值,我自己遇到的狀況是根據平台以及使用AWT還是Swing的Button而不同,所以debug的時間一直栽在這邊.... Key Mac, Win(Swing JButton) Win(AWT Button) only click, 16 0 with Ctrl, 16|2=18 0|128=128 with Alt, 16|8=24 0|512=512 with Shift, 16|1=17 0|64=64 with Alt+Ctrl, 16|8|2=26 0|512|128=640 得到了Modifiers的值後,接著就是用MASK來比對。如果是上表左邊的情況,使用ActionEvent提供的ALT_MASK和CTRL_MASK等等即可;但如果是右邊的情況,就變成要使用InputEvent的ALT_DOWN_MASK和CTRL_DOWN_MASK等等。使用方法是Modifiers值與mask值的AND運算結果是否等於mask值,就知道Modifiers是否有按下該Modifier。寫成函式就是: private boolean checkModifiers(int modifiers, int mask) { return((modifiers & mask) == mask); } 如何是要判斷是否有兩個Modifier key,例如是Alt+Ctrl,則mask就是這兩個Modifier Mask值的OR運算。 例如 int altWithCtrlMask=ActionEvent.ALT_MASK | ActionEvent.CTRL_MASK; altWithCtrlMask再來跟getModifiers的值進...

Build.gradle for Cling UPnP library

最近想試試寫個UPnP app在android上,所以用Cling(http://4thline.org/projects/cling/)這個Library。由於想在Android studio直接套用他的Example,所以參考了原來的pom.xml,在build.gradle裡補足一些參數,就交給Gradle管這些套件了。 最主要還是知道了怎麼設一些變數,以及加入Repositories 以下是build.gradle的設定 apply plugin: 'com.android.application' ext {     jettyVersion = "8.1.8.v20121106"     eslf4jVersion = "1.6.1" } android {     compileSdkVersion 21     buildToolsVersion "21.1.2"      defaultConfig {         applicationId "example.upnplight"         minSdkVersion 16         targetSdkVersion 21         versionCode 1         versionName "1.0"     }     buildTypes {         release {             minifyE...

Custom Stories with Open Graph

註:當初寫這篇的時候是2014/09/12,那時Facebook sdk還是3.X,現在(2015/06/25)已更新到4.X版,一些方法需要改寫。 舊: 最近在練習寫android app with Facebook SDK, 想用FB的Custom Stories with Open Graph功能, 讓使用者會自動在動態時報(Timeline)上發佈跟這個app的Story, 照著官網Posting using API calls的範例寫, OpenGraphObject book = OpenGraphObject.Factory.createForPost("books.book"); OpenGraphAction readAction = OpenGraphAction.Factory.createForPost("books.reads"); 其中的object("books.book")和action("books.reads")都是FB原本提供的。 想說來用自己定義的story (action是Take ,object是 Bus), 卻不知道createForPost裡的參數分別要填什麼, 填了("take")和("bus")都不行, 找了好久, 注意到books.book(FB提供)和take(自定義)這兩個action的Graph API URL不一樣, 才知道原來要加app的Namespace。 例如這個app的namespace是xx-yy, 那想用自己定義的action和object, 就是要填("xx-yy:take")和("xx-yy:bus")。 更新(2015/06/25): 原本的寫法是OpenGraphObject、OpenGraphAction配合RequestBatch,但到了4.X,這三個類別被替換掉了 而發佈custom stories 也變更簡單 根據官網範例,變成: // Create an object ShareOpenGraphObject object = new ShareOpenGra...

Requires ACCESS_MOCK_LOCATION secure setting

紀錄一下: 在執行有使用到Mock Location的app時,出現  E/AndroidRuntime(889): Caused by: java.lang.SecurityException: Requires ACCESS_MOCK_LOCATION secure setting 雖然AndroidManifest裡已有設定權限了,這問題還是存在。    原來使用實體手機驗証時,需要把開發人員選項裡的 "允許模擬位置"打開才行。

compile vlc on android

https://wiki.videolan.org/AndroidCompile/ 紀錄一下遇到的問題: 1. 第一次進行sh compile.sh 時,出現 Archive:  gradle-2.2.1-all.zip   End-of-central-directory signature not found.  Either this file is not   a zipfile, or it constitutes one disk of a multi-part archive.  In the   latter case the central directory and zipfile comment will be found on   the last disk(s) of this archive. unzip:  cannot find zipfile directory in one of gradle-2.2.1-all.zip or         gradle-2.2.1-all.zip.zip, and cannot find gradle-2.2.1-all.zip.ZIP, period. 在資料夾底下 都會有一個未完整的gradle-2.2.1-all.zip,爬了一下文http://metalkin.tistory.com/82 雖然說是韓文...但大概可以猜到怎麼解 修改 compile.sh at Line 81: wget ${GRADLE_URL} 2>/dev/null || curl -O ${GRADLE_URL} =>wget ${GRADLE_URL} 2>/dev/null || curl -O -L ${GRADLE_URL}

Texmaker XeLaTeX設定

圖片
最近把Texmaker 3.3 更新到Texmaker 4.0.2後,原本在快速編譯下是沒有XeLaTeX這個選項的,不知道從那個版本後,Texmaker終於支援了 這樣就可以用比較喜歡的快捷鍵設定來用XeLaTeX編譯(原本的F5用不到,就可以拿來給XeLaTeX) 不然之前都是在自定命令裡設XeLaTeX編譯,那樣就只能用Alt+Shift+F1~5的組合鍵。不過,有時候文章會修改到cite和ref時,就要加入BibTeX編譯,就變成要XeLaTeX編譯+BibTeX編譯+XeLaTeX編譯+XeLaTeX編譯,有時候圖一多,XeLaTeX編譯一次會花不少的時間,所以這樣的組合編譯還是用自定命令會比較省麻煩一點。 既然Texmaker已支援XeLaTeX,自定命令的命令設定也就比較簡單一點了,可以用命令精靈來設定

"PDF to EPS" and "crop a PDF file"

最近這幾天在忙投稿的事,由於是用LaTex來排版,為了好看,所以圖都是eps格式 ( 其實也是可以用pdf格式的圖,然後用pdfLaTex來編譯,但不知道投期刊可否用這種方式。) 而要產生eps格式的數據圖,以住都是excel產生好後,複製貼到power point上(跳過這步的圖都醜醜的...),再複製貼到visio上另存pdf檔,再用Acrobat去邊,再另存成EPS檔。所以電腦要灌Adobe Acrobat最後才能轉檔,但是Acrobat要錢,不是每台電腦都有這軟體。此外,用Acrobat轉出來的EPS檔莫名的大,包含了一堆訊息,動不動就幾MB,所以最近就在找windows系統有那些小軟體可以用來PDF轉EPS,雖然在miktex下,有pdf2ps這個小工具,但是轉出來的品質我覺得差太多了。最後發現,Xpdf下的pdftops,轉出來的品質滿不錯的,可能顏色會偏一點,但其他的都跟原來沒兩樣 Xpdf的下載連結 http://www.foolabs.com/xpdf/download.html 不過轉出來的圖若需要切白邊,這時有兩種作法: 第一種是以eps檔去切,也就是用GsView開eps檔,再從工具列點選 File = > PS to EPS這個功能來切邊,它可以幫你自動計算白邊,也可以自己手動點,手動點就考驗一點眼力了,因為它不能即時預覽。 第二種則是在PDF檔時,即先切邊。google到一個還不錯用的軟體叫Briss,可以自動計算白邊,也可以手動拉,重點是可即時預覽,滿方便的。 Briss的下載連結 http://sourceforge.net/projects/briss/ 不過說真的,現在也只有在畫元件圖時,才會這樣從PDF轉EPS,數據圖轉來轉去實在是有點費工,更不用說在excel裡,要畫個xy軸是黃金比例的圖有多難拉,而且如果數據一堆,突然老師說某個名詞要改,或是點線風格該改怎樣,要複製來複製去的真的要花很多時間。所以後來都用gnuplot來畫數據圖,要pdf格式還是要eps格式都行。

Improve TheONE ExternalMovementReader

雖然我覺得Java的Scanner滿方便的,但是似乎讀檔效率不是很好。在用ONE simulator時,若是使用ExternalMovement時,大部份的模擬時間都卡在ExternalMovementReader,原因就是ONE Simulator使用Scanner來逐行讀取資料,並且再用Scanner分析每行的location資料,所以大部份的模擬時間都花在讀檔案!!! 所以稍微改寫了ExternalMovementReader,利用BufferedReader讀行,再用字串分割和Double.parseDouble(),果然模擬時間有變快了一點。 完整檔案下載      

BibTex 欄位

最近在整理bib檔,發現以前作的bib檔,欄位都有錯(難怪作出來的ref會被老闆退...) 要修改也是件累人的事,為了給學弟妹參考,想想還是打個心得,不要最後像我改了一個下午還改不完... 欄位會有錯,主要還是bibtex資料都是直接從網站下載下來就貼上去了,尤其是從IEEE下載的bibtex內容,都不太正確(ACM下載的也會有錯) 例如 @INPROCEEDINGS{4215676, author={Wei-Jen Hsu and Spyropoulos, T. and Psounis, K. and Helmy, A.}, booktitle={INFOCOM 2007. 26th IEEE International Conference on Computer Communications. IEEE}, title={Modeling Time-Variant User Mobility in Wireless Mobile Networks}, year={2007}, month={may}, volume={}, number={}, pages={758 -766}, keywords={Ad hoc networks;Communications Society;Delay;Mathematical model;Peer to peer computing;Proposals;Routing protocols;Wireless LAN;Wireless communication;Wireless networks;ad hoc networks;mobile radio;routing protocols;wireless LAN;delay-tolerant network;message delivery;routing protocol;time-variant user mobility modeling;wireless LAN;wireless mobile ad hoc network;}, doi={10.1109/INFCOM.2007.94}, ISSN={0743-166X},} 首先在 author這個欄位裡,應該用全名,不該有縮寫,因為有些期刊會要求完整的姓名,...

Accepted by WCNC

之前寫的paper被accept了,而Reviewers的意見也滿正向的,但似乎都希望有個數學分析會更好,不過現在的實力沒辦法模組化這個問題唉,需要再強迫自己看分析型的paper,讓自己有點sense才行!