[Go]取得實體網卡的IPv4網路遮罩(Get device network mask)

##前言 最近在研究一些Golang在UDP上的處理,主要是要抓取網路遮罩(network mask)做一些進階使用.就發現要取得正確的網路遮罩,其實是蠻困難的.由於是無法直接使用到裝置上面的網卡設定. 這邊介紹一下相關的流程: ###先來抓取IPv4 這邊先顯示抓取IP的方式: func GetIP() net.IP { ifaces, err := net.Interfaces() // handle err if err != nil { log.Println("No network:", err) return nil } for _, i := range ifaces { //只抓取網路卡名稱為"en0", "en1"... if strings.Contains(i.Name, "en") { addrs, err := i.Addrs() // handle err if err != nil { log.Println("No IP:", err) return nil } for _, addr := range addrs { var ip net.IP switch v := addr.(type) { case *net.IPNet: log.Println("IPNET") ip = v.IP case *net.IPAddr: log.Println("IPAddr") ip = v.IP } //這裡會抓取兩種IP,分別是IPv4與IPv6 if ip[0] == 0 { //第一個byte是0為IPv4 log.Println("Get device:", i.Name) return ip } } } } return nil } 透過這個方式可以列舉所有的網路卡並且把第一張具有IPv4資料的net.IP傳回來. ###再來找Network Mask 其實透過官方的API,原本就有一個IP.DefaultMask()的函式可以使用.不過抓來的Network Mask是透過計算而來的,而不是跟網卡拿的.透過以下的範例: package main import ( "fmt" "net" ) func main() { addr := net.ParseIP("192.168.1.1") mask := addr.DefaultMask() fmt.Printf("Address : %s \n Network : %s \n", addr.String(), mask) //Mask 255, 255, 255, 0 addr = net.ParseIP("172.16.110.123") mask = addr.DefaultMask() fmt.Printf("Address :...
繼續閱讀

程式設計週記[2016/01/08]: 再爛的政局也要去投票,再糟的架構也要寫測試

(image from twitter) 這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 本週摘要 本週想研究iOT傳輸協定中使用UDP的CoAP(Constrained Application Protocol),看了挺久的RFC還是沒有很了解.先寫一些簡單的應用來試著了解. iOS/MacOSX iOS崩溃调试的使用和技巧总结 如何來抓取iOS App crash log? 這裡有三個建議方式: 使用第三方的Crash log ( 這裡是講百度) 自己寫crash log然後上傳server XCode-Device裡面查看(如果機器在你那邊) 使用Apple Xcode自帶功能 Window->Organizer->Crashes Python 透過IDAPython 反組譯Python 一連有三部曲教學,主要是教導如何查看變數與斷點偵錯. Go mission-liao/dingo: An easy-to-use, distributed, extensible task/job queue framework for #golang ss rakyll/gom: A visual interface to work with runtime profiling data for Go 這是透過Golang自薦的profiling tool pprof來呈現的輕量化UI.當然Dave Cheney也寫了一個profile. davecheney/profile: A simple profiling support package for Go Dave Cheney寫得,將pprof簡單化的函式. mission-liao/dingo: An easy-to-use, distributed, extensible task/job queue framework for #golang 這個task/job queue library提供許多進階的功能: Two-way binding Distributed Task Framework Stateful Worker Functions dustin/go-humanize: Go Humans! (formatters for units to human friendly sizes) 算是一個helper,可以幫你把許多資料格式轉換的鄉黨的人性化.ex: humanize.Bytes(82854982) //83MB humanize.Time(someTimeInstance) //3 days from now pubnative/mysqldriver-go: GC optimized MySQL driver 原本的Go build-in的MySQL driver由於使用到太多的heap會造成GC頻繁的產生,而這個是 GC optimized 過的 Golang MySQL driver,大量減少heap的產生,進而減少GC的發生次數.讓系統效能能夠更好. Heap size與Heap的使用率是GC發生的基本參數(參考這篇Go GC: Latency Problem Solved).雖然透過GOGC可以調整heap的數量(GOGC越高heap上限變得更高,但是記憶體更消耗.反之記憶體比較低,但是GC會很常發生.) 網路文章 区块链:比特币的灵魂,下一个风口 Block Chain一直就是Bitcoin最值錢的部分,慢慢的許多應用也會浮出來.最近比較紅的就是有人將Block Chain跟Application結合在一起,可以透過BitProof裡面的Block Chain來證明你就是該應用程式的創始人.這邊有更詳細的說明文章.當然也有IBM想透過Block Chain來達到Smart Contract的功能. “【簡報】《Final Fantasy Record Keeper》開發實務暨產品架構經驗分享” 由專業的電玩部落客”吹著魔笛的浮士德“介紹,有完整的中日文對整解釋.. 以下為簡單的心得: FFRK的架構為WebView +...
繼續閱讀

程式設計週記[2015/12/31]: The year of Go

這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 本週摘要 由於週五剛好是元旦,這個禮拜只有四天.剛好上週拿到了來自拍賣的Eddystone Beacon,就先玩了一下也順便把Eddystone Beacon Scanner寫好. 2016即將來臨,應該要給自己一些不同的期許與挑戰. iOS/MacOSX Flickr’s experience with iOS 9 Flickr在iOS9上的經驗談,想要用”Spotlight Search”, “Universal Links”, “Deep linking into the app” 跟”3D Touch”一定要仔細閱讀這一篇. Python python-cn/slack_bot: 立志成为一个可被调戏的Bot 這是一個Python Slack Bot的套件,從小黄鸡改過來.大部分資料都是從人人網過來,有電影資訊,美食資訊,地理資訊.新聞轉貼. djacobs/PyAPNs: Python library for interacting with the Apple Push Notification service (APNs) 透過Python來使用APNS(Apple Push Notification Services) Setting Up Sublime Text 3 for Full Stack Python Development 介紹不少好用的Sublime Text 3的package,透過這些package可以讓Sublime Text馬上變身成全端工程師的開發利器. 蠻基本的漣漪開始怎麼安裝Package Management都有教. Ruby Portus:CLAIM CONTROL OF YOUR DOCKER IMAGES 不想要使用公開的Docker Hub? 想要使用私有的Docker Registry.但是又怕無法有良好的權限控管與被人家修改你的Docker Registry? Suse提供一個良好的機制來管理,並且連網頁介面都有了. Go chai2010/tensorflow: tensorflow for Go tensorflow 的Golang wrapper dobyrch/termboy-go: Another Game Boy emulator for your terminal 可以在terminal上面玩GBA. 恩.. 你沒有看錯.. 是terminal不過可惜的是只有Linux可以用,還不支援Mac OSX.底層透過他自己寫的terminal display library: libtermboy與參考gba模擬器.另外一個terminal display library可以參考termUI,他是跨平台. “Handwritten Parsers & Lexers in Go” 這篇教學文章,首先先教導了在Parser裡面的一些基本概念,不論是Lexer或是AST.最後在教導如何寫出自己的Lexer跟Parser. 挺好的文章.簡單概念整理一下: 範例 SELECT * from Mytable 就是一個句子,如何把他掃成有意義的內容變成AST(Abstract Syntax Tree) 類似 Fileds []string 跟 table string. 首先要把句子透過Lexer Analysis也就是一個一個字掃描.並且將你需要的部份放入該AST裡面. Java/Android wasabeef/awesome-android-ui: A curated list of awesome Android UI/UX libraries 有著所有的Android UI Opensource List,並且還有圖片顯示.可以快速幫助你找到需要的library來用. Android Open Source...
繼續閱讀

程式設計週記[2015/12/25]: 聽說Swift很好玩.. 連我都忍不住想再學一次

某人的寶貝女兒設定檔 (Daughter YAML refer from Ansible) (pic from: https://twitter.com/chrisnuber/status/679069190377066497) 這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 本週摘要 Go 出了1.6 beta 1,讓大家在聖誕節感受到HTTP/2的威力.Swift持續在熱頭上,到處都是Swift的討論文章.程式語言的討論第一名也不是開玩笑的.本週開始想一些演算法與現實社會的應用,希望可以把之前寫過的專案來想想有沒有實作可以弄. iOS/MacOSX facebook/AsyncDisplayKit: Smooth asynchronous user interfaces for iOS apps. Facebook 出的可以讓你的App順暢的讀取一些遠端(或是比較需要時間的資料).由於是非同步,讀取到資料後會再回頭更新UI. Python 理解python中的装饰器(decorators) 介紹什麼是Python decorators與怎麼使用它,可以看看原文. An AI That Can Mimic Any Artist” 想不到機器學習引擎TensorFlow可以拿來做圖片的濾鏡效果.(內有Python Github) Go NYTimes/gizmo:A Microservice Toolkit from The New York Times gizmo 是什麼? gizmo是一個類似go-kit的微型服務的工具包.這一篇文章有解釋為何紐約時報需要建立自己的microservices的toolkit而不是使用go-kit. 稍微解釋一下go-kit,他提供了許多的小工具不論是斷路器(Circuit breaker)還是Rate limiter. 可以幫助你建立與管理Microserivces. “PHP7+Swoole比Nginx/Golang性能高75%” 測試方式挺受爭議,不過可以看看結果. RobotsAndPencils/buford: A push notification delivery engine for the new HTTP/2 APNS service. Go 1.6 beta 1 剛放上了 HTTP/2 馬上有人寫出搭配Apple更新的APNS services. RobotsAndPencils/marvin: Slack bot written in Go 用Go寫出的Slat bot,主要功能是列出Github上面的所有issue跟相關進度.如果用github來做專案管理或是開源專案的一定不要放過.還提供Heroku Deploy. ory-am/hydra: Run your own AWS-like identity & access management (IAM) service in less than 2 minutes. Written in Go. Backed by PostgreSQL. Built cloud native. 一個套件可以幫助你快速的建置出類似AWS的Identy & Access Services(IAM).資料庫使用PostgresSQL. 這是一個遠遠比起AWS IAM更輕量的服務,而且可以快速地部署出去.可以管理帳號與權限控管.對於網路服務提供商(SaaS or API Services provider)有著相當好的切入點. Java GovernmentCommunicationsHeadquarters/Gaffer: A large-scale graph database Gaffer是用Java寫出來的大型圖學資料庫(Graph Database),可用來分析不同資料之間的內部關係,相較於圖學處理系統(Graph Processing System),Gaffer特別優化了在特定節點上的資料檢索能力。使用者可以將資料整批上傳或是持續地將資料匯入,這個軟體有能力識別出大批電話記錄中的一組通話者是誰,或針對單一對象進行資料蒐集與分析,也可以透過API來進一步檢索或篩選出所需的資料。(摘自: IThome) A-Frame: Building blocks for the virtual reality web Mozilla出的framework,主要針對WebGL跟WebVR的部分.可以讓你的網站在瀏覽器上馬上看到3D效果(當然是指Firefox). SECCON...
繼續閱讀

[iOS] 把舊專案換到XCode7與iOS9上面會出現上下黑條(Application appears with black bars on top and bottom)

##問題: 主要是心血來潮把自己就的App”粉絲相簿“想拿出來改版(終於). 結果發現上下邊有黑條.這裡有個示意圖: 不過,我的App明明就是使用系統預設的UITableViewController,NavigationController跟UITabBar而已. 趕緊來找找解決方法. ##主要原因: 根據iOS 9 Xcode 7 - Application appears with black bars on top and bottom這邊的解答,是說由於你沒有” LaunchScreen.storyboard”在你的App,所以XCode會”預設”而把你的App變成比較能夠跑的狀況(類似iPhone4 App跑在 iPhone6 Plus一樣). 這樣其實很不好,因為有上下邊黑條還有擴大的效果. ##解決方式: 根據http://stackoverflow.com/a/32614526/1316907這邊的解釋,進行以下的方式可以解決這樣的問題: 更改”Launch Image Source” 成 “Brand Assets” 不過由於我還是有問題,我必須還要修改”Launch Screen File”成MainStoryBoard 這裡有個修改後示意圖: 打完收工,本來想加新功能,卻踩一堆舊Bug.不過這樣也學了一課.. 真棒… ##相關鏈結: iOS 9 Xcode 7 - Application appears with black bars on top and bottom iOS9 App has black bars on top and bottom UITableView under UINavigationBar with a black top background in IOS 9
繼續閱讀

程式設計週記[2015/12/18]:大家都是秋生萬

這是什麼? 程式週記主要內容如下: Gihub project 介紹: 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢 網路文章心得: 會寫些心得,強迫自己閱讀. “程式週記”並且定期週期性更新. 本週摘要 幾經思考決定(好像只是之前偷懶),決定把之前的“工作上的一些雜事筆記“改一下名字,並且持續努力的改成每週更新. 碎念一下: 其實之前停止是因為在忙著上coursera,不過我發現我既然還是都會寫一些twitter就應該要繼續更新我的部落格. 論壇與研討會 Container Summit 2015 所有的投影片都開放下載,點選文件就可以了. 這裡有rojerchen寫的心得 另外有Smalltown Tech Blog兩篇(上)(下) 網路文章 Why did Google open-source their core machine learning algorithms?: 大家都知道,Google在幾個禮拜前開源了自己的機器學習引擎(TensorFlow),讓人很想不通為何他們會把他們有價值(大家認為的)部分開源. 作者認為,其實沒有人能夠跟Google一樣去應用他,因為資料無法跟Google一樣. 這也帶來作者的新思維,演算法與程式碼或許以後不再是企業的秘方(配方),反而是使用者資料才是. 湾区日报是如何运作的 透過slack與hubot來控制電子報的文章整理與發送.. Slackbots: Landscape, opportunities and risks 最近由於有看到灣區日報公佈他們跟slackbot溝通(也就是slack+hubot)的流程.不少人討論所謂的chatDevOp.這篇有詳細提到一些機會與危機. [隨筆] The Three Laws of TDD-從紅燈變綠燈的過程 TDD三大法則: (1)先依照需求與情境寫出測試程式 (2)不要增加其他項目 (3) 修復這個測試程式的的錯誤(寫程式主體).. iOS/MacOSX “Xcode 7 Bitcode的工作流程及安全性评估”: 很好的教學.. 來了解xcode7 新功能 Bitcode,雖然面向是由駭客的角度來看安全性考量.但是會有更深層的了解. IBM出的Swift Sandbox 架在Bluemix上面,這個Swift Online Playground相當有用.手上需要測試小程式我就會拿來用. Python aws-shell: An integrated shell for working with the AWS CLI. AWS 的auto-complete shell,可以幫助你自動拼字一些指令. littleq0903/gcloud-zsh-completion: Z Shell auto completion for Google Cloud SDK 同場加映Colin Su的另外一套Auto complete寫在GCE上面. [Top 10 Python libraries of 2015 Tryolabs Blog](http://blog.tryolabs.com/2015/12/15/top-10-python-libraries-of-2015/) 2015十大受歡迎的Python Libraries: 第一名果然是jupyter Jupyter Notebook好專案分享(1): Kalman and Bayesian Filters in Python Jupyter Notebook好專案分享(2): Notebooks for “Python for Signal Processing” book Go dockersh: 把每一個登入使用者放入一個docker container內管理,避免傷害整個系統. google/git-appraise: Distributed code review system for Git repos Google 的分散式Code review系統,不過還不是很了解要怎麼使用它. gernest/hot: Hot golang templates 一些HTML template,已經套好可以給html/template使用. 一些網站 阿里巴巴前端team 部落格 少見看到用git issue 寫部落格,聽說不少大陸大企業的部落格都改成Git issue.可能的好處是因為有comment可以跟讀者溝通. “團隊成長書單與學習資源”...
繼續閱讀