顯示具有 IT 標籤的文章。 顯示所有文章
顯示具有 IT 標籤的文章。 顯示所有文章

2017-12-28

用AI向經典StarCraft致敬: 安裝建置Deepmind pysc2


好久沒寫文啦,歲末年終,照慣例總要寫個文來收個尾,今天讓7年級頭的在下用AI向經典的PC即時對戰遊戲Startcraft星海爭霸致敬。

暨Deepmind研發的Alpha GO在圍棋領域大敗人類後,現在他們要向即時戰略進軍啦。雖然個人是不太看好能在近年就有所突破,畢竟兩款Game在本質複雜度就不是同個檔次,但這不是本文討論範圍。大概是今年五月就有發出消息,然後Deepmind八月釋出pysc2的操作tool開源專案連結在此。

pysc2是暴雪跟Deepmind兩間公司合作的開源API,用來操作模擬人類操作Starcraft這款遊戲,看到py就知道這是用python寫的小工具,sc2就是目前只支援starcraft 2(可是我只會玩一代,泣),以下是安裝建置Deepmind pysc2說明。

[系統環境]

  • Windows 10(打遊戲方便...)
  • Blizzard Starcraft II,現在免費,要裝趕快~
  • Python 2.7+ 或 3.4+

[安裝步驟]

  • 首先安裝python環境,請自行搜尋python安裝檔.msi,我的版本是2.7.8
  • 然後去設定python的系統環境變數,請開啟控制台 => 系統 => 環境變數,新增 %PYTHON_HOME%,值應該是 C:/Python27;再來於 path 補上 ;%PYTHON_HOME。大致上就是一般補環境變數,方便 cmd 操作。這裡要注意的是,Windows 10似乎要重開機才會生效,倒是跟之前的版本設定後立即生效不一樣。
  • 再來裝一下pysc2,
    • 先下載src: $ git clone https://github.com/deepmind/pysc2.git
    • $ pip install pysc2
  • 再來要先抓地圖,否則工具跑不起來,放在 StarcraftII/Maps/ 資料夾中,沒有的話就自己建吧
[執行]
  • 執行Agent (default)
    • $python -m pysc2.bin.agent --map Simple64

2017-03-09

[砸七砸八] 遷移自建Docker私有庫 & 客製化公有庫Docker並納入私有庫

最近用了一些Dockerfile與docker的東西,快速筆記一下避免忘記:

[遷移自建docker registry]

  • 想自建docker registry(也就是docker image repository倉庫)自有庫,很簡單,直接到官方docker build一下就可以自建倉庫,略述。
  • 當自有庫運行一段時間,你在上面已經有了大量自建的docker image後,如果想要遷移,這時候你可以把整個registry做docker打包,然後tar起來並且壓縮,略述。
  • 接著把壓縮的registry tar用一般檔案搬移的方式mv/cp/scp/rsync到任何新的宿主機HOST上,把他解壓縮並docker run就可以繼續執行。
    • 參考指令(以下僅為範例指令,請依當下環境自行修改)。
    • #docker run -d -p 4000:5000 --restart=always --name registry-name -v 'pwd'/your-data:/var/lib/registry registry:version

  • 無網路問題,因為container共享HOST網路。

[客製化公有庫的Dockerfile & 納入私有庫]
  • 網路上很多公有庫的docker很好用,但總是需要客製化,無所謂,反正就是拿他的Dockerfile來修改。

  • 修改後重建指令
    • #docker build -t "sean/docker-image:v030901" .
  • 貼上自有庫registry認得的tag
    • #docker tag -f sean/docker-image:v030901 ${registry_ip:registry:port}/${project}/${docker-image-name}:${tag_version}
  • 上傳到自有庫方便自己使用,可以跟自己的CI/CD流程自動化串整
    • #docker push ${registry_ip:registry:port}/${project}/${docker-image-name}:${tag_version}

2016-08-11

使用Docker建置Spring Boot微服務


脅持著微服務架構盛行,Spring Boot 似乎也開展起不小的火紅之路,再搭配 Docker LXC容器技術,應該算是個很厲害的組合。

[環境]
  • Ubuntu 16.04 LTS 64 bits
  • Docker version 1.10.3
  • Java 8
  • Gradle 2.10
[建置步驟]
  • 請自行安裝Ubuntu 16.04,過程略。
  • 由於Ubuntu 16.04預設只有apt,習慣用apt-get的人可以自行安裝apt-get
    • #sudo apt install apt-get
    • #sudo apt-get update
    • 安裝Gradle
      • #sudo apt-get install gradle
    • 安裝Docker
      • #sudo apt install docker.io
      • 安裝Git,並抓取放在Github上做好的gradle專案,看起來目錄如下圖
        • #sudo apt-get install git
        • #sudo git clone https://github.com/spring-guides/gs-spring-boot-docker.git
        • 為了避免我現在測試的 src 版本會跟撰寫這篇網誌有差異,我自己 fork 了一份在自己的 github 上:https://github.com/A-Ho/gs-spring-boot-docker

        • 由於下載的範例檔src/main/java/hello/Application.java

        2016-07-28

        [troubleshooting][visual studio][cordova] 解決Ripple模擬器排版異常問題

        Microsoft Visual Studio 2015 針對 Mobile APP 開發相當友善,近日用其 cordova 套件,覺得滿推薦各位使用。

        Ripple emulator 是個啟動速度非常快的網頁版 APP 模擬工具,除了手機才提供的功能(相機、GPS、訊息推播...etc)等硬體功能外,視覺表現幾乎可圈可點。

        但如果你遇到 Ripple 排版亂掉,看起來就像是開了網頁但沒有了 css 排版(很抱歉來不及截圖,不小心問題就被解掉了),有個很簡單的重新 reset 方式:

        點選 [工具(T)] -> [選項] -> [Apache Cordova工具] -> [Cordova工具] -> [清除 Cordova 快取],即可解決。


        2016-07-22

        [troubleshooting][rabbitmq] Error: unable to connect to node rabbit@controller01: nodedown

        當對 RabbitMQ 執行 rabbitmqctrl 指令時,如果發生 Error: unable to connect to node rabbit@controller01: nodedown,如下圖


        不要懷疑,非常有可能就是你的 /etc/hosts IP填錯,以上述例子會查 hostname 為 controller01 的IP去送 cmd,所以 IP 千萬不要填錯了~





        2016-03-18

        整合Redmine跟Gerrit

        Redmind是一套用Ruby-on-Rail開發的開源專案管理軟體,知名度頗高;Gerrit則是Google工程師開發一套建構於版本控制系統之上的Code Review的系統,他的hooks功能在前篇提到一 些,這裡要介紹怎麼把Redmind開出來的issue自動被Gerrit在patchset更新的時候一併更新。

        [環境]

        • OS:Ubuntu 14.04 LTS
        • Redmine version: 2.3.2.stable
        • Gerrit version: 2.11
        • Script language: Python 2.7
        [安裝設定]

        Step 1. 開通Redmind的REST功能,管理權限Admin登入,進行網站設定 -> 認證 -> 啟用REST,打勾然後儲存。




        Step 2. 取得各自帳號的REST API key,點選右上角我的帳戶,下方API金鑰點選後會彈出key,有了他可以透過REST API對Redmine程式化操作。

        2015-07-11

        只要十招,讓您經營高效的軟體研發團隊



        1. 縱向思維分工,打破既有分工模式
            引言提到,我們團隊基本上就是一個人要做十個人的事情,所以如何分工就是一件最重要的事情,因為我知道如果以原本的工作型態進行分工,肯定無法承接;所以我自己在腦中沙盤推演很久,並將要接手的系統範圍做了領域的縱向切割,然後再分工出去。
            換言之,我讓每個團隊成員都具備full stack的研發任務與能力,雖然都是剛進公司的新人,不要緊,可以培養,我全力協助建立他們所需要的domain knowhow與技術能力。怎麼培養,後面文章會慢慢提到。

        2. 信賴團隊,訂立明確任務
            充分信賴團隊,這句話會說的人很多,但真的做得到的主管很少;另外最重要的是,你要讓整個團隊清楚目標,但往往連主管自己也搞不清楚。
            再者,我真心認為公司的高階主管挑人進來的眼光都很厲害,某些因緣際會我接觸過許多公司的工程師,能進敝公司的人比較起來素質都相當優秀、上進心十足,都是佼佼者。
            既然我有一群佼佼者團隊,更應該善用大家的力量。

        3. 個別成員,一次只給單一目標,絕不多頭馬車
            這招讓團隊成功突破許多限制跟細節
            身為一個主管在執行專案,最怕的就是進度不如預期,很抱歉,個人剛好承受壓力的極限異於常人,我把團隊中高手放在一個最無法預期進度(因為難度極高)的功能研發中,但我不給他任何的進度壓力,我這麼跟他說:"這個功能很重要、我也知道困難度很高,但我要的就是一個general solution,我不要你為了求快、求進度而做半吊子的成果就放到系統裡,你放手去做,有任何需要幫忙的盡管提出來我可以跟你一起解問題,剩下的責任我來扛"
            執行過程,當然會遇到不少問題,不管是技術上或是方向要怎麼走,我會仔細從頭到尾把問題、過程、可能解法都聽過一次才發表自己的想法,並且要求成員能有自己的意見跟想法,充分相信你的好手!
            用了好幾次,屢試不爽!成員暨獲得成就感,系統也有了大突破。 

        4. 何其幸運,我自己也擁有一個能力超強、當責的好主管
            十年寒窗無人問其實很辛苦,剛好自己也相當幸運,碰到一群好主管(不然也不可能這麼快就讓我當責帶團隊),我們的溝通很頻繁、也很順暢,下情能上達,而且他完全能觀察到我帶團隊用的方法以及建立的文化氛圍,幾乎不用任何解釋他就能理解我的想法

        2015-07-08

        Nagios 納管監控主機設定方式


        Nagios安裝完成後,必須把設備(ex: Host)進行納管才能進行監控,以下簡介設定方式。

        • 安裝環境:CentOS 6.4 64bits
        • Nagios版本:nagios-4.1.0rc1

        Step 1. 把要納管的設備加進 /usr/local/nagios/etc/nagios.cfg 中,Linux、Windows系列建議分開放。以下圖為例,個人的Nagios納管了3台Linux Server(包含自己localhost) + 5台Windows Server。

        Step 2. 於 /usr/local/nagios/etc/objects 資料夾對應 Step 1. 新增設定檔,以 windows template為範例,主要有三個部分要修改:

        2015-06-11

        Nagios告警信設定方式



            以下介紹Nagios在監控環境主機發生問題的時候,發送告警Email的設定方式。

        • 安裝環境:CentOS 6.4 64bits
        • Nagios版本:nagios-4.1.0rc1
        • Nagios Plugin:nagios-plugins-2.0.3
        • Linux Clent:ncpa-1.8.1-1.el6.x86_64
        • Windows Client:NSCP-0.4.3.143-x64
            根據網路上很多資訊指出,nagios安裝在Linux上只要另外安裝mailx再透過postfix的方式就可以發送,但小弟怎麼試都不成功的情況,只好直接從nagios的notification definition下手,該檔路徑在 /usr/local/nagios/etc/objects/commands.cfg,當然這是小弟的個人路徑,請視客倌您的安裝路徑自行修正。
            

        # 'notify-host-by-email' command definition
        define command{
                command_name    notify-host-by-email
                command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
                }

        2014-12-27

        軟體開發真的沒有銀彈嗎?淺談世界級軟體開源社群運作


        圖片來源:One Piece

        無人不知的軟體神書人月神話:軟體專案管理之道(The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition)其中一個章節提到人月神話這個迷思,簡單解釋,以工程學來說,今天我用50個人建一間房子需要100天,那工程上因為可以拆解工作,所以理論值(大量的平均數來看)可以用500個人在10天內建一間房子;這就是一種人月工時結構的估算。

        很可惜,軟體並不是工程。軟體開發是一個很殘酷用智商高低決定勝負的領域,以開著同一款車,一個頂尖的賽車手頂多就比普通會開車的人快個2-3倍,但軟體頂尖程序員跟普通程序員可以差到百倍(the measure indicators should be include quality, scalability and stability)。

        但今天透過網路無遠弗界的集結,開始有著一絲可以打破人月神話的運作機制存在,這個機制就是開發者社群(Community)。一個好的開放原始碼社群透過制度、標準、流程、規範有效集結世界各地志同道合的夥伴以OpenStack開源社群為參考說明。

        開源社群運作基礎流程:
        1. 先有個code base,最小可能就只有幾千、幾萬行程式碼,然後由一個或兩個單位維護研發,eg:NASA, Rackspace。
        2. source被open,並且License Agreement被擴張為Apache License,簡單的說就是拿到這個授權的程式碼,你可以無償的使用他,拿來改、賣都沒關係,隨便你搞,但前提是組織不負後續責任。通常這時候就會開始吸引到市場的鯊魚。
        3. 忘了說,一定要有個源碼版控系統。
        4. 社群建立,會開始進行幾件事情:
          • 建置官方網站,繪製個吉祥物mascot感覺比較沒這麼枯燥乏味。
          • 釋放Release Note(說明這個版本主要完成哪些功能)、發佈各種進程的版本(alpha, beta, candidate, stable, )、發布版本、定出版號、
          • 針對社群貢獻者(contributors)會給幾條較有法律性的規範CLA(Contributors License Agreement)

        2014-12-26

        2014末 - 自我技術成長的省思

        最近悠悠轉轉某開源社群一段時間,鑽研其中一個主題,過程大概就是系統安裝、trace code、把架構搞清楚、拉哩拉雜用了一堆元件、再把python又複習了一下,腦袋中累積了不少東西,想把東西寫出來做個分享,表示自己好像獲得一項成就(?),結果寫到一半,突然發現...

        我現在不過是把社群上的英文文件翻成中文而已啊...
        我現在不過是把社群上的英文文件翻成中文而已啊...
        我現在不過是把社群上的英文文件翻成中文而已啊...

        嚴重發現自己沒有貢獻(哪有人自己當穿新衣的國王,還同時扮演那個指著國王說沒有穿新衣的那個小孩),不過就這樣一個move就得到一個反省思考的機會。

        台灣的軟體實力長久以來,跟硬體、晶圓代工廠那些還可以跟世界搶單一較高下的技術來比,根本就是一塊如同殘障的領域。沒辦法,台灣一個小島才多少人,最強的都跑去當醫生、律師,再來是電機,然後才...好了,這種涉及到人身攻擊的議題到此為止。

        關於軟體開源社群,在台灣能有"實質貢獻"的機會並不多;觀察幾年下來,台灣軟體產業界的毛病仍舊停滯不前
        1. 拿了國外寫好的開源專案,稍微改個UI、換個LOGO就說是新技術;這點其實很tricky,到底是拿既有開源專案去忽悠上面說開發了新技術,然後上面決策層級(擁有資源)的人很開心,就開始大肆做宣揚、媒體推廣的人但不去思考這到底算不算是一個真正能讓產業升級的關鍵技術。兩邊還真不知道誰對誰錯,也許這是一個共犯結構、上下交相賊,下面想辦法透過最短途徑讓長官開心,長官也有了新的題材讓大長官更開心,你開心、我開心、大家開心,開心之餘又有錢領何樂而不為,反正題材願景的泡泡只要不戳破就沒問題。
        2. 不斷的做Me2

        2014-12-04

        神註解 - 思考 Code Review 的重要性

        無意間翻到一個放著發霉的js檔,傳說中是一間世界知名的硬體品牌廠對外網站產物,分享一下神註解(網路一夕爆紅,然後馬上就被撤)。

        不要再跟我說code review不重要,你沒有時間做code review~

        2014-04-25

        [OpenStack]使用DevStack快速部署OpenStack



        OpenStack是一套雲計算 IaaS 的管理平台開源專案,相關的敘述不再多說,請自行上Google搜尋。鑑於陸陸續續聽到不少聲音說OpenStack相當難於建置部署,但發展至今,其實網路上的鄉民高手們已經提供很多強大的一鍵式安裝包,以下要介紹的是利用DevStack快速建置OpenStack。

        個人部署環境說明:
        • 虛擬化平台:VMware WorkStation 8 (免費的VirtualBox大家也相當推薦)
        • OS:CentOS 6.5 64bits Eng.
        • devstack Github:git clone git://github.com/openstack-dev/devstack.git
        • 用VMware把CentOS 6.5裝起來,網路記得要打通,個人是用VM的虛擬網卡eth0 採bridge方式至手機的3G,在Virtual Network Editor選項可以對網路設定做修改
        • 需要的指令,以藍字標註。
        安裝步驟如下:

        [建立OpenStack原始碼的下載目錄]
        • 這裡先放在/tmp底下,請自行選擇
        • $mkdir /tmp/devstack
        [從Github拉最新的OpenStack原始碼]
        • $cd /tmp/devstack
        • $git clone https://github.com/openstack-dev/devstack.git

        2014-01-11

        軟體主管的喃喃自語:領導原則


        圖片來源:www.nipic.com

        大方向:

        不是很喜歡主管這個詞彙,主管感覺只是在管人、管事,但其實在管理階層要做的事情不能只是管理,要能找出團隊未來的方向,雖然對台灣人來說會很反感,個人倒是覺得用"領導"才是比較洽當的詞彙。


        領導(主管)認知:(個人立場)
        1. 謀定而後定,避免朝令夕改:要認知主管的一舉一動、下達指令都是成員們的圭臬,要是今天主管請你研發A,後天跟你說改成研發B,再過幾天又跟你說要研發C,想必大家都會無所適從,專案進度永遠都在歸零。所以個人在下每個命令或指導棋之前,絕對不會脫口而出,都是在腦海中沙盤推演這個命令下去後會讓多少人投入資源,投入資源後會獲得哪些產出,再藉由這些產出能不能達到目的才會下這道決策。要知道主管的話語對下屬來說就是指南針,今天你自己都抓不準方向,又要如何讓事情獲得成功?
        2. 必須有扛責任的覺悟:團隊成敗與否絕對是在主管身上,別想怪罪到下屬上;要是主管老是以"員工不認真"、"員工能力不足"來搪塞失敗,那上級長官又何必賦與你主管職,一個主管存在價值就是在於領導團隊的成功
        3. 不是只為上司負責,更要為成員的未來負責:設想一個情形 - "如果今天你所在這間公司突然倒閉了,你的成員都有辦法、有能力找到別的工作嗎?"主管的任務不僅是要完成上面長官交代的事情,同時間你應該要為下屬的能力培養盡到責任(除非你的下屬就是沒有心思學習,另當別論),今天你交辦給他的任務應該是要有技能性、學習可能、有競爭力的

        2013-12-27

        不負責任之IT大未來預測


        圖片來源:Federico Ciccarese

        個人投入IT領域已有一段不算短的時間,來來去去看了許多IT服務、產品,下面是個人預估十年後、甚至十五年後的IT未來願景。

        先點出最重要的關鍵:什麼技術都別談了,對用戶來說,IT就是一個小型的行動裝置

        想像一個用戶情境:"每個人透過生物辨識裝置,利用自己的行動裝置(可能是手機)透過網際網路登入遠端的虛擬作業系統、操作各式各樣的APP(已經不管iOS、Android),所有的運算、資料都在雲端;今天不管

        2013-07-26

        自動傳送簡訊抽獎懶人法


        圖片來源:hifree


        Bill Gates曾說:"他只雇用最懶的工程師,因為懶,就會懂得用腦筋想方設法找出最好的方法來做事情"

        相信大家一定有收過類似的活動抽獎簡訊,內容大概是"XX邀您於O/O前輸入數字回覆本簡訊完成闖關就抽機皇"

        但一封封回傳浪費的已經不只是金錢,更還有時間。如果,這裡是說如果,你跟某人一樣電信月租費預設較高,每個月都還打不完,可以考慮多寄送這些抽獎簡訊來增加中獎機會。


        懶人做法如下,以Android平台為例:

        2013-04-24

        [Google App Engine] 建置與部署教學


        Google App Engine(以下簡稱GAE)簡介
        想建置自己的網站系統卻苦無賜服器跟頻寬嗎?GAE提供一個 java/python framework 的 run time environment,於 google 端配置有container,只要確保你的開發程式符合container規範及配置檔案即可即時運行於internet上。

        難易度
        適合有使用過 Eclipse + Java + Jsp + Servlet 等技術,建構過網頁系統人員。

        Step 1. 建置開發環境
        厲害一點的人其實不需要IDE就可以做事情,但工欲善其事,必先利其器,時間就是金錢,個人還是搭配一套坊間最知名的Eclipse作為開發工具。
        個人整體作業環境是Windows 7 64bits + Eclipse Classic 4.2.2 (JUNO) + jdk1.6.0_43,細節怎麼安裝不贅述,重點是GAE。

        2013-04-11

        問出技術深度

        會問自己到底做對了沒有才是重點:
        1. 你的目標客戶在哪?
        2. 你的產品到底優勢在哪?為什麼客戶要選用你的產品?
        3. 你的技術強度到底夠不夠?競爭對手要用多少時間可以超越?
        4. 你的產品到底賣多少錢了?要多久時間可以回本?
        5. 你的客戶數現在有多少?你自己公司的員工有在用嗎?他們自己願意花錢購買嗎?

        要如何了解您所帶的技術團隊強度,不要隨便就被幾個技術名詞忽悠,導致一個其實很簡單的技術被過度強化。嘗試問以下問題:

        2013-03-17

        Cloud OS Design Sharing


        近日參與CS Design Camp,最後演講者分享如何將自己擅長的語言Ruby與CS整合的設計,聽完後個人也不禁熱血起來,在此野人獻曝個人的Cloud OS設計,以下簡稱COSM


        COSM定義:
        雲計算IaaS管控平台,提供使用者簡易Web管理介面,虛擬化部分能自由選用hypervisor,整體架構符合NTIS的雲端五大特性。


        COSM設計宗旨:
        •  絕對彈性佈署(用戶根據運算需求快速佈署雲平台)
        • 既鬆散、又耦合,功能模組化(每個模組都可以切割出去單獨販售)
        • 允許動態調配資源(不中止服務)。

        2013-02-20

        [troubleshooting][xenserver] The bootloader for this VM returned an error -- did the VM installation succeed? Unable to find partition containing kernel


        A:使用XenServer6.0安裝比較新kernel OS(例如CentOS 6.3)的VM時,碰到The bootloader for this VM returned an error -- did the VM installation succeed?  Unable to find partition containing kernel

        Q:選擇預設安裝VM的OS類型時,選 other 即可解決。