Category: 程式語言

  • 在windows console app模擬sigterm

    posix相容的系統上,想要把一個程式用正常的流程關掉可以透過 `kill -SIGTERM $pid` 來傳送signal,然後在目標程式上trap signal來進行收尾 但在windows上不管是用 `taskkill /F` 還是 `wmic call terminate` 或 `wmic delete`,程式都會被強制關閉(相當於sigkill),沒辦法執行收尾的流程 `taskkill` 不加F的話是正常關閉,但如果對象是console app時,他會說這個程式只能使用F的方式關閉 查了半天,最接近sigterm的操作是interrupt(ctrl+c)或是break(ctrl+break) 但這個event必須透過win32 api來傳送,因此只能用powershell或是做exe來達成 最後我選了用c的方式實作 原本想要直接傳送event給指定process,但GenerateConsoleCtrlEvent只能送給process group id,而process group id無從查起,直接用pid也沒辦法,只好設定成0讓他傳給當下process group中所有程式 但這樣想要關閉的程式還是會收不到,所以還需要FreeConsole和AttachConsole讓執行當下可以跟目標process掛在同一個process group底下,這樣event就可以收到了 這時會發現送event的程式執行到一半反而因為自己收到ctrl+c而中斷,為了讓他能正常結束要先對ctrl+c免疫,因此要加上一個假的event handler 到這邊這隻程式就能正確發送ctrl+c給指定的pid,唯一需要注意的是整個process group都會收到,地圖砲範圍太大,發動之前要先提醒友軍(不想被關掉的程式)迴避,不然大家都一起被關掉了

  • Ruby Hash Assignment Performance

    最近遇到ruby在處理大量資料時效能低落時順便想到這個問題 用hash在大量insert array的時候做分類,怎麼樣寫會比較快 發現從hash裡面取值出來的次數越少,效能看起來越高 下面是幾個想到的用法,最後一組是直接開固定的key比較沒彈性 倒數第二組則是兼具自動建key和效能的選擇

  • React Native Android原生模組

    因為老闆叫我要幫專案上Auth0,所以就在研究如何插入原生的java模組 新版React Native的MainActivity會繼承ReactActivity onCreate的方法就會被他包起來而無法使用 所以要透過他內建的getPackages來新增模組 剛剛在getPackages插入的物件是ReactPackage的實作 這三個方法都是必須實作的對象 但我們不需要提供JS模組和View 所以直接傳空的回去給他 createNativeModules則是用來插入真正存放模組內容的物件 因為物件在getPackages的時候會new一次 所以constructor就相當於原來Android的onCreate onCreate的時候程式還沒載入完成,所以不能getApplicationContext,要等到React開起來之後從JavaScript來叫 如果方法要給JavaScript叫的話,上面要加@ReactMethod才行 接著來到JavaScript的方面 從react-native那邊就可以直接引入模組 但模組的名字要看剛剛LockReactModule那邊寫的getName回傳了什麼 只要執行上面那兩行把模組輸出之後就可以呼叫LockReactModule裡面寫的@ReactMethod了

  • [PHP] 中文大寫轉換器

    最近在教同學寫PHP,期末作業出了我以前寫過的中文大寫轉換 寫參考解答的時候順便修正了一下以前沒處理的狀況如下

  • [PHP] 辨識遠端圖片大小

    有些網站在貼圖的時候要手動指定大小很不方便,用以下的程式就可以快速地抓到圖片大小 原理是抓取檔案的標頭,讀取裡面的資訊 PNG檔獨立檢查是因為他的data chunk有CRC檢查,檔案不完整會失敗,要是整個載下來,圖檔太大就會讓執行速度拖慢

  • PHP IMAP POP3 信箱驗證

    要使用mail server進行外部驗證的話,可以使用PHP內建的IMAP模組,它支援常用的mail協定,可以輕鬆地完成驗證的動作 以下是範例code

  • Rails 使用 each 輸出空紀錄

    這當初煩惱我很久,後來跟別人討論後找到是new出來的記錄造成的 由於要寫成一個頁面要顯示內容又要提供回覆的表單,所以免不了同時要找紀錄又要產生新紀錄 以往寫起來都沒問題的原因是我用Model.new來重新產生物件,但這次因為有上層文章的關係,用關連去產生,結果造成新的空記錄混進each迴圈 replies關聯我用各種方式去看,都是正確的數量和內容,但不知道為什麼each會去跑new出來的東西 後來將表單的紀錄重新產生一個,再手動指定關聯ID給他,才解決這問題 目前還想不到更好的做法,所以就先暫時用這方法解決~

  • PHP Memcached persistent connection 陷阱

    環境: PHP-FPM 5.5.8 PHP PECL Memcached 2.1.0 libmemcached 1.0.16 memcached 1.4.15 如果建立Memcached物件時指定persistent_id(啟動persistent connection),容易造成PHP以Signal 11(SIGSEGV)中斷 解決辦法:拿掉persistent_id,使用connection per instance方式連線

  • [Java] Class 的 Static 和 Instance 元素

    以Instance來說,Class只是一個模型,在new的時候複製一份至每個物件的記憶體空間中,因此每個物件中的元素互相不共用 而Static則是將元素限定於Class本身的記憶體,new的時候是將元素本身的參照存至物件記憶體中,而非複製,此外也能直接透過Class本身去存取該元素 Instance範例 對Instance來說Class只是一個模型,所以this是指當前物件,在new給物件之前,這並沒有指向任何東西 Static範例

  • [C語言] 大數加法

    今天心血來潮回去看以前沒看完的Array,大數運算在暫存器有限的電腦是很重要的,而且也能練習對陣列的熟悉度 有了些心得後開始試著寫大數加法,寫了一整個晚上,終於弄出來了~~ 雖然程式碼很難看,至少還能正確運算XD