【太閣x周刊】第十一期:紐約線下活動預告、技術討論群熱點話題、Scala中的Typeclass模式實例、人氣文章

前言

太閣x是基於太閣實驗室(Bittiger.io)的程序員學習社群。我們在太閣x中踐行生長學習法。藏寶閣提供豐富的學習資源。我們根據目標,篩選藏寶閣內的知識及技能,形成以問題為導向的邏輯樹。接著我們通過互相講解決問題,查漏補缺,相互促進。最後我們通過總結悟,提綱挈領,並把優質的內容輸出到藏寶閣里,以此循環。

在太閣x里,生長學習法的閉環無處不在,指引著程序員進階之路。

線下活動預告

6/29 線下活動: 求職專場活動內容:於6月29日(本周三),BitTiger將攜手燎原、Hired.com齊聚NYC,向各位程序猿/媛小夥伴帶來主題為「Resume & Interviewing Workshop」的線下活動,想獲得與導師一對一交流的機會嗎?詳情請點擊:【太閣x燎原】| 導師與你面對面——簡歷、面試技巧更上一層樓

6/29 線下活動: 娛樂專場活動內容:於7月2日(本周日),太閣x紐約與麓山書社將帶領大家一起前往中央公園大草坪,朋友之間一起野餐、桌游、以及多種戶外小遊戲。當程序員遇上書友,科技與文化的碰撞,總有一個對你胃口~別宅啦!快來一起享受夏日的熱情吧!詳情請點擊:【太閣x紐約】7月2日春末初夏野餐計劃

技術討論群動態

負責人: 凡齊總結: 小丸子 Jesse

本周VR/AR群討論熱點:Oculus屬VR還是AR:部分人認為Oculus屬於VR,部分人提出Oculus也可以是AR,安裝攝像頭把面前的景象拍下,與人工部分內容合成,或者knect。但是這和真正的AR還是不一樣,因為AR是要能夠看到真實世界景象的同時附上虛擬部分。

● Hololens:群里有些許小夥伴親身體驗了一下Hololens, air tap感覺需要適應一下,但是趣味十足。尤其是和VR比起來, 前者不受空間限制,行動更加自由,而且音響效果出色。之前也試過Vive和Oculus Rift,完全immersive的感覺也很棒。Oculus Rift可以連接Leap Motion,因此能達到一定的AR效果。這樣一來就相當於安裝了攝像頭可以看到周圍的環境,其中最神奇的是通過它能看到自己兩隻手的骨骼 (Leap Motion讀的是手,骨骼只是效果)。

● Leap Motion:version2的精準度和敏感度比version1高,但仍有進步空間。Leap提供了自己的library,抓、點、搖手之類手勢的都已經編寫好了,當然自己也可以加入自定義手勢。由於紅外線不能穿透手所以很難判定看不到的手指的變化。很多時候你覺得不準是因為姿勢不對,手指被擋住了,外紅線導致motion capture捕捉不到是一直存在的問題。

● 獨眼人士沒法用VR? :目前的VR設備基本上供用於兩隻眼睛。

● 能否track眼睛聚焦?:目前好像只有一家VR的startup, 在日本據說可以做eye tracking; 但市面上的做的都是焦距可調(「track眼睛聚焦」是指跟蹤視線的看到哪兒。「手動調節」是指調節近視和遠視。)

● Unity的code:論點在於其風格和IOS 開發的code很相似。群主說是非常像xcode,但是沒有xcode寫起來快。兩者思路是一樣的,都是為了簡化,xcode是為了強制少佔用手機內存和電量所以有delegate,unity是為了減少fps,這些思路都是硬體限制的。

● VR遊戲會讓人感到不適?:有人提出一些直接移植的遊戲會產生非常強烈的 motion sickness,那種眩暈感我認為是由於眼睛認為身體在移動,但是身體並沒有感到移動,出現了不一致的問題。所以VR遊戲設計必須考慮這點,現在比較舒服的都是不用玩家動,利用第三人稱視角進行操作的遊戲。

● 有沒有把VR用於寫代碼的?:有人在VR里的可視化編程體驗過,比較直觀,但是感覺空間不夠大。其實可視化編程是很多軟體都在做的事情,建築學領域內前幾年有一個名為grasshopper的軟體火了一下就是因為是圖形編程,unreal裡面也同樣如此,就像插積木一樣,音樂領域也有好多,就是一個一個的合成器,或者效果器。

● 關於Loading 3d models, such as obj files的建議:模型可以轉成純text的,只要加一個texture圖片就行。寫ios的app試過,網上有專門的程序做這一步,就是把所有vertex的信息轉成點,展開,再貼一個texture map。

本周Java Spring Web群討論熱點:1. 比較Mybatis, hibernate, Spring Data:●mybatis是ibatis第二代,比hibernate輕量,可以在mapper中定製sql,好優化控制,適合需求變動大的一般互聯網項目。阿里使用spring + mybatis。●hibernate適合企業項目,自動化程度高,支持緩存,兩級緩存不好調,不適合新人。hibernate這種比較成熟複雜的東西負面評價多是肯定的,因為用的多。輕而小的東西用的人就少,不代表沒有坑只是沒踩出來。●有人認為大多數人還沒用過spring data。●mybatis debug,log level降成trace拿到帶參數的query。hibernate有個參數show sql用log4j直接列印。

2. 初創公司很少用Java:●開發效率低,重(舉例,學習打war包很久,war更新需要重啟tomcat,互聯網灰度發布),不適合需求長改,java需要編譯,部署才能發布,適合長期複雜的業務邏輯。nodejs即寫即生效,php可以上線,還有python。●java優點:強類型,編譯語言,容易debug。java社區有活力,穩定長久。前端太瘋狂,換代太快。

3. Build Tools:●ant第一代(神難用),maven,gradle第二代。以前覺得微軟包管理是弱點,現在發現nuget不錯。●關於maven:maven上手難;maven神器,直接貼pom就能用了;maven配置挺高;每次去查最新版本號沒人吐槽么?●關於gradle:gradle也比較推薦,在spring 網站上有gradle的案例; gradle與maven差不多,但是感覺gradle搞複雜了,用不著動態功能。

4. Spring Framework:●可以從4.0或者4.2學起,3.x也沒問題,注意不要用xml config了。●spring用途:spring MVC和spring Security肯定只是做web, 但是IOC的用處還是比較廣的。●spring嚴格來說是一堆框架的集合,比如spring security,其實是買的別人家的然後自己拿來改的。●MVC: ORM表映射對象,DAO資料庫對話。

5. 前端和後端分界線在哪?只要是data-driven就是後端, after login, data-binding 還算前端。只要是瀏覽器處理的就是前端,伺服器處理的就是後端。比如模板引擎:雖然是列印html,但是它是伺服器輸出的,所以與其說它是看html,實則應該是後端。不僅僅是瀏覽器,在日常生活中,用戶可以看到的就是前端(可以是電冰箱,洗衣機,手機...),或者說server之前的都是前端。而如今觀念越來越模糊,主要原因在我看來是技術棧。現在前端也有前端的 MVC 結構。以前粗俗的說 java就是後端 js就是前端,現在js已經進軍後端了。

本周Full Stack群討論熱點:●請問大家有沒有什麼學習理解session,local storage,cookie,authentication的資源?session和cookie我覺得跟編程本身沒什麼緊密關係。不過要學的話可以看看jsp/servlet,有幾章專門介紹了以上概念,其中包括了怎樣用文件系統寫cookie,不過是java web的。如果只是想理解,網上查查文章就夠了。(噓,跟前台的人提jsp會被當成古董的。但是我還是想說。不管怎樣,模板引擎有時候真的很好用。)

現在的項目用JQ,不用模板引擎我就得拿到ajax response之後把數據打包成DOM然後插到節點裡去。用模板引擎後端直接列印網頁出來,而且可以通過java傳出來的一些flag各種動態改界面。

●討論rest soap——Spring MVC是不是直接返回htmlView層可以是html也可以是別的。現在基本都是serve REST response用ResponseBody來返回一個AjaxResponse。這個wsdl就是那個xml啦,現在一般都有現成的soap client來consume可以理解這個就是api的documentation。如果要是工作需要可以學習下soap,不然的話個人感覺並沒有太大必要, Soap is more secure。

博客小組動態

Scala中的Typeclass模式實例作者:DYTypeclasses,(或者 type classes) 模式源自Haskell, 但是在Scala語言中得到了廣泛應用並發揚光大。

What is a type class and why do we need it ?Type classes are useful to solve several fundamental challenges in software engineering and programming languages. In particular type classes support retroactive extension: the ability to extend existing software modules with new functionality without needing to touch or re-compile the original source. [1]

在Scala 包中已經包含了幾個由typeclasses實現的包,這包括scala.math.Numeric 跟 scala.math.Ordering。 但是在ScalaZ的中,所有的library都是基於typeclasses實現的。Scala中使用traits和 implicits 可以實現typeclasses模式。 與Haskell相比,Scala中typeclasses的實現雖然繁瑣一些,但同時也帶來了極大的靈活性。在Haskell中只允許單一typeclasses實例化的全局創建,然而在Scala中幾乎可以不束縛於創建數量的限制。此外,在Scala中如果在上下文中找不到合適的typeclasses的實現,也可以指定默認的實現。我們通過下文的例子來看下Scala中如何實現typeclasses的模式。

Show me the Code!

首先我們來定義一個叫Transformer的單例對象,並且給這個Transformer類添加一個T => R的方法叫transform。

其次,我們要實現下transform的具體方法, 例如我們想完成一個從Int => String的轉換, 這時我們可以通過implicit關鍵字來定義隱身轉換的方法。

如果你僅僅認為typeclasses模式只能做單一類型的轉換那就錯了, 我們同樣可以做容器類型的轉換。舉個例子,還是根據上文給的例子我們想做List[T] => String的轉換, 為了做這個容器List[T] 到String的轉換, 我們還需要一個從T => String的轉換。同樣,我們可以通過定義我們的隱式轉換來實現:

如何理解上文中的代碼呢? 首先我們用implicit定義了一個隱式轉換的方法叫ListToStringTransformer[T],同時,作為傳入參數tToString, 也需要定義一個隱式轉換類型Transformer[T, String]。 這樣做的好處就是,你的參數可以不用顯示的指明來傳入,Scala的compiler會去自動搜索你的上下文找到相對應的這個類型的參數。 最後,我們在ListToStringTransformer中需要具體的實例化我們傳入的的Tranformer類,並複寫transform方法。接下來,我們要使用下我們之前定義的Transform typeclasses。我們可以通過定義一個Transform trait來實現。trait的命名完全等同於我們之前定義的typeclasses Transform。

上圖中的trait的transform方法中,有兩個傳入參數, 第一個傳入參數為t,其類型為T。 可以顯示的聲明傳入; 第二個傳入參數是被implicit修飾的transformer,其類型為Transformer[T,R],而這個transformer參數被隱式傳入。 當這個方法被調用時, Scala的編譯器會根據你第一個傳入的數據類型為T的t,結合從上下文找到相應類型為T的transformer來調用, 也就是用來調用相應的transformer.transform(t)方法。

最後我們來調用下我們定義的typeclasses, 通過以下示例:

從Boolean => String的轉換,

總結:我們在定義typeclasses的時候要注意到3部分:●首先定義type class本身, 是個generic的trait.●我們需要實例化我們想要實現的具體類型●我們同時也要定義一個或多個的介面方法來實現(這裡的介面方法可以定義到object中)

參考:"Type Classes as Objects and Implicits"; Bruno C. d. S. Oliveira, Adriaan Moors, Martin Odersky

人氣文章回顧

●那些年不容錯過的矽谷IT公司(一)●那些年不容錯過的矽谷IT公司(二)●那些年不容錯過的矽谷IT公司(三)●那些年不容錯過的矽谷IT公司(四)●搜索引擎原理掃盲●論MongoDB和MySQL的區別

太閣x小組動態播報

負責人:Jerry Yang、EK 、凡齊

太閣x微項目】動態更新

●"熱辣七月"火熱報名中:下周報名截止,想要參加項目的同學請抓緊時間報名!詳情請參考:bittiger.io/blog/post/z

●"殘酷六月"小組最新進展,請關注我們每周動態博客:bittiger.io/blog/post/y

●"Kaggle(F7)"六月份太閣kaggle項目在報名結束之後,甄選出了20位成員,並按照項目意願分為了5個項目小組。目前Haiyang Qi小組已經討論完大體想法,並纂寫了初步的Code,進行了第一次提交答案測試。接下來的任務是討論具體調參和Feature修正,使結果更好。Keran Chen小組的項目也已經開始啦!小組成員們準備用卷積神經網路,目前正在處理數據階段。他們也正在考慮怎麼樣把數據處理到可以直接用keras,總體來說進展順利。Qiu Zezhen小組的項目同樣在積極準備之中。

太閣極客榜

負責人:文哲

太閣極客榜本周風雲人物隆重揭榜 —— aaronice!

aaronice是太閣GitHub社區的領軍人物,曾帶領完成我們的明星項目美食爬蟲Pikachu。目前aarronice在洛杉磯地區從事JavaScript全棧開發,對Node.js造詣頗深。

如果對aaronice的項目感興趣,可以到Ta的GitHub去follow,或者為Ta的項目點個贊哦~

aarronice的GitHub:github.com/aaronice太閣極客榜:https://bittiger-ranking.firebaseapp.com

本文作者:大白柱,mimi,更多內容,請訪問:BitTiger.io, 掃描下面二維碼,關注微信公眾賬號「論碼農的自我修養」


推薦閱讀:

提議:在Dotty 中使用縮進語法
Stack monads in Scala
Scala快速入門-6-單例對象及伴生對象
究竟使用什麼語言去計算?
又是一道入群題(Scala)

TAG:周刊 | 线下活动 | Scala |