2017年3月30日 星期四

[electron]我只想把 asar 檔當成正常檔案 asar file as normal file in electron

前言

這個也是一拳就解決的事。首先來說明一下情況

環境

在 electron 的 renderer process 裡,遇到 asar 檔案的開啟或讀取,會有特別狀況,例如:
1. 對它判斷是否為目錄,答案為真。
2. 對它讀取內容會出現錯誤 ‘ENOENT’。

原因在於 electron 改寫了原本 fs 模組的內容,一但遇到 asar 檔,就會視為目錄,可以對它裡面的檔案做取用。

這對於我要複製/刪除 asar 檔或是為它做 hash 都會出問題。

網路上多數的查詢都長成這樣:https://github.com/electron/electron/issues/1658

是說改用 original-fs 模組。但是它已經在 npm 上找不到了!!這不是搞笑嗎?

其他 npm 上跟 original-fs 的模組我也試了幾個,失敗。

解法

照參考的解法,在 fs 動作前,加上 process.noAsar = true,一拳。


If you want read asar file as normal file in electron process, and you can not find original-fs module, you just need one line before fs read/readstream:

process.noAsar = true

done.

參考:

https://www.bountysource.com/issues/39961418-rm-rf-doesn-t-work-if-the-directory-contains-an-asar-archive-in-electron

2017年3月24日 星期五

[python]pyzmq 的 pyinstaller 打包失敗

這個也算是一拳解決,所以要先來描述一下問題。

環境

環境是 windows,python2.7,用 pip install zerorpc。
到了要打包的時候,pyinstaller 會吐出 warning:

4736 INFO: Looking for dynamic libraries
5439 WARNING: lib not found: libzmq.pyd dependency of c:\python27\lib\site-packa
ges\zmq\backend\cython\message.pyd
5532 WARNING: lib not found: libzmq.pyd dependency of c:\python27\lib\site-packa
ges\zmq\backend\cython\_device.pyd
5641 WARNING: lib not found: libzmq.pyd dependency of c:\python27\lib\site-packa
ges\zmq\backend\cython\utils.pyd
5735 WARNING: lib not found: libzmq.pyd dependency of c:\python27\lib\site-packa
ges\zmq\backend\cython\socket.pyd
5844 WARNING: lib not found: libzmq.pyd dependency of c:\python27\lib\site-packa
ges\zmq\backend\cython\_poll.pyd
5937 WARNING: lib not found: libzmq.pyd dependency of c:\python27\lib\site-packa
ges\zmq\backend\cython\context.pyd
6031 WARNING: lib not found: libzmq.pyd dependency of c:\python27\lib\site-packa
ges\zmq\backend\cython\error.pyd
6125 WARNING: lib not found: libzmq.pyd dependency of c:\python27\lib\site-packa
ges\zmq\backend\cython\_version.pyd

真的執行的話,會出現:

File "site-packages\zmq\backend\cython\__init__.py", line 6, in <module>
File "c:\users\cyrus\appdata\local\temp\pip-build-ont0l7\pyinstaller\PyInstall
er\loader\pyimod03_importers.py", line 546, in load_module
ImportError: DLL load failed: 找不到指定的模組。
Failed to execute script api

一拳

C:\Python27\Lib\site-packages\zmq\libzmq.pyd 要複製一份到 C:\Python27\Lib\site-packages\zmq\backend\cython\

搞定

2017年3月22日 星期三

在 win2012 反安裝 python3.6.1 遇到問題

在 win2012 反安裝 python3.6.1 的時候,若是使用「控制台」、「程式集」、「解除安裝程式」會遇到權限不夠而無法執行。

這時,要用管理員的權限執行原來的安裝程式,然後再選擇「uninstall」才行。


If you have problem that uninstall python3.6.1 on windows 2012. It is probly that you uninstall it from [control panel], [Programs and Features]. You have to execute the python3.6.1 installer on administrator privilege, then choice “uninstall”. That’s all.

2017年3月13日 星期一

[趣記] hg keyring extension

每次 hg 到 remote 都要輸入帳密,又不想把帳密寫在設定檔裡給人看。這時候就是需要這個了。

https://www.mercurial-scm.org/wiki/KeyringExtension

[趣記] vb property 語法糖

vb 又給了個語法糖。沒事可以多用。

 適用 vs2010 以上版本。

  https://msdn.microsoft.com/en-us/library/dd293589.aspx

[趣記] GUID 設計來保持唯一,但事情總是會變…

GUID 設計來保持唯一,但事情總是會變…

http://blog.darkthread.net/post-2017-02-17-is-guid-really-unique.aspx

[趣記] 友善列印

這是一個很老的問題,如何做出列印友善的內容。

http://stackoverflow.com/questions/16894683/how-to-print-html-content-on-click-of-a-button-but-not-the-page

2017年3月1日 星期三

[超譯]git 七招打天下

原文連結:
http://www.infoworld.com/article/3169942/application-development/7-simple-commands-for-git-survival.html

You don’t have to get fancy to get most of your work done with Git; start with these essential commands
用 git 工作你不需要趕流行用什麼特技,只要用這些基本指令就好。

大多數公司都用 git,不只為了開發商業或消費性 app。科學與政府組織也有好理由,所以這些技術越來越常被使用。

git 允許漸進式合作,快速散佈,為程式碼建立信心,三個都是很重要的目標,所以很多團隊納為 devops 的手法。為了要達成這些目標,許多 git 平台包含整合工具支援程式碼測試與團隊管理。

就算 git 變得無所不在,仍有一些在觀望。 GitLab 最近有個調查,發現 40% 的開發團隊憂心 git 的學習曲線。自然地,在 GitLab,我每天用它工作,我了解 git 對新使用者的挑戰。

幸運的是,有大量的資源可以幫助新使用者克服他們的焦慮。許多公司,包含我們自己,都有免費資源給想要學習的開發者。除了公司主導的資源外,git 也有很多社群技援,分享許多常見問題的解法。

保持簡單

要了解 git,最好要知道它是從命令列來的。但是,有經驗的 git 使用者喜歡客戶端有簡易介面讓易用性提高。Git Tower 與 Tortoise Git 就是非常好的客戶端程式。

好消息是,多數開發者可以只學幾個基本指令就可以處理大多數的工作。與 repo 同步、建立新分支、建立新增與提交,把改變推回遠端等,這幾個工作,使用以下會提到的七個命令就可以做到。git 不需要搞得太複雜。

切換到主分支

git checkout master

這個 git checkout 讓你在分支間移動,並回復檔案。git checkout master 會切換到主線,這是你要改東西之前最好的出發點。

拿到最近的更新

git pull origin master

一但你切到主線,你可以用 git pull origin master 保證你的分支裡的東西是repo的裡最新的。這是通常在合併上游改變之後要做的事。git pull實際上是合併了git fetch(這是把最後資訊抓回來) 與git merge(這把兩個歷史合併)這兩個命令。基本上,git pull origin master讓你一次做兩個命令,這非常省時間。

在一個 repo 開始工作前,執行一次 git pull origin master 是個好主意。畢竟,在協作過程中,你會想要確定你的 repo 跟遠端最新的是一樣的內容。

擴展你的分支

git checkout -b branchname

這個命令用來建立新的分支,分支名是 “branchname”,然後移動過去。

分支是 git 的基礎功能。想要開個新功能嗎?輸入git checkout -b new-feature,建立一個新分支叫做”new-feature”,然後開啟它。這個新分支讓你平行開發,與你的同事之間是一個,你自己是另一個分支,程式碼分開,不會互相干擾。

當你準備好要分享你的工作成果,你可以把分支推去遠端或是合併到新分支(通常是主線),這些指令馬上來說明…。

當你需要知道狀況

git status

讓 git 告訴你現在你的 repo 的狀況。例如,git 會指出哪些檔案有改變過或是你的分支新增的。然後 git 會給予建議該怎麼做,提供指令如何 stage 或 commit 這些檔案。

為了下一步準備

git add

這個指令會在工作目錄加入一個改變,使得它放到台面(也就是標記為改變的一部份)。這個改變可以是移除或新增一個檔案或目錄。這是提交改變的準備步驟。實際的動作已經做完了,但這個命令只是正式申明這些改變要被提交。

如果你對所有改變都很滿意,你可以加上 -all選項,git add -all會標明所有這個工作目錄與子目錄的改變,包含目錄的移除。

記錄你的改變

git commit

這個命令會記下你的改變,放在本地端 repo。不要與git push搞混,接下來會解釋。你也可以使用git commit刪除檔案,用些迂迴的方式來做。

git 是個整包的提交,也就是說提交是個改變(裡面會包含此次所有的新增、刪除、更新)。git commit 會把之前用git add記為改變的提交出去。這個改變是記在本地 repo。要分享出去就一定要推到遠端。

分享你的改變

git push

執行這個命令會推送你的改變到遠端,有數個方式你可以調整。單純git push這個指令,會改變 repo 與它的所有相關。

git push <remote> <branchname> 這指令會推送本地端 的改變到,它通常是你協作同事的伺服器。預設,第一個 remote 叫做 “origin”,如果你在 “new-feature” 分支有改變,你可以下 git push origin new-feature,把改變(提交)送到你協作同事的地方。

你完全可以用以上的指令把 git 相關工作搞定。通常開發者會遇到困難是因為他們想用複雜指令像是git rebase而把事情搞得太複雜,而導致不清楚自己在做什麼以及是否有必要搞這些。

當有疑問的時候,執行git status,讓 git 告訴你。