『壹』 圖靈社區 閱讀 Java准備好支持HTML5了嗎
每一個新的蘋果移動設備和蘋果筆記本都支持最新的HTML5標准。一些大的社交網站,包括FACEBOOK,已經在內容推送功能中使用了HTML5技術。但是高級JAVA應用開發人員依然有一個疑問:JAVA社區是否已經准備好為HTML5的開發與集成做出努力?
HTML5直接用瀏覽器提供更具交互性的內容,簡化了富內容的推送過程,並且減少了對專利技術(比如Adobe Flash和微軟的Silverlight)的依賴,提升了用戶端的體驗。在富內容領域里, Oracle提供的純JAVA解決方案只有JavaFX, 在與HTML5融合使用的同時,其生存環境也會受到後者的威脅。
在2011年9月的JavaOne大會上,為了簡化利用了HTML 5技術的應用程序的開發,Cameron Purdy 和Adam Messinger 揭開了Avatar項目的神秘面紗。「你現在雖然可以在使用HTML5做前端工作的同時使用Java做後端工作,但是這並不會給你帶來任何樂趣,這么搭配並易用,並且讓Java開發人員和HTML5開發人員配合起來也很困難」Adam Messinger 在談到當前HTML5技術與標准Java技術配合開發時說。
遺憾的是,在大會之後,Adam Messinger不再擔任Oracle公司Fusion Middleware部門的副總裁一職,而是加盟了Twitter,擔任Infrastructure Engineering部門的副總裁。雖然距Avatar首次面世已經有六個月了,但是Oracle的網站上幾乎沒有提及這個項目的任何信息。
當然,其他Java社區里的人會認為Java實際上已經為與HTML5融合做好了准備。對於大多數的企業應用,Java是在服務端上運行的,它從服務端把內容推送到Web端。這些推送出來的內容通常不會被認為是運行於JVM的位元組碼生成的。模型-視圖-控制器(MVC)的方法意味著Web層(視圖)將會與用Java實現的控制邏輯、數據、業務邏輯分開進行開發。
有了獨立的Web層,從HTML4轉移到HTML5隻用上幾節課,升級如HTML5新特性這樣的開發技能,然後開始利用HTML5 canvas ,silder和video就可以了。盡管Java社區堅信他們的應用可以在視圖層和邏輯層完全分離的情況下進行開發,然而事實上,很多網站的渲染技術和HTML4的規范緊密的聯系在了一起。
例如,JSF(為Web應用程序的UI層開發而設計的Java EE標准)就包含了大量直接映射到HTML4規范的標簽。這種緊耦合引起了廣泛關注,JSF很可能會在下一個標準的版本發布之前牢牢綁定在HTML4上。但很多專家預計,對JSF開發者來說,從HTML4過渡到HTML5將比想像的要更加快捷。
讓JSF為HTML5做好准備
JSF的規范分離了其邏輯層和渲染層,這意味著只要在已存在的JSF組件上替換渲染器即可容納新的標准。
從其他技術換成HTML5很簡單,你只要更換渲染器就可以。甚至你只需要更新,不用更換就可以。這和我們把HTML5當做一種全新的技術根本不一樣。所以你只需要把渲染器更新使他包含HTML5的標簽,然後一切就大功告成了。我確信他們在討論的JSF2.x支持HTML5標簽。如果你看一下豐富的組件庫,你會發現實際上把其他技術換成HTML5會比你想的更容易,因為渲染器並沒有特別地和實現綁定在一起。他們只需要更新HTML5表全的組件和功能就可以了。
此外,JSF是為非常強的靈活性和自定性而生的,所以看到很多position documents已經被應用並且展示著HTML5 drag-and-drop 和 inline editing的能力可以在JSF組件中可以繼續發揮作用。
於是,以前的Java框架和項目需要進行代碼的維護才能適應現在的工作,然而程序員去做這項工作是需要動機和動力的。這就是為什麼在選擇框架時項目的健康度(具體體現在維護該框架社區的活躍性和發展狀況——譯者注)及其貢獻者的活躍性是相當重要的。AppFuse框架的發明者Matt Raible 受到了像Tapestry這樣活躍Web框架的影響,開始跟進對HTML5的支持。
我認為一個項目的健康程度十分重要,因為如果一個框架沒人進行更新維護框架就不會與時俱進,於是就沒有會長期去喜歡使用它。在今天一些框架,例如Tapestry上你就可以發現這一點。我現在越來越多的使用Tapestry,你會發現這個框架在這個項目正在專注於很多前端的技術,其中就包括剛剛推出的HTML5。
Java已經為融合基於HTML5技術准備了很多種不同的方法。如果你一直採用MVC的設計理念進行開發,那麼通過升級視圖組件來使用新的標簽和特性將比用文本編輯器打開JSP然後不停地敲代碼更容易。如果你在使用一個像JSF 下的Tapestry這樣活躍並且健康的框架,那麼框架的貢獻者和維護者已經將HTML特性加入其中了。
HTML5在Java程序員開發的應用中盛行起來所需要的時間將由用戶對最新基於HTML5的特性在應用中的需求和Java開發社區可以多快接受只能由HTML5所帶來的革新而決定。
譯者:徐淙浩(就讀於東南大學計院本科大二) 這是我的第一篇譯文,我本來並沒有想去承擔如此重的任務。但在姚琪琳老師的鼓勵下,我試著去挑戰一下自我。在認識圖靈系列以前,我一直對計算機書籍的翻譯質量有著很大的成見。但是今天,我自己做了一回譯者,真的覺得翻譯的確不是一件容易的事。對於技術類的翻譯在達到不出技術錯誤的同時還要做到信、達、雅,讓中國的讀者讀起來不覺得別扭。 感謝姚琪琳老師對本文第一段提出的修改意見。 希望大家多拍磚,我也好學習一下。
『貳』 圖靈社區 閱讀 跨平台還是Java的最大優勢嗎
相對於其他語言java跨平台優勢很明顯
『叄』 圖靈社區 閱讀 為什麼要選擇Python語言實現機器學習演算法
基於以下三個原因,我們選擇Python作為實現機器學習演算法的編程語言:(1) Python的語法清晰;(2) 易於操作純文本文件;(3) 使用廣泛,存在大量的開發文檔。
可執行偽代碼
Python具有清晰的語法結構,大家也把它稱作可執行偽代碼(executable pseudo-code)。默認安裝的Python開發環境已經附帶了很多高級數據類型,如列表、元組、字典、集合、隊列等,無需進一步編程就可以使用這些數據類型的操作。使用這些數據類型使得實現抽象的數學概念非常簡單。此外,讀者還可以使用自己熟悉的編程風格,如面向對象編程、面向過程編程、或者函數式編程。不熟悉Python的讀者可以參閱附錄A,該附錄詳細介紹了Python語言、Python使用的數據類型以及安裝指南。
Python語言處理和操作文本文件非常簡單,非常易於處理非數值型數據。Python語言提供了豐富的正則表達式函數以及很多訪問Web頁面的函數庫,使得從HTML中提取數據變得非常簡單直觀。
Python比較流行
Python語言使用廣泛,代碼範例也很多,便於讀者快速學習和掌握。此外,在開發實際應用程序時,也可以利用豐富的模塊庫縮短開發周期。
在科學和金融領域,Python語言得到了廣泛應用。SciPy和NumPy等許多科學函數庫都實現了向量和矩陣操作,這些函數庫增加了代碼的可讀性,學過線性代數的人都可以看懂代碼的實際功能。另外,科學函數庫SciPy和NumPy使用底層語言(C和Fortran)編寫,提高了相關應用程序的計算性能。本書將大量使用Python的NumPy。
Python的科學工具可以與繪圖工具Matplotlib協同工作。Matplotlib可以繪制2D、3D圖形,也可以處理科學研究中經常使用到的圖形,所以本書也將大量使用Matplotlib。
Python開發環境還提供了互動式shell環境,允許用戶開發程序時查看和檢測程序內容。
Python開發環境將來還會集成Pylab模塊,它將NumPy、SciPy和Matplotlib合並為一個開發環境。在本書寫作時,Pylab還沒有並入Python環境,但是不遠的將來我們肯定可以在Python開發環境找到它。
Python語言的特色
諸如MATLAB和Mathematica等高級程序語言也允許用戶執行矩陣操作,MATLAB甚至還有許多內嵌的特徵可以輕松地構造機器學習應用,而且MATLAB的運算速度也很快。然而MATLAB的不足之處是軟體費用太高,單個軟體授權就要花費數千美元。雖然也有適合MATLAB的第三方插件,但是沒有一個有影響力的大型開源項目。
Java和C等強類型程序設計語言也有矩陣數學庫,然而對於這些程序設計語言來說,最大的問題是即使完成簡單的操作也要編寫大量的代碼。程序員首先需要定義變數的類型,對於Java來說,每次封裝屬性時還需要實現getter和setter方法。另外還要記著實現子類,即使並不想使用子類,也必須實現子類方法。為了完成一個簡單的工作,我們必須花費大量時間編寫了很多無用冗長的代碼。Python語言則與Java和C完全不同,它清晰簡練,而且易於理解,即使不是編程人員也能夠理解程序的含義,而Java和C對於非編程人員則像天書一樣難於理解。
所有人在小學二年級已經學會了寫作,然而大多數人必須從事其他更重要的工作。
——鮑比·奈特
也許某一天,我們可以在這句話中將「寫作」替代為「編寫代碼」,雖然有些人對於編寫代碼很感興趣,但是對於大多數人來說,編程僅是完成其他任務的工具而已。Python語言是高級編程語言,我們可以花費更多的時間處理數據的內在含義,而無須花費太多精力解決計算機如何得到數據結果。Python語言使得我們很容易表達自己的目的。
Python語言的缺點
Python語言唯一的不足是性能問題。Python程序運行的效率不如Java或者C代碼高,但是我們可以使用Python調用C編譯的代碼。這樣,我們就可以同時利用C和Python的優點,逐步地開發機器學習應用程序。我們可以首先使用Python編寫實驗程序,如果進一步想要在產品中實現機器學習,轉換成C代碼也不困難。如果程序是按照模塊化原則組織的,我們可以先構造可運行的Python程序,然後再逐步使用C代碼替換核心代碼以改進程序的性能。C++ Boost庫就適合完成這個任務,其他類似於Cython和PyPy的工具也可以編寫強類型的Python代碼,改進一般Python程序的性能。
如果程序的演算法或者思想有缺陷,則無論程序的性能如何,都無法得到正確的結果。如果解決問題的思想存在問題,那麼單純通過提高程序的運行效率,擴展用戶規模都無法解決這個核心問題。從這個角度來看,Python快速實現系統的優勢就更加明顯了,我們可以快速地檢驗演算法或者思想是否正確,如果需要,再進一步優化代碼。
『肆』 圖靈社區 閱讀 發現外版好書,怎樣推薦引進出版
出版書籍很簡單的哈
『伍』 圖靈社區 閱讀 怎樣在 Markdown 中使程序代碼帶上行號
在圖靈社區使用 Markdown 寫文章時,如果在一段文字的每行開頭加上四個空格,或者一個製表符(Tab),這段文字就會被視為程序代碼。這樣,就會自動識別所用的編程語言,進行代碼染色,語法高亮顯示。但是,如果這段程序很長的話,就有兩個小問題:
每行的開頭要加上空格或製表符,很麻煩。
如果要顯示行號的話,就更麻煩了。
因此,我用 C# 語言寫了小程序,建設一個 ASP.NET 4 網站來解決上述兩個麻煩:
[+]查看原圖
在這個網頁中:
Line Count 復選框表示是否需要加上行號。
Prefix 中的的 Space 和 Tab 無線按鈕讓你選擇每行開頭是增加空格還是製表符。
Prefix Count 文本框讓你輸入縮進的層次。默認是縮進一層 。但是如果遇到在有序列表或無序列表中的程序代碼,就需要縮進兩層,甚至更多層了。
這個網站的總體結構如下所示:
網站的配置文件 Web.config 如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
</configuration>
網站的 Web 頁面文件 CodeFormat.aspx 如下所示:
<%@ Page validateRequest="false" Language="C#" inherits="Skyiv.Ben.Web.CodeFormatPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Code Format</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Button Onclick="Submit" Text="Submit" Runat="Server" />
<span style="background-color:LightBlue;">
<asp:CheckBox Id="chkLineCount" Text="Line Count" Checked="True" Runat="Server" />
</span>
<span style="background-color:LightBlue;">
Prefix:
<asp:RadioButton Id="rbnSpace" Text="Space" Checked="True"
GroupName="Prefix" Runat="Server" />
<asp:RadioButton Id="rbnTab" Text="Tab"
GroupName="Prefix" Runat="Server" />
</span>
<span style="background-color:LightBlue;">
Prefix Count:
<asp:TextBox Runat="Server" Id="tbxLevel" Text="1" Columns="2" MaxLength="1" />
</span>
<hr />
<div>
<asp:TextBox Runat="Server" Id="tbxInput" Wrap="False"
TextMode="MultiLine" Columns="80" Rows="10" />
<br />
<asp:TextBox Runat="Server" Id="tbxOutput" ReadOnly="True" Wrap="False"
TextMode="MultiLine" BackColor="LightBlue" Columns="80" Rows="10" />
</div>
</form>
</body>
</html>
以及對應的後台 C# 代碼 CodeFormat.aspx.cs:
1: using System;
2: using System.IO;
3: using System.Web;
4: using System.Web.UI;
5: using System.Web.UI.WebControls;
6: using Skyiv.Utils;
7:
8: namespace Skyiv.Ben.Web
9: {
10: public class CodeFormatPage : Page
11: {
12: protected TextBox tbxInput;
13: protected TextBox tbxOutput;
14: protected TextBox tbxLevel;
15: protected CheckBox chkLineCount;
16: protected RadioButton rbnTab;
17:
18: protected void Page_Load(object sender, EventArgs e)
19: {
20: tbxOutput.Text = string.Format(" OS: {1} ({2}-bit){0}CLR: {3}",
21: Environment.NewLine, Environment.OSVersion,
22: Environment.Is64BitOperatingSystem ? 64 : 32,
23: Environment.Version);
24: }
25:
26: protected void Submit(object sender, EventArgs e)
27: {
28: var writer = new StringWriter();
29: new CodeFormat(new StringReader(tbxInput.Text),
30: writer).Run(chkLineCount.Checked, rbnTab.Checked, GetLevel(tbxLevel.Text));
31: tbxOutput.Text = writer.ToString();
32: }
33:
34: int GetLevel(string str)
35: {
36: int n;
37: if (!int.TryParse(str, out n)) n = 1;
38: return Math.Min(5, Math.Max(0, n));
39: }
40: }
41: }
上述程序中:
第 34 至 39 行的 GetLevel 方法讀取 Prefix Count 文本框中的縮進層次,返回結果限制在 0 到 5 之間。
第 26 至 32 行的 Submit 方法在 Web 頁面中的 Submit 按鈕被點擊時被調用。
第 29 至 30 行調用 CodeFormat 類的 Run 方法對程序代碼進行格式化(加行號、行首空格等)。
下面就是 CodeFormat 類的源程序代碼 CodeFormat.cs:
1: using System;
2: using System.IO;
3: using System.Collections.Generic;
4:
5: namespace Skyiv.Utils
6: {
7: sealed class CodeFormat
8: {
9: TextReader reader;
10: TextWriter writer;
11:
12: public CodeFormat(TextReader reader, TextWriter writer)
13: {
14: this.reader = reader;
15: this.writer = writer;
16: }
17:
18: public void Run(bool hasCount, bool isTab, int level)
19: {
20: Write(Read(), hasCount, isTab, level);
21: }
22:
23: List<string> Read()
24: {
25: var lines = new List<string>();
26: for (string s; (s = reader.ReadLine()) != null; ) lines.Add(s);
27: return lines;
28: }
29:
30: void Write(List<string> lines, bool hasCount, bool isTab, int level)
31: {
32: var prefix = "".PadLeft((isTab ? 1 : 4) * level, isTab ? '\t' : ' ');
33: var format = "{0}" + (hasCount ? "{1," +
34: lines.Count.ToString().Length + "}: " : "") + "{2}";
35: var count = 0;
36: foreach (var line in lines)
37: writer.WriteLine(format, prefix, ++count, line);
38: }
39: }
40: }
上述程序中:
第 9 至 10 行的 TextReader 和 TextWriter 分別用於讀取數據和輸出格式化後的結果,這兩個類是抽象基類。
在這個網站中,是使用 StringReader 和 StringWriter 派生類,對應於 Web 頁面的 tbxInput 和 tbxOutput 文本框。
如果使用 StreamReader 和 StreamWriter 派生類,就可以從輸入流讀取數據,寫到輸出流中。
如果使用 Console.In 和 Console.Out,就可以從標准輸入讀取數據,寫到標准輸出。
第 23 至 28 行的 Read 方法讀取數據到內存的 List<string> 數據結構中。
第 30 至 38 行的 Writer 方法將內存中的數據格式化後寫出去。
第 32 行根據 isTab 和 level 參數決定程序代碼數據每行的前綴。
第 33 至 34 行根據 hasCount 參數決定行號的內容。
第 34 行的 lines.Count.ToString().Length 是行號所佔的寬度。
第 36 至 37 行的循環逐行格式化數據。
最後是 Makefile:
CSC = dmcs
DLL1 = -r:System.Web.dll
../bin/CodeFormat.dll: CodeFormat.aspx.cs CodeFormat.cs
$(CSC) -out:$@ -t:library $(DLL1) CodeFormat.aspx.cs CodeFormat.cs
有了上面的源程序後,執行 make 命令編譯整個網站:
src$ make
dmcs -out:../bin/CodeFormat.dll -t:library -r:System.Web.dll CodeFormat.aspx.cs CodeFormat.cs
這就大功告成了。
『陸』 為什麼圖靈社區刮刮卡無效
這個的話,因為沒有中獎,所以是無效的
『柒』 圖靈社區 閱讀 怎樣在 Markdown 中使用數學公式
行內公式示例:Riemann_zeta,這個公式就是黎曼 zeta 函數(Riemann zeta function)。再來一個公式:pi/4,這個公式是 John Machin 於 1706 年發現的。要注意的是,這三個行內公式(前面的單個希臘字母 ζ 也是行內公式)都在公式的最開頭使用了 \textstyle 命令,使得公式按照文本行公式中的字體大小來排版,同時也改變了公式中求和限的排版方式。
『捌』 圖靈社區 閱讀 世界上最聰明的人都在做什麼
作繭自縛
『玖』 圖靈社區 閱讀 如何更好地讀懂Head First C這本書
1.最簡單的方法:
public static String reverse1(String str)
{
return new StringBuffer(str).reverse().toString();
}
2.最常用的方法:
public static String reverse3(String s)
{
char[] array = s.toCharArray();
String reverse = ""; //注意這是空串,不是null
for (int i = array.length - 1; i >= 0; i--)
reverse += array[i];
return reverse;
}
3.常用方法的變形:
public static String reverse2(String s)
{
int length = s.length();
String reverse = ""; //注意這是空串,不是null
for (int i = 0; i < length; i++)
reverse = s.charAt(i) + reverse;//在字元串前面連接, 而非常見的後面
return reverse;
}
4.C語言中常用的方法:
public static String reverse5(String orig)
{
char[] s = orig.toCharArray();
int n = s.length - 1;
int halfLength = n / 2;
for (int i = 0; i <= halfLength; i++) {
char temp = s[i];
s[i] = s[n - i];
s[n - i] = temp;
}
return new String(s); //知道 char數組和String相互轉化
}
『拾』 圖靈社區 沒kindle怎麼辦
可以用郵箱推送至手機或平板查看,mboi格式文件不止kindle電子書能閱讀,手機靜讀天下專業版APP也能夠閱讀。
首先在圖靈社區「個人信息」一欄中填寫您的「推送郵箱」。注意,現在只能填寫普通郵箱,無法支持kindle郵箱。
網頁右上角「我的空間」。

然後在郵箱頁面下載後用靜讀天下app進行閱讀。
靜讀天下功能特點:
1.實現真正的平滑滾動,擁有多個在線書庫。
2.支持四十多種編碼,三十多種外掛字體。
3.支持五種自動滾屏方案,並可實時調節。
4.智能排版,首行縮進,裁剪多餘空行。
5.支持的閱讀文檔具體格式:txt,html,epub,mobi,fb2,umd,chm,cbr,cbz,rar,zip,OPDS。