Android 2.3 Gingerbread 薑餅人正式發布特點

gingerbread-ofc-1

終於Android 2.3已經釋出 -- 就是代號為薑餅人的最新Android版本

這版有幾項特點

  • 遊戲效能提升
  • 文字輸入有較佳的介面
  • 整合桌面VOIP技術(Google Talk)
  • 支援前端影像的影音通話
  • 剪貼功能強化
  • 整合支援近距離無線通訊NFC(Near Field Communication)
  • 支援陀螺儀感應器能判別更精確方位資料
  • 強化的下載管理員
  • 重新設計的支援多點觸控鍵盤
  • 整合的任務管理員
  • 更多影音編碼支援(VP8,WebM, AAC, AMR)

使用GAE寄信

方法一

寄送純文字信件

try {
    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress("admin@taicomjp.info", "admin"));
    msg.addRecipient(Message.RecipientType.TO,
                      new InternetAddress("admin@taicomjp.info", "Mr. Admin"));
    msg.setSubject("GAE Text Mail Example");
    msg.setText(本文內容\n換行);
    Transport.send(msg);
catch (AddressException e) {
    // ...
} catch (MessagingException e) {
    // ...
}
寄送HTML格式信件
try { 

    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress("admin@taicomjp.info", "admin"));
    msg.addRecipient(Message.RecipientType.TO,
                     new InternetAddress("admin@taicomjp.info", "Mr. Admin"));
    msg.setSubject("GAE HTML Mail Example");
    msg.setContent(本文內容<br>換行,"text/html; charset=UTF-8");
    Transport.send(msg);
} catch (AddressException e) {
    // ...
} catch (MessagingException e) {
    // ...
}

方法二-使用低階郵件API

MailService ms = MailServiceFactory.getMailService();
MailService.Message message = new MailService.Message();
try {
    message.setSender("admin@taicomjp.info");
    message.setTo("admin@taicomjp.info");
    message.setSubject("GAE Low Level Mail Example");
    message.setHtmlBody("本文內容<br>換行");
    message.setTextBody("本文內容\n換行");
    ms.send(message); } catch (Exception e) {
     e.printStackTrace(); }

Facebook臉書真面目

由台視國際熱線製作,社群網戰電影深入探討的內容,建議看過電影再看此影片。

 

Android 2.3 薑餅人(Gingerbread)

渴望支援特點
  • 修正前版作業系統臭蟲(Bug)
  • 取代Flash的開放原始碼影音編碼技術VP8
  • 強化廣告演算技術
  • 進階的導覽系統
  • 支援更多的HTML5或更高的標準技術規格
  • 影片直接內嵌網頁
  • 更智慧和更互動的使用者介面

Facebook「線上郵件」 無接縫式社群整合

Facebook今日正式公佈其「泰坦計畫 (Project Titan)」內容,執行長Mark Zuckerberg表示他們想打造的並不是「電子郵件」,而是更先進的線上「即時通訊」系統,更能整合無接縫式的社群聯絡,並保有其歷史追蹤功能。

(圖/擷自TechCrunch網站)

Zuckerberg首先提到先前在學校使用電子郵件的經驗,認為電子郵件的特性便在於太慢、過於制式化,而且充斥著過多氾濫而無實質用處的訊息 (諸如廣告)。他也提到目前幾乎高年級的學生都偏好使用簡訊 (SMS),或者是透過線上通訊軟體 (Messenger)進行聯絡。

而目前Facebook總計約有5億人多的使用數量 (人數持續增長中,相關統計數據可參考參考這邊),其中每天大約會有約3.5億人傳遞高達4億筆的訊息量,因此Zuckerberg想出一種新的方式,可讓訊息傳遞更加無縫隙、訊息度更高、精簡短小且具備個人化管理的特性,同時能更快傳遞訊息內容。

Facebook此次所提出的「電子郵件」概念包含三個部份,分別是:

.無接縫訊息

使用者可透過各種不同方式進行交談,同時並不僅限制於電子郵件,可能包含線上即時通訊軟體或手機簡訊等介面。

.交談歷史紀錄

提供固定欄位可顯示過去的交談紀錄。

.社群郵件信箱 (Social Inbox)

這項功能可藉由結合個人線上社群資訊達成「最真實的」郵件分類,諸如分辨信件是否為垃圾信,或者是區分朋友或親人所寄來的信件內容。

(圖/擷自TechCrunch網站)

Facebook產品經理Andrew Bosworth在現場也分別以e-mail、簡訊以及線上通訊等不同形式示範訊息傳遞,並且示範交談歷史紀錄將會如何整合顯示,同時現場也展示「Social Inbox」將如何把「信件」訊息分類至內建三組收件匣裡 (分別為「訊息」、「其他」以及「垃圾信件」)。

另外,Bosworth在現場也透露相關iPhone平台的App,並表示很快就會在蘋果App Store上線。而Bosworth也表示,使用者可以申請註冊一組以「xxx@facebook.com」為名稱的電子郵件,但若透過任何其他的電子郵件也一樣能使用Facebook此項功能。另外,Facebook郵件功能也支援IMAP協定使用

不過,Facebook此項服務恐怕暫時還不會太快上線,估計將在幾個月之後會整合上線,目前僅接受用戶邀請使用。而此項服務初步將只針對純文字訊息為主,但之後也將會考慮加入VoIP語音通訊內容。

Facebook執行長Zuckerberg在結尾時再次強調:他們並非是要打造一組「Gmail殺手」,而是嘗試推出一種全新的訊息傳遞方式,並且進一步將電子郵件推向無縫隙且簡單的訊息整合。

而Zuckerberg同時也認為Gmail (或泛指現行電子郵件系統)是一項相當好的產品,但現行廣泛使用的人卻是越來越少 (除了工作需求),他進一步指出電子郵件與簡訊或即時訊息之間的效率差異,並表示Facebook希望帶給使用者更快且完整的訊息傳遞模式。

※相關連結》

‧Facebook「線上郵件」 無接縫式社群整合
‧Facebook官方網站
‧Facebook's Modern Messaging System: Seamless, History, And A Social Inbox (TechCrunch網站)
‧「泰坦計畫」 Facebook將推線上郵件服務

電影 社群網戰 (The Social Network)

the-social-network-520

全世界每14個人就有一個人玩Facebook,一部全球五億人都說讚的電影,由大衛芬奇 (David Fincher) 導演,描述臉書 (Facebook) CEO及創辦人Mark Zuckerberg 開創臉書的電影,在 IMBD網站爛番茄網站皆得到極高的評價,已經是奧斯卡最佳影片的大熱門,年輕男星傑西艾森柏(Jesse Eisenberg)飾演馬克,美國歌壇小天王賈斯汀(Justin Timberlake)飾演音樂下載網站Napster創辦人(Sean Parker),另外「蜘蛛人4」安德魯加菲爾德(Andrew Garfield)飾演Facebook合夥創辦人Eduardo Saverin、好萊塢版「龍紋身的女孩」魯妮瑪拉(Rooney Mara)飾演Mark Zuckerberg 的女友Erica Albright

 

以下附上中文電影預告,台灣預11月5日(五) 上映

 

中文官方網站

官方網站

IP Range To CIDR

輸入IP範圍取得CIDR

public static List<String> range2cidrlist( String startIp, String endIp )
    {
        long start = ipToLong(startIp);
        long end = ipToLong(endIp);

        ArrayList<String> pairs = new ArrayList<String>();
        while ( end >= start )
        {
            byte maxsize = 32;
            while ( maxsize > 0)
            {
                long mask = CIDR2MASK[ maxsize -1 ];
                long maskedBase = start & mask;
                if ( maskedBase != start )
                {
                    break;
                }
                maxsize--;
            }

            double x = Math.log( end - start + 1) / Math.log( 2 );
            byte maxdiff = (byte)( 32 - Math.floor( x ) );
            if ( maxsize < maxdiff)
            {
                maxsize = maxdiff;
            }
            String ip = longToIP(start);
            pairs.add( ip+ "/" +maxsize );
            start += Math.pow( 2, (32 - maxsize) );
        }
        return pairs;
    }

    public static final int[] CIDR2MASK = new int[] { 0x00000000, 0x80000000,
            0xC0000000, 0xE0000000, 0xF0000000, 0xF8000000, 0xFC000000,
            0xFE000000, 0xFF000000, 0xFF800000, 0xFFC00000, 0xFFE00000,
            0xFFF00000, 0xFFF80000, 0xFFFC0000, 0xFFFE0000, 0xFFFF0000,
            0xFFFF8000, 0xFFFFC000, 0xFFFFE000, 0xFFFFF000, 0xFFFFF800,
            0xFFFFFC00, 0xFFFFFE00, 0xFFFFFF00, 0xFFFFFF80, 0xFFFFFFC0,
            0xFFFFFFE0, 0xFFFFFFF0, 0xFFFFFFF8, 0xFFFFFFFC, 0xFFFFFFFE,
            0xFFFFFFFF };

    private static long ipToLong(String strIP) {
        long[] ip = new long[4];
        String[] ipSec = strIP.split("\\.");
        for (int k = 0; k < 4; k++) {
            ip[k] = Long.valueOf(ipSec[k]);
        }
        return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
    }

    private static String longToIP(long longIP) {
        StringBuffer sb = new StringBuffer("");
        sb.append(String.valueOf(longIP >>> 24));
        sb.append(".");
        sb.append(String.valueOf((longIP & 0x00FFFFFF) >>> 16));
        sb.append(".");
        sb.append(String.valueOf((longIP & 0x0000FFFF) >>> 8));
        sb.append(".");
        sb.append(String.valueOf(longIP & 0x000000FF));
        sb.append(".");
        return sb.toString();
    }