2014年3月3日

[訊真科技技術園地] 你看 YouTube,Google 幫你付上網資費?AT&T 大膽推出 “Sponsored Data” 計畫

就像中華電信和Line的關係,也是最近很熱門的應用。

http://www.theverge.com/2014/1/6/5279894/at-t-announces-net-neutrality-baiting-sponsored-data-mobile-plans

-------------------------------------------------------------------------------------------------------------------
文章轉自 http://mmdays.com/2014/01/07/at-t-sponsored-data/
AT&T 在今年的 CES 大展上,發表了一個嚇人的計畫:Sponsored Data
可曾想過當你看 YouTube 的時候,你的網路流量費是由 Google 來幫你付給電信業者?是的,Sponsored Data 就是這樣的一個計畫,AT&T 推出這個計畫的目的,就是讓網路服務業者 (像是 Google、Facebook、Netflix 等等) 可以「幫客人買單」:你上這些網站用掉的網路流量,將由這些網站的業者來幫你跟電信業者買單。
聽起來是個理想的世界,AT&T 也宣稱這是「顧客」和「企業」雙贏的一個方案。但是實際上,這個舉動可能會對網路產業造成深遠的影響,而且,可能是負面的影響。
Google 和 Facebook 這些網路業者早就讓全世界的電信業者恨得牙癢癢,因為這些公司利用電信業者的頻寬,免費提供消費者各式各樣的影音和網路服務,耗費大量電信業者頻寬的成本,可是卻一毛錢都不用付給電信業者,是所謂的 OTT 模式,總而言之,就是讓這些網路業者用免錢的。所以各國電信業者無不絞盡腦汁,想要幹這些網路業者的拐子,Google 至今還無法解決台灣使用者收看 YouTube 影片過於緩慢的問題,主因就是電信業者覺得自己從 YouTube 根本一毛錢都賺不到,卻要讓 Google 搭免費的頻寬列車,怎麼想都不划算,所以拐子一個接一個。
Google 也早就知道這件事情,知道自己的利益是和電信業者相衝突的,所以在世界各地也開始到處拉光纖,或是把熱氣球放到偏遠地區的上空、讓偏遠地區也可以無線上網,這些計畫的目的就是自己想要當電信業者,免得一再因為 OTT 的方式、被傳統的電信業者阻撓自己各項業務的發展。

[訊真科技技術園地] Git Branch 的操作與基本工作流程


關於Git Branch 的操作與基本工作流程,

這一系列是比較白話的解釋和指令使用的時機,甚至還有情境呢~!


Git branch

branch (分支)應該是 Git 最重要的技能了,在一個多人專案的開發過程中我們有時候要開發新功能,有時候是要修正某個Bug,有時候想要測試某個特異功能能不能 work ,這時候我們通常都會從主 branch 再開出一條新的 branch 來做,這支新開的 branch 會帶著你的主 branch 目前的最新狀態,當你完成你所要開發的新功能/ Bug 修正後確認沒問題就再把它 merge(合併)回主 Branch ,如此便完成了新功能的開發或是 Bug 的修正,因此每個人都可以從主 branch 拉一條新的 branch 來做自己想做的事,再來我們好好了解一下 branch 的使用。
了解 branch 最好的方法就是有圖像可以看,你可以用任何你已安裝的GUI來查看,但在你安裝 Git 的時候其實同時也安裝了最基本的 Git GUI 叫做 gitk,你可以使用 gitk --all 這個指令來呼叫他,此時你應該能看到以下的畫面:
gitk
點擊左上方區塊的 commit 節點你可以看到當次 commit 的詳細資料,例如作者以及他的更新記錄,但你會發現這時候終端機是無法輸入的,因此請你先關掉 gitk ,改打指令 gitk --all & 來讓 gitk 在背景執行。
git branch 這個指令可以列出所有的 branch 並告訴你目前正在哪個 branch:
$ git br
* master
  develop
  feature/test
上面的訊息告訴我們在這個 Git repository裡有3支 branch ,而你目前正在 master branch 上。假設我們現在要開一支新的 branch 叫做 cat ,使用 git branch 來幫助你開一支新的 branch
$ git branch cat
$ git branch
  cat
* master
上面我們開了一支新的 branch 叫做 cat ,使用 git branch 再查看一次發現已經多了這支新的 branch了,這時候你去查看你的 gitk 的圖像狀態會發現像下圖一樣,新的 branch cat 與 master 在同一條水平線上,表示目前他們的狀態是一模一樣的。
git branch
你應該也有發現,雖然我們建立了一個 cat 的 branch ,但其實我們所在的 branch 還是在 master branch,因此我們現在還需要切換過去,因此我們使用 git checkout 來切換:
$ git checkout cat
Switched to branch 'cat'
這樣就會從原本的 mater branch 切換到 cat branch 了。
接下來假設我正在 cat 這支 branch 做開發,因此新增一個檔案,加上一些內容,將它 add 到 stage 後再 commit 它。
$ vim lib/cat.rb
$ git status
# On branch cat
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#   lib/cat.rb
nothing added to commit but untracked files present (use "git add" to track)
$ git add lib/cat.rb
$ git commit -m "Add Cat.rb"
[cat ea7d309] Add Cat.rb
 1 files changed, 3 insertions(+), 0 deletions(-)
 create mode 100644 lib/cat.rb
cat branch
上面的流程你已經很熟悉了,接下來我們再切換到原本的 master branch ,這時候你會發現剛剛在 cat branch 新增的 cat.rb 檔案已經不見了。
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
master branch
Git 在我們切換 branch 的同時就會很聰明的會把我們的工作目錄更動成那個 branch 該有的狀態,如果你這時候切換到 GUI 去看,你會發現到與剛剛 cat 和 master branch 在同一條水平線上不同,cat branch現在已經比 master branch 再多出了一個 commit 的內容。
gitk
現在我在切換到 cat branch 去增加更多的內容,一樣再將它 add 到 stage 後,再 commit 它。
$ git checkout cat
Switched to branch 'cat'
$ mvim lib/cat.rb
$ git add lib/cat.rb
$ git commit -m "Add initializer"
[cat a3bce42] Add initializer
 1 files changed, 3 insertions(+), 1 deletions(-)
add initializer
切到 GUI 來看的話你會發現現在 cat 這支 branch 比 master branch 要在多上兩個 commit 的內容。
gitk

[訊真科技技術園地] GIT儲存檔案的方式:Git Pocket Guide




今天開會時提到,git儲存檔案的方式在這裡有比較詳盡的說明:

Every version of a file in Git is represented as a whole, with its own blob containing the file's complete contents. 
A fundamental design element of Git is that the object store uses content-based addressing. 
blob存的是整個檔案,但是它是 content-based addressing、也就是說,相同的檔案內容只會被儲存一次。

當前的檔案,如果有在之前的commit被儲存下來且沒有異動,那將不會儲存、而是指向先前commit時,該檔產生的SHA1 ID reference
詳參:
http://chimera.labs.oreilly.com/books/1230000000561/ch01.html#_object_ids_and_sha_1
--
The usefulness of hash-based object identifiers in Git depends on treating the SHA-1 hash of an object as unique; we assume that if two objects have the same SHA-1 fingerprint, then they are in fact the same object. From this property flow a number of key points:

Single-instance store......

|
|
|
ˇ
如何利用Dropbox將專案納入GIT版本控制

  1. switch to your working directory
  2. git init
  3. git add .
  4. use 'git status' to confirm the status
  5. git commit -m "init"
  6. use 'git status' to confirm the status
  7. switch to the dropbox folder, ex: cd ~/Dropbox/repos
  8. make a remote repo: mkdir _repositoryName.git
  9. git init --bare _repositoryName.git
  10. switch to your working directory
  11. git remote add origin _repositoryPath, ex: /home/erica/Dropbox/repos/repositoryName.git
  12. git push origin master
and if you want to checkout the project: git clone _repositoryPath _projectname

[訊真科技技術園地] New Java Time (Java8 SE)


分享一下最近看過的文章

New Java Time (Java8 SE)
http://ingramchen.io/blog/2014/02/brand-new-java-time.html


文章擷取

----------------------------------------------------------------------------------------------------------------

java.time.* API

首先來看 java.time 提供的新 API,它引進相當多的 class。好在常用的就只有幾個:LocalDateTimeInstantZoneOffsetClock。轉換的第一步驟是將過去使用 Date 物件的地方,都換成 LocalDate*,下面是一個常見的帳戶 entity:
public class Person {

  String name;
  LocalDate birthday;
  LocalDateTime createTime;
  LocalDateTime lastLoginTime;
  //你幾歲
  int age(LocalDate refDate) {
    return Period.between(birthday, refDate).getYears();
  }
  //生日到了沒?
  boolean isBirthday(MonthDay refDay) {
    return MonthDay.from(birthday).equals(refDay);
  }
  //距上次登入已經過了幾天
  long lastLoginDaySince(LocalDateTime refTime) {
    return Duration.between(lastLoginTime, refTime).toDays();
  }
}

//測試
@Test
public void variousDate() {
  LocalDate birthday = LocalDate.of(1985, 3, 16);
  LocalDateTime createTime = LocalDateTime.of(2014, 2, 3, 5, 0);
  LocalDateTime lastLoginTime = LocalDateTime.of(2014, 2, 7, 19, 11);
  Person person = new Person("Ingram", 
      birthday, createTime, lastLoginTime);

  LocalDate today = LocalDate.of(2014, 2, 28);
  assertEquals(28, person.age(today));
  assertTrue(person.isBirthday(MonthDay.of(3, 16)));
  LocalDateTime now = LocalDateTime.of(today, LocalTime.of(14, 51));
  assertEquals(20, person.lastLoginDaySince(now));
}



2014年3月2日

[訊真科技技術園地] GitHub新推出的程式編輯器

Dear all,

分享一些技術相關的資訊。

GitHub近日推出的一款程式編輯器,目前正在封測。

他宣稱是一款不同凡響的產品,希望改善舊有編輯器對初學者不友善的缺點,
「讓小學生從第一天開始學習程式到變成超強駭客時都能使用的編輯器」。

有Mac的朋友可以先下載試用。   https://atom.io/



2014年1月29日

又一篇炫耀文:尾牙之後的訊真流水席


訊真科技的優良傳統之一,乃是尾牙抽到大獎的幸運捧油們會自動自發的掏錢出來請公司同仁吃吃喝喝,今年也不例外。  謝謝各位大德的愛心和慈善心,也謝謝福委W哥的辛苦籌畫~~~

話不多說,以下就用圖片來向大家說明當日盛況吧    可惜小編這次沒有跟到 (咬手帕)

這是開席前的某一角

 





天兒啊~~~ 連續吃了那麼多天流水席,這些人怎麼都還吃得下去啊??  


宴會中最不可或缺的東西 ---- 呼乾啦~~~


喝酒之後寫code好像會變得更厲害??   (完全是錯覺)
 


賭性堅強的賭徒們在酒精的催化下漸漸露出了可愛的真面目~~  (原來是老闆帶頭 XD)
 


看到這幾張圖片讓小編不勝唏噓,感慨果然進訊真只有兩條路:一是發胖,二是瘦不下來
  (這樣會不會嚇到人?  小編開玩笑的啦,你看大家都那麼苗條是吧?!)

號外號外:年後還是有下午茶可以吃啊~~~

運動社團廣告文:減肥跑步團要開團啦!!!


2013年12月24日

聖誕夜前戲之下午茶

20131224 聖誕夜前戲之下午茶

在訊真工作的眾多好處之一就是員工是絕對不會被餓到

那天 R大 興緻沖沖的跑來問我要不要去吃蛋糕,我說「好啊,當然沒問題,哪來免費的蛋糕」「不用管,吃就對了!」

我們搭電梯上樓後,發現是高級的巧克力蛋糕跟起士蛋糕。
沒錯,在這聖誕節前一天,公司優秀的行政團隊為了體諒員工的辛勞,特別幫我們準備了下午茶甜點,讓寫 Code 之餘還可以順便訓練身形讓體型圓滿... orz  

於是這聖誕夜的前一天下午就在這愉快的心情中渡過。