2014年10月28日 星期二

取出js或是json檔案中的內容

在解析網頁的時候常常要到其js或是json中去取得資料,像是下面這兩個例子:

因此我寫了一個處理的function,可以輕鬆地拿到想要的資料:

步驟

1. 將空白刪除。
2. 將跳脫字元處理好。
3. 取出再"="跟";"之間的字串。

參考

2014年10月26日 星期日

在Chrome extensions中使用gif.js

最近看開chrome extension時遇到了gif.js使用上的問題,原因是在gif.js裡會使用到web worker,可是在chrome extension 中會出現SecurityError,搜尋google在stackoverflow中的一篇問答找到了原因,原來是因為chrome自身的bug所以讓extension無法讀取web worker。

步驟

1. 在chrome extension中加入patch-worker.js
2. 將gif.js檔案中的['gif.worker.js']取代成[chrome.runtime.getURL('path/gif.worker.js')]。
(註:path為你放gif.js的路徑)

2014年7月7日 星期一

在.NET應用程式中安裝RxNorm API

目的

由於要做藥物名統一的工作,中間需要用到RxNorm的API,現在把RxNorm API的安裝方式做一個整理。

環境

  • Visual Studio Express 2012
  • C#

步驟

1. 創立應用程式

新增一個新的C#專案,把[應用程式路徑]記起來。
[應用程式路徑]=C:\Users\Hsin_Ping\Documents\Visual Studio 2012\Projects\InstallRxNormAPI\InstallRxNormAPI

2. 記住[wsdl路徑]

在電腦中找出[wsdl路徑]記起來。
[wsdl路徑]=C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools

3. cmd

打開命令提示字元,輸入下列指令:

完成之後應該會得到以下訊息代表正確:

4. 在應用程式新增DBManagerService.cs

在應用程式按[右鍵]>[加入]>[現有項目]新增DBManagerService.cs。

5. 加入System.Web.Services參考

在應用程式按[右鍵]>[加入參考]新增System.Web.Services。

參考

2014年7月2日 星期三

於IIS安裝PHP

平台

  • Windows 8.1
  • IIS 8.5

方法

使用Web Platform Installer安裝PHP。

步驟

1. 下載Web Platform Installer

這裡下載Web Platform Installer,照著步驟安裝。

2. 開啟IIS管理員

在搜尋框中輸入IIS就可找到

3. 開啟Web Platform Installer

在[管理]中按下[Web Platform Installer]就會出現Web Platform Installer的介面。

4. 安裝PHP

安裝步驟
  1. 上列按[產品]
  2. 左列按[架構]
  3. 中間按[PHP(選你需要的版本)]
  4. 下列按[安裝]

5. 開啟CGI

a. 在[控制台\程式集\程式和功能]中按下[開啟或關閉Windows功能]

b. [Internet Information Services]>[World Wide Web 服務]>[應用程式開發功能]>[CGI]將此勾選

6. 重新啟動IIS管理員

7. 進入PHP Manager

8. 進入Manage all settings

9. 將date.timezone的value改為Asia/Taipei

參考

2014年6月26日 星期四

自動登入apple developer

在工作的時候遇到了需要讓電腦自動登入apple developer的需求,想到的解決方法就是用HttpWebRequest去做網頁的溝通,進而得到cookies,達到登入的目的。

目的

利用HttpWebRequest進入apple developer,取得登入所需的cookies。

方法

我們要模仿網頁的互動就要先去觀察網頁的傳遞方式,所以第一步我們要做的觀察,我們知道網頁的運作方式之後就可以將開始寫程式了,利用HttpWebRequest來模仿browser中我們所做的動作,達到登入的目的。

步驟

1. 觀察網頁運作

這裡我們利用chrome的developer tools(在chrome上按下F12即可使用),我們在觀察方面有2個部分要注意的:

1. 傳送帳號密碼的真正網址

網頁的設計常常會再登入中間安插一個專門處理的網頁,如果網頁是這樣設計的話那我們表面上看到的那個uri就不是真正在做登入的頁面了,為了避免這樣的情況,我們可以利用developer tools來找到真正做處理的uri。
在這裡我們可以看到Post的網頁其實是action中的uri,而非原本的uri

2. headers

接下來我們就要去看看網頁的標頭檔是什麼樣子的,由developer tools我們可以看到網頁的標頭檔。
紅色框框部分為要注意的部分

2. 撰寫程式碼

先處理第一點的第一個部分,我們要先抓出真正的uri,在這裡我們使用的是Html Agility Pack,這個package可以利用元素的XPath找出那個元素的屬性,要找出元素的XPath也很容易,只要使用developer tools就可以了。
元素>按右鍵>Copy XPath
找出XPath後我們才算是真正開始寫程式碼,我們可以把程式分成兩個部分:
  1. 找出真正處理的uri
  2. 撰寫正確的request取回登入資訊的cookies
再來是程式碼的部分


結論

其實要自動登入很簡單,只要熟悉http的運作就可以很容易的做出,在這個部份我覺得最重要的就是google developer tools要熟練。

2014年5月17日 星期六

手動ndk-build

在Android Studio裡,有了gradle的幫助我們不需要自己去撰寫Android.mk,它自動就會幫你產生Android.mk,build成.so檔就可以引用,但是當一個大程式要這麼做的時候就會產生問題,因為複雜,所以你會需要自己編寫Android.mk,這個時候就會產生問題,現在我們就來看看要怎麼樣自己撰寫Android.mk和ndk-build。

目的

自己撰寫Android.mk和ndk-build來寫一個Hello JNI。

前置處理

MainActivity.java中的寫法跟第一個Android NDK(Java call C)中相同,先把它寫上去。

步驟

1. javah

上一篇有講,這裡就不再多說了,只是這裡的classpath要改一下,如下所示 : 


2. main

這裡跟上一篇相同。

3. Android.mk

在ndk/doc中,我們可以找到ANDROID-MK.html中的說明,以下是我寫的 : 


4. 關掉自動ndk-build

因為我們不想要讓gradle自動去build ndk,所以我們要把它關掉,在build.gradle的android中打上下面的指令 :



5. ndk-build

接著開Terminal,目錄移到jni,鍵入ndk-build(記得要設定環境參數)


6. 移動檔案

將生成出來的libs中的armeabi資料夾整個移到build/ndk/debug/lib中,就可以運行了

參考資料

2014年5月15日 星期四

第一個Android NDK(Java call C)

最近因為要在Android中使用到C Library,查了一下發現NDK這個工具,它讓Java可以去呼叫C,讓我們在Android的專案中也可以使用C Library。

環境

  • Windows 8.1(64bits)
  • Android Studio 0.58
  • Android NDK Revision 9d
  • ASUS Nexus 7-Android 4.4.2(API 19)

目的

我們要利用Java去呼叫C的方法,然後將取到的字串輸出。

步驟

1. 下載NDK

https://developer.android.com/tools/sdk/ndk/index.html下載符合自己系統的NDK,這裡我們下載Windows 64-bit的NDK,目前的版本是9d。
載好之後隨便放一個地方,記得路徑以便等下使用(我的路徑為C:\Android\android-ndk-r9d)。

2. 新增native宣告C的方法

在MainActivity.java中打入上面的程式碼,宣告完native function之後要先build,要不然等下的javah會找不到這個方法導致遺漏。

3. 使用javah

先簡單講解javah的使用方式,它可以幫我們產生C header file以便讓我們可以在.java中找到對應的方法。

開啟Terminal

Tools > Open Terminal

將所在目錄轉到main

鍵入javah的指令產生.h


  • -d directory(你要儲存的目錄)
  • -classpath path(javah需要的classes(SDK及project的class路徑))
PS:如果找不到javah的話會產生下面的錯誤
在環境變數裡加上javah的路徑就可解決

4. 加入main.c

如果上面的native有被build的話,你的.h中應該會有{your package}_{native function}(我的就是Java_com_hpchen_testndk_app_MainActivity_getStringFromNative)。
PS:如果沒有請clean project,刪掉jni資料夾,rebuild之後再把第3步重做一次。

  • 記得include .h
  • 將.h中的native function寫好

5. 加入util.c

加入一個空的util.c

6. local.properties中加入ndk路徑


將第1步記下的路徑加入local.properties

7. build.gradle中加入ndk參考


注意:是app中的build.gradle,不是project的。

8. 在MainActivity中load library


執行之後就會看到"Hello JNI !"了。

參考