Node.js v4.4.5发布

jopen 3年前
   <p style="text-align:center"><img alt="" src="https://simg.open-open.com/show/d9d39e249fe45a3a9d7fbe135ba0644e.png" /></p>    <p>看到Node.js这个名字,初学者可能会误以为这是一个Javascript应用,事实上,Node.js采用C++语言编写而成,是一个Javascript的运行环境。为什么采用C++语言呢?据Node.js创始人Ryan Dahl回忆,他最初希望采用Ruby来写Node.js,但是后来发现Ruby虚拟机的性能不能满足他的要求,后来他尝试采用V8引擎,所以选择了C++语言。既然不是Javascript应用,为何叫.js呢?因为Node.js是一个Javascript的运行环境。Node.js是一个后端的Javascript运行环境(支持的系统包括Linux、Windows和Mac等),这意味着你可以编写系统级或者服务器端的Javascript代码,交给Node.js来解释执行,Node.js采用了Google Chrome浏览器的V8引擎,性能很好,同时还提供了很多系统级的API,如文件操作、网络编程等。浏览器端的Javascript代码在运行时会受到各种安全性的限制,对客户系统的操作有限。相比之下,Node.js则是一个全面的后台运行时,为Javascript提供了其他语言能够实现的许多功能。</p>    <h2>更新日志</h2>    <h3>Notable Changes</h3>    <ul>     <li> <p><strong>buffer</strong>:</p>      <ul>       <li>Buffer no longer errors if you call lastIndexOf with a search term longer than the buffer (Anna Henningsen) <a href="/misc/goto?guid=4958990394592578437">#6511</a></li>      </ul> </li>     <li> <p><strong>contextify</strong>:</p>      <ul>       <li>Context objects are now properly garbage collected, this solves a problem some individuals were experiencing with extreme memory growth (Ali Ijaz Sheikh) <a href="/misc/goto?guid=4958990646935636038">#6871</a></li>      </ul> </li>     <li> <p><strong>deps</strong>:</p>      <ul>       <li>update npm to 2.15.5 (Rebecca Turner) <a href="/misc/goto?guid=4958990647038926241">#6663</a></li>      </ul> </li>     <li> <p><strong>http</strong>:</p>      <ul>       <li>Invalid status codes can no longer be sent. Limited to 3 digit numbers between 100 - 999 (Brian White) <a href="/misc/goto?guid=4958990647138471092">#6291</a></li>      </ul> </li>    </ul>    <h3>Commits</h3>    <ul>     <li>[<a href="/misc/goto?guid=4958990647241157909"><code>59a977dd22</code></a>] - <strong>assert</strong>: respect assert.doesNotThrow message. (Ilya Shaisultanov) <a href="/misc/goto?guid=4958990647328849105">#2407</a></li>     <li>[<a href="/misc/goto?guid=4958990647405595556"><code>8b077faa82</code></a>] - <strong>buffer</strong>: fix UCS2 indexOf for odd buffer length (Anna Henningsen) <a href="/misc/goto?guid=4958990394592578437">#6511</a></li>     <li>[<a href="/misc/goto?guid=4958990647510760118"><code>12a9699fcf</code></a>] - <strong>buffer</strong>: fix needle length misestimation for UCS2 (Anna Henningsen) <a href="/misc/goto?guid=4958990394592578437">#6511</a></li>     <li>[<a href="/misc/goto?guid=4958990647598632203"><code>292b1b733e</code></a>] - <strong>build</strong>: fix make tar-headers for Linux (Gibson Fahnestock) <a href="/misc/goto?guid=4958990647688096715">#5978</a></li>     <li>[<a href="/misc/goto?guid=4958990647780821561"><code>918d33ad4b</code></a>] - <strong>build</strong>: add script to create Android .mk files (Robert Chiras) <a href="/misc/goto?guid=4958990647863146195">#5544</a></li>     <li>[<a href="/misc/goto?guid=4958990647933012518"><code>4ad71847bc</code></a>] - <strong>build</strong>: add suport for x86 architecture (Robert Chiras) <a href="/misc/goto?guid=4958990647863146195">#5544</a></li>     <li>[<a href="/misc/goto?guid=4958990648025142789"><code>6ad85914b1</code></a>] - <strong>child_process</strong>: add nullptr checks after allocs (Anna Henningsen) <a href="/misc/goto?guid=4958990648109967495">#6256</a></li>     <li>[<a href="/misc/goto?guid=4958990648197089125"><code>823f726f66</code></a>] - <strong>contextify</strong>: tie lifetimes of context & sandbox (Ali Ijaz Sheikh) <a href="/misc/goto?guid=4958990648283839269">#5800</a></li>     <li>[<a href="/misc/goto?guid=4958990648361937677"><code>9ddb44ba61</code></a>] - <strong>contextify</strong>: cache sandbox and context in locals (Ali Ijaz Sheikh) <a href="/misc/goto?guid=4958990648447411491">#5392</a></li>     <li>[<a href="/misc/goto?guid=4958990648528806369"><code>8ebdcd65b0</code></a>] - <strong>contextify</strong>: replace deprecated SetWeak usage (Ali Ijaz Sheikh) <a href="/misc/goto?guid=4958990648447411491">#5392</a></li>     <li>[<a href="/misc/goto?guid=4958990648626629232"><code>9e6d8170f7</code></a>] - <strong>contextify</strong>: cleanup weak ref for sandbox (Ali Ijaz Sheikh) <a href="/misc/goto?guid=4958990648447411491">#5392</a></li>     <li>[<a href="/misc/goto?guid=4958990648720666943"><code>b6fc15347d</code></a>] - <strong>contextify</strong>: cleanup weak ref for global proxy (Ali Ijaz Sheikh) <a href="/misc/goto?guid=4958990648447411491">#5392</a></li>     <li>[<a href="/misc/goto?guid=4958990648801640467"><code>0dc875e2c7</code></a>] - <strong>deps</strong>: upgrade npm in LTS to 2.15.5 (Rebecca Turner)</li>     <li>[<a href="/misc/goto?guid=4958990648889851457"><code>3c50350f41</code></a>] - <strong>deps</strong>: fix null pointer checks in v8 (Michaël Zasso) <a href="/misc/goto?guid=4958990648968047785">#6669</a></li>     <li>[<a href="/misc/goto?guid=4958990649054503654"><code>a40730b4b4</code></a>] - <strong>deps</strong>: backport IsValid changes from 4e8736d in V8 (Michaël Zasso) <a href="/misc/goto?guid=4958990648968047785">#6669</a></li>     <li>[<a href="/misc/goto?guid=4958990649141750866"><code>855604c53a</code></a>] - <strong>deps</strong>: upgrade npm in LTS to 2.15.4 (Rebecca Turner) <a href="/misc/goto?guid=4958990647038926241">#6663</a></li>     <li>[<a href="/misc/goto?guid=4958990649238895423"><code>433fb9a968</code></a>] - <strong>deps</strong>: cherry-pick 1383d00 from v8 upstream (Fedor Indutny) <a href="/misc/goto?guid=4958990649314861899">#6179</a></li>     <li>[<a href="/misc/goto?guid=4958990649397151414"><code>d1fca27ef8</code></a>] - <strong>deps</strong>: backport 125ac66 from v8 upstream (Myles Borins) <a href="/misc/goto?guid=4958990649484135025">#6086</a></li>     <li>[<a href="/misc/goto?guid=4958990649561978088"><code>df299019a0</code></a>] - <strong>deps</strong>: upgrade npm in LTS to 2.15.2 (Kat Marchán)</li>     <li>[<a href="/misc/goto?guid=4958990649643142301"><code>50f02bd8d6</code></a>] - <strong>doc</strong>: update vm.runInDebugContext() example (Ben Noordhuis) <a href="/misc/goto?guid=4958990649719310069">#6757</a></li>     <li>[<a href="/misc/goto?guid=4958990649796310775"><code>b872feade3</code></a>] - <strong>doc</strong>: replace functions with arrow functions (abouthiroppy) <a href="/misc/goto?guid=4958990649879769353">#6203</a></li>     <li>[<a href="/misc/goto?guid=4958990649973533506"><code>7160229be4</code></a>] - <strong>doc</strong>: note that zlib.flush acts after pending writes (Anna Henningsen) <a href="/misc/goto?guid=4958990650049879729">#6172</a></li>     <li>[<a href="/misc/goto?guid=4958990650135794022"><code>d069f2de8c</code></a>] - <strong>doc</strong>: add full example for zlib.flush() (Anna Henningsen) <a href="/misc/goto?guid=4958990650049879729">#6172</a></li>     <li>[<a href="/misc/goto?guid=4958990650227135243"><code>59814acfef</code></a>] - <strong>doc</strong>: describe child.kill() pitfalls on linux (Robert Jefe Lindstaedt) <a href="/misc/goto?guid=4958990650302705108">#2098</a></li>     <li>[<a href="/misc/goto?guid=4958990650387315100"><code>840c09492d</code></a>] - <strong>doc</strong>: update openssl.org hash links (silverwind) <a href="/misc/goto?guid=4958990650473197328">#6817</a></li>     <li>[<a href="/misc/goto?guid=4958990650554409148"><code>126fdc3171</code></a>] - <strong>doc</strong>: fix issues related to page scrolling (Roman Reiss)</li>     <li>[<a href="/misc/goto?guid=4958990650628960774"><code>29e25d8489</code></a>] - <strong>doc</strong>: add steps for running addons + npm tests (Myles Borins) <a href="/misc/goto?guid=4958990650710883501">#6231</a></li>     <li>[<a href="/misc/goto?guid=4958990650794416997"><code>fcc6a347f7</code></a>] - <strong>doc</strong>: get rid of sneaky hard tabs in CHANGELOG (Myles Borins) <a href="/misc/goto?guid=4958990650870597030">#6608</a></li>     <li>[<a href="/misc/goto?guid=4958990650953944709"><code>369569018e</code></a>] - <strong>doc</strong>: revert backported commits (Myles Borins) <a href="/misc/goto?guid=4958990651040950626">#6530</a></li>     <li>[<a href="/misc/goto?guid=4958990651113607515"><code>4ec9ae8a1c</code></a>] - <strong>doc</strong>: explain differences in console.assert between node and browsers (James M Snell) <a href="/misc/goto?guid=4958990651203824034">#6169</a></li>     <li>[<a href="/misc/goto?guid=4958990651287913046"><code>df5ce6fad4</code></a>] - <strong>doc</strong>: native module reloading is not supported (Bryan English) <a href="/misc/goto?guid=4958990651357597529">#6168</a></li>     <li>[<a href="/misc/goto?guid=4958990651441331687"><code>30f354f72b</code></a>] - <strong>doc</strong>: clarify fs.watch() and inodes on linux, os x (Joran Dirk Greef) <a href="/misc/goto?guid=4958990651524542792">#6099</a></li>     <li>[<a href="/misc/goto?guid=4958990651610429724"><code>29f821b73d</code></a>] - <strong>doc</strong>: clarifies http.serverResponse implementation (Allen Hernandez) <a href="/misc/goto?guid=4958990218669092207">#6072</a></li>     <li>[<a href="/misc/goto?guid=4958990651716115078"><code>6d560094f4</code></a>] - <strong>doc</strong>: minor argument formatting in stream.markdown (James M Snell) <a href="/misc/goto?guid=4958990651792636783">#6016</a></li>     <li>[<a href="/misc/goto?guid=4958990651877265830"><code>6a197ec617</code></a>] - <strong>doc</strong>: fix http response event, Agent#getName (Matthew Douglass) <a href="/misc/goto?guid=4958990651971588253">#5993</a></li>     <li>[<a href="/misc/goto?guid=4958990652048180808"><code>620a261240</code></a>] - <strong>http</strong>: disallow sending obviously invalid status codes (Brian White) <a href="/misc/goto?guid=4958990647138471092">#6291</a></li>     <li>[<a href="/misc/goto?guid=4958990652138276473"><code>9a8b53124d</code></a>] - <strong>http</strong>: unref socket timer on parser execute (Fedor Indutny) <a href="/misc/goto?guid=4958990652220523496">#6286</a></li>     <li>[<a href="/misc/goto?guid=4958990652310012045"><code>b28e44deb2</code></a>] - <strong>http</strong>: Corrects IPv6 address in Host header (Mihai Potra) <a href="/misc/goto?guid=4958990652393528231">#5314</a></li>     <li>[<a href="/misc/goto?guid=4958990652475186379"><code>2fac15ba94</code></a>] - <strong>src</strong>: fix FindFirstCharacter argument alignment (Anna Henningsen) <a href="/misc/goto?guid=4958990394592578437">#6511</a></li>     <li>[<a href="/misc/goto?guid=4958990652568491993"><code>2942cff069</code></a>] - <strong>src</strong>: add missing 'inline' keywords (Ben Noordhuis) <a href="/misc/goto?guid=4958990652651231386">#6056</a></li>     <li>[<a href="/misc/goto?guid=4958990652737699048"><code>e0eebf412e</code></a>] - <strong>src,tools</strong>: remove null sentinel from source array (Ben Noordhuis) <a href="/misc/goto?guid=4958990652807494617">#5418</a></li>     <li>[<a href="/misc/goto?guid=4958990652898291539"><code>8f18414cd5</code></a>] - <strong>src,tools</strong>: drop nul byte from built-in source code (Ben Noordhuis) <a href="/misc/goto?guid=4958990652807494617">#5418</a></li>     <li>[<a href="/misc/goto?guid=4958990652986861980"><code>d7a3ea457b</code></a>] - <strong>src,tools</strong>: allow utf-8 in built-in js source code (Ben Noordhuis) <a href="/misc/goto?guid=4958990652807494617">#5418</a></li>     <li>[<a href="/misc/goto?guid=4958990653078987228"><code>51c0808b55</code></a>] - <strong>stream</strong>: Fix readableState.awaitDrain mechanism (Anna Henningsen) <a href="/misc/goto?guid=4958990653164153564">#6023</a></li>     <li>[<a href="/misc/goto?guid=4958990653239493506"><code>49a5941d30</code></a>] - <strong>test</strong>: fix test-debug-port-cluster flakiness (Rich Trott) <a href="/misc/goto?guid=4958990653319759835">#6769</a></li>     <li>[<a href="/misc/goto?guid=4958990653409483655"><code>f8144e4c4a</code></a>] - <strong>test</strong>: add logging for test-debug-port-cluster (Rich Trott) <a href="/misc/goto?guid=4958990653319759835">#6769</a></li>     <li>[<a href="/misc/goto?guid=4958990653495173939"><code>773ea20d0e</code></a>] - <strong>test</strong>: include component in tap output (Ben Noordhuis) <a href="/misc/goto?guid=4958990653569828166">#6653</a></li>     <li>[<a href="/misc/goto?guid=4958990653667696701"><code>333369e1ff</code></a>] - <strong>test</strong>: increase the platform timeout for AIX (Michael Dawson) <a href="/misc/goto?guid=4958990653742839817">#6342</a></li>     <li>[<a href="/misc/goto?guid=4958990653828204822"><code>06e5fafe84</code></a>] - <strong>test</strong>: add tests for console.assert (Evan Lucas) <a href="/misc/goto?guid=4958990653909093997">#6302</a></li>     <li>[<a href="/misc/goto?guid=4958990653984850375"><code>f60ba54811</code></a>] - <strong>test</strong>: add zlib close-after-error regression test (Anna Henningsen) <a href="/misc/goto?guid=4958990654069663027">#6270</a></li>     <li>[<a href="/misc/goto?guid=4958990654152095157"><code>24ac16f4be</code></a>] - <strong>test</strong>: fix flaky test-http-set-timeout-server (Santiago Gimeno) <a href="/misc/goto?guid=4958990654235996669">#6248</a></li>     <li>[<a href="/misc/goto?guid=4958990654319442185"><code>5002a71357</code></a>] - <strong>test</strong>: assert - fixed error messages to match the tests (surya panikkal) <a href="/misc/goto?guid=4958990654409300532">#6241</a></li>     <li>[<a href="/misc/goto?guid=4958990654502151465"><code>0f9405dd33</code></a>] - <strong>test</strong>: move more tests from sequential to parallel (Santiago Gimeno) <a href="/misc/goto?guid=4958990654600572794">#6187</a></li>     <li>[<a href="/misc/goto?guid=4958990654677447484"><code>37cc249218</code></a>] - <strong>test</strong>: fix test-net-settimeout flakiness (Santiago Gimeno) <a href="/misc/goto?guid=4958990654776796503">#6166</a></li>     <li>[<a href="/misc/goto?guid=4958990654864003713"><code>69dcbb642f</code></a>] - <strong>test</strong>: fix flaky test-child-process-fork-net (Rich Trott) <a href="/misc/goto?guid=4958990654958596691">#6138</a></li>     <li>[<a href="/misc/goto?guid=4958990655051186497"><code>a97a6a9d69</code></a>] - <strong>test</strong>: fix issues for ESLint 2.7.0 (silverwind) <a href="/misc/goto?guid=4958990027057257490">#6132</a></li>     <li>[<a href="/misc/goto?guid=4958990655178801394"><code>a865975909</code></a>] - <strong>test</strong>: fix flaky test-http-client-abort (Rich Trott) <a href="/misc/goto?guid=4958990655271049685">#6124</a></li>     <li>[<a href="/misc/goto?guid=4958990655359272341"><code>25d4b5b1e9</code></a>] - <strong>test</strong>: move some test from sequential to parallel (Santiago Gimeno) <a href="/misc/goto?guid=4958990655442033383">#6087</a></li>     <li>[<a href="/misc/goto?guid=4958990655535945201"><code>28040ccf49</code></a>] - <strong>test</strong>: refactor test-file-write-stream3 (Rich Trott) <a href="/misc/goto?guid=4958990655621581179">#6050</a></li>     <li>[<a href="/misc/goto?guid=4958990655710344217"><code>3a67a05ed4</code></a>] - <strong>test</strong>: enforce strict mode for test-domain-crypto (Rich Trott) <a href="/misc/goto?guid=4958990655805891322">#6047</a></li>     <li>[<a href="/misc/goto?guid=4958990655893844527"><code>0b376cb3f9</code></a>] - <strong>test</strong>: fix pummel test failures (Rich Trott) <a href="/misc/goto?guid=4958990655983718603">#6012</a></li>     <li>[<a href="/misc/goto?guid=4958990656080844958"><code>7b60b8f8e9</code></a>] - <strong>test</strong>: fix flakiness of stringbytes-external (Ali Ijaz Sheikh) <a href="/misc/goto?guid=4958990656170462698">#6705</a></li>     <li>[<a href="/misc/goto?guid=4958990656269593255"><code>cc4c5187ed</code></a>] - <strong>test</strong>: ensure test-npm-install uses correct node (Myles Borins) <a href="/misc/goto?guid=4958990656350242375">#6658</a></li>     <li>[<a href="/misc/goto?guid=4958990656432742971"><code>3d4d5777bc</code></a>] - <strong>test</strong>: refactor http-end-throw-socket-handling (Santiago Gimeno) <a href="/misc/goto?guid=4958990656524176727">#5676</a></li>     <li>[<a href="/misc/goto?guid=4958990656608230191"><code>c76f214b90</code></a>] - <strong>test,tools</strong>: enable linting for undefined vars (Rich Trott) <a href="/misc/goto?guid=4958990656705894659">#6255</a></li>     <li>[<a href="/misc/goto?guid=4958990656783928185"><code>9222689215</code></a>] - <strong>test,vm</strong>: enable strict mode for vm tests (Rich Trott) <a href="/misc/goto?guid=4958990656882101901">#6209</a></li>     <li>[<a href="/misc/goto?guid=4958990656970239835"><code>b8c9d6b64e</code></a>] - <strong>tools</strong>: enable linting for v8_prof_processor.js (Rich Trott) <a href="/misc/goto?guid=4958990657066626802">#6262</a></li>     <li>[<a href="/misc/goto?guid=4958990657155490443"><code>8fa202947d</code></a>] - <strong>tools</strong>: lint rule for assert.fail() (Rich Trott) <a href="/misc/goto?guid=4958990657236190546">#6261</a></li>     <li>[<a href="/misc/goto?guid=4958990657331570859"><code>1aa6c5b7a9</code></a>] - <strong>tools</strong>: update ESLint to 2.7.0 (silverwind) <a href="/misc/goto?guid=4958990027057257490">#6132</a></li>     <li>[<a href="/misc/goto?guid=4958990657428945263"><code>68c7de4372</code></a>] - <strong>tools</strong>: remove simplejson dependency (Sakthipriyan Vairamani) <a href="/misc/goto?guid=4958990657524506993">#6101</a></li>     <li>[<a href="/misc/goto?guid=4958990657616904704"><code>4fb4ba98a8</code></a>] - <strong>tools</strong>: remove disabling of already-disabled rule (Rich Trott) <a href="/misc/goto?guid=4958990657713974890">#6013</a></li>     <li>[<a href="/misc/goto?guid=4958990657803133753"><code>4e6ea7f01a</code></a>] - <strong>tools</strong>: remove obsolete npm test-legacy command (Kat Marchán)</li>     <li>[<a href="/misc/goto?guid=4958990657898036740"><code>4c73ab4302</code></a>] - <strong>tools,doc</strong>: fix json for grouped optional params (firedfox) <a href="/misc/goto?guid=4958990657978485874">#5977</a></li>     <li>[<a href="/misc/goto?guid=4958990658069590549"><code>c893cd33d1</code></a>] - <strong>tools,doc</strong>: parse types in braces everywhere (Alexander Makarenko) <a href="/misc/goto?guid=4958990658154999272">#5329</a></li>     <li>[<a href="/misc/goto?guid=4958990658249778910"><code>48684af55f</code></a>] - <strong>zlib</strong>: fix use after null when calling .close (James Lal) <a href="/misc/goto?guid=4958990658334472347">#5982</a></li>    </ul>    <h2>下载地址</h2>    <table>     <tbody>      <tr>       <th>Windows Installer (.msi)</th>       <td colspan="3"><a href="/misc/goto?guid=4958990658431323790">32-bit</a></td>       <td colspan="3"><a href="/misc/goto?guid=4958990658511968394">64-bit</a></td>      </tr>      <tr>       <th>Windows Binary (.exe)</th>       <td colspan="3"><a href="/misc/goto?guid=4958990658602328692">32-bit</a></td>       <td colspan="3"><a href="/misc/goto?guid=4958990658682462565">64-bit</a></td>      </tr>      <tr>       <th>Mac OS X Installer (.pkg)</th>       <td colspan="6"><a href="/misc/goto?guid=4958990658783780871">64-bit</a></td>      </tr>      <tr>       <th>Mac OS X Binaries (.tar.gz)</th>       <td colspan="6"><a href="/misc/goto?guid=4958990658875722957">64-bit</a></td>      </tr>      <tr>       <th>Linux Binaries (.tar.xz)</th>       <td colspan="3"><a href="/misc/goto?guid=4958990658969030198">32-bit</a></td>       <td colspan="3"><a href="/misc/goto?guid=4958990659049970068">64-bit</a></td>      </tr>      <tr>       <th>Source Code</th>       <td colspan="6"><a href="/misc/goto?guid=4958990659151481424">node-v4.4.5.tar.gz</a></td>      </tr>     </tbody>    </table>    <h3>其他平台</h3>    <table>     <tbody>      <tr>       <th>ARM Binaries (.tar.xz)</th>       <td colspan="2"><a href="/misc/goto?guid=4958990659247773812">ARMv6</a></td>       <td colspan="2"><a href="/misc/goto?guid=4958990659337435244">ARMv7</a></td>       <td colspan="2"><a href="/misc/goto?guid=4958990659428230285">ARMv8</a></td>      </tr>      <tr>       <th>SunOS Binaries (.tar.xz)</th>       <td colspan="3"><a href="/misc/goto?guid=4958990659522286030">32-bit</a></td>       <td colspan="3"><a href="/misc/goto?guid=4958990659614019399">64-bit</a></td>      </tr>      <tr>       <th>Docker Image</th>       <td colspan="6"><a href="/misc/goto?guid=4958990396897659896">Official Node.js Docker Image</a></td>      </tr>      <tr>       <th>Linux on Power Systems</th>       <td colspan="3"><a href="/misc/goto?guid=4958990659735672830">64-bit le</a></td>       <td colspan="3"><a href="/misc/goto?guid=4958990659825927604">64-bit be</a></td>      </tr>      <tr>       <th>Linux on System z</th>       <td colspan="6"><a href="/misc/goto?guid=4958990397085165230">Download (Unofficial, provided by IBM)</a></td>      </tr>      <tr>       <th>AIX on Power Systems</th>       <td colspan="6"><a href="/misc/goto?guid=4958990397085165230">Download (Unofficial, provided by IBM)</a></td>      </tr>     </tbody>    </table>    <p> </p>    <ul>     <li><a href="/misc/goto?guid=4958990659966493276" rel="nofollow"><strong>Source code</strong> (zip)</a></li>     <li><a href="/misc/goto?guid=4958990660052108407" rel="nofollow"><strong>Source code</strong> (tar.gz)</a></li>    </ul>