在 Python 的 pip、Nodejs 的 npm、Ruby 的 RubyGems 上面放木馬研究?

在 Python 領域裡常用 pip 安裝軟體:

$ pip install reqeusts

或是:

$ sudo pip install reqeusts

其他的平台也大致類似於這樣的動作。而在「Typosquatting programming language package managers」這篇文章裡,作者用 typo 之類的方式列出可能的名稱,像是這樣的名稱:

$ sudo pip install reqeusts

然後在這三個平台上發動攻擊,上傳了數百個套件並且觀察:

All in all, I created over 200 such packages and equipped them with a small program and uploaded them over the course of several months. The idea is to add some code to the packages that is executed whenever the package is downloaded with the installing user rights.

而這是「成果」:

AWS Lambda 支援 Node.js 4.3

AWS 宣佈 Lambda 支援 Node.js 4.3:「AWS Lambda Supports Node.js 4.3」:

You can now develop your AWS Lambda functions using Node.js 4.3.2 in addition to Node.js 0.10.4.

另外同步在「Node.js 4.3.2 Runtime Now Available on Lambda」這邊也有文章介紹。

這樣總算可以拿出新的套件以及語法了...

用 BitTorrent DHT 分散架構的 Twitter

看到「Decentralized feeds using BitTorrent's DHT. Idea from Arvid and The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html」這個東西,基於 BitTorrentDHT 所開發出來,完全分散架構的 Twitter-like 系統。

目前的 client 界面長這樣:

也可以顯示外部圖片:

如同作者說的,BitTorrent 的 DHT 的抵抗力很好。的確是因為種種原因,有不少單位常常攻擊他,希望他掛掉或是不穩,而這麼多年下來,由於一開始的設計上就有考慮到這樣的攻擊,實戰也存活得很好:

BitTorrent's DHT is probably one of the most resilient and censorship-resistant networks on the internet. PeerTweet uses this network to allow users to broadcast tweets to anyone who is listening.

程式是用 Node.js 寫的,不過用到的東西比較多,安裝起來會比較麻煩一點,照著說明。

減少「註解長度」增加 Node.js 效率...

在「#NodeJS : A quick optimization advice」這邊看到這樣的效能改善方法... 兩段程式碼,只差在註解:

效能差了 50%:

只是因為註解的長度有差,只要用 --max-inlined-source-size 調整就可以避開了:

超苦超無奈:

So when you have a function or callback that’ll be called repeatedly, try to make it under 600 characters (or your tweaked value), you’ll have a quick win !

Node.js 的 LTS 計畫

Node.js 在 4.0 開始啟動 LTS (Long Term Support) 計畫:「Node v4.0.0 (Stable)」。

可以參考「Node.js Long-term Support Working Group」這邊的說明。最主要的重點是生命週期,首先是每六個月就會放一次新版,跟 Ubuntu 相同,也都是四月與十月:

In parallel, we will be branching a new Stable line of releases every 6 months, one in October and one in April each year.

每個 LTS 版本將會有 18 + 12 = 30 個月的支援期:

This means that there will be overlapping LTS branches being maintained throughout the year, each receiving attention for a total of 30 months (LTS plus Maintenance).

這張圖說明了 LTS 與維護的時間線:

有個 LTS 的指標可以挑了...

用 npm 取代 Build Tools (像是 gulp 或 grunt)

這篇「How to Use npm as a Build Tool」教你如何用 package.jsonscripts 取代 gulp 或是 grunt 這類 Build Tools。

文章裡面可以看到各種奇技淫巧都出現了,dependency 的部份用 recursive 解決 (npm 內部自己再呼叫 npm 執行),stream 的部份用 pipe 解決 (這個到是很自然),然後用外部程式掛進來處理 watch 與 livereload,甚至還出現可以自己寫 js 檔案呼叫的方法... XDDD

無所不用其極!反正我就是不要用 gulp 與 grunt... XD

可以欣賞一下怎麼做的...

Ubuntu 下建立 Cordova 的 Android 環境...

依照「Cordova: Getting Started with iOS and Android Applications (Tech Tip #14)」這篇的方法,再加上一些以前練出來的經驗,把系統給弄起來了。

首先是先到 Android 官網下載 Android SDK,目前版本是 adt-bundle-linux-x86_64-20131030,找個合適的地方解開後 (我是放到 $HOME/android 下),把 PATH 加進去:

export PATH="${HOME}/android/sdk/platform-tools:${HOME}/android/sdk/tools:${PATH}"

接下來是透過 nvm 安裝 node.js,先安裝 nvm:

wget https://raw.github.com/creationix/nvm/master/install.sh
sh install.sh

然後重新啟動 shell 讓 nvm 與 PATH 生效後,安裝 0.10.26 (目前的最新版),並且預設用這個版本:

nvm install 0.10.26
nvm alias default 0.10.26

接下來一樣是重新啟動 shell,就可以裝 Cordova 了:

npm install cordova

後面就可以照抄原始範例:

cordova create hello org.samples.wildfly.cordova.hello HelloWorld
cd hello
cordova platform add android
android create avd --name myCordova --target 1
cordova emulate android

然後 AVD 是有名的慢,請耐心等候... XD

跑出來長這樣:

用 browserify 將 npm 的函式庫包到瀏覽器上用...

browserify 可以將用到的程式碼都包成一包,拿到瀏覽器上使用。

舉個例子離說,先寫了一個 a.js

(function(){
    var el = document.getElementById('output');

    var j2x = require('json2xml');
    el.innerText = j2x({a: 1});
})();

其中可以看到直接拿 require()json2xml 抓進來。但在瀏覽器裡要自己處理有哪些 dependency 很麻煩,就用 browserify 拉出來:

browserify a.js -o a.bundle.src.js

生出來的 a.bundle.src.js 就可以拿到瀏覽器裡使用了!如果需要的話,還可以用 JS Compressor 再壓起來再拿到瀏覽器裡使用。

最後補充一下,browserify 的安裝方式很簡單:

npm install browserify

就是這樣而已。

node.js 版的 YUICompressor...

看「Fantastic front-end performance Part 1 – Concatenate, Compress & Cache – A Node.JS Holiday Season, part 4」的時候發現 node.js 版的 YUICompressor 比起 Perl 版本更早之前就 porting 完成了:「UglifyCSS」,甚至是官方版本的「yuicompressor / ports / js / cssmin.js」也都遠早於 Perl 版本...

npm 裝 uglifycss 就可以用了...

node.js 將在微軟的協助下移植到 Windows 上...

node.js logo

node.js 的 blog 上提到了微軟正在協助 Joyent,將 node.js 移植到 Windows 平台上:「Porting Node to Windows With Microsoft's Help」。

預定將會釋出官方版本的 node.exe 供大家下載讓大家在 Windows Server 上跑 (依照 blog 的講法是打算向下支援到 2003),並且同時讓 node.js 變成 Windows Azure 其中一項服務。