[TIL] Migrate MySQL to PostgreSQL in Docker

Run Docker Postgres

docker run --name some-postgres -p 5432:5432 -v $PWD/psql-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=mysecretpassword -d postgres 

Find docker IP

docker inspect <CONTAINER_ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1

PSQL commands

Check here

Useful commands here.

  • \q quit psql
  • \d list all instances
  • \dt list all tables
  • \connect Db_NAME
  • \dl list all databases

psql connect to DB

psql -U postgres -h <IP>

Dump MySQL to SQL first

 mysqldump --compatible=postgresql --default-character-set=utf8 -r DB.mysql -u root -p DB

Migragte from sql -> psql by mysql-postgresql-converter

git clone https://github.com/lanyrd/mysql-postgresql-converter
cd mysql-postgresql-converter
python db_converter.py databasename.mysql databasename.psql

Create DB in psql first

CREATE DATABASE DB;

Refine PSQL

  • remove all “COMMENT ‘KB’” in PSQL
  • remove all default timestamp ‘“0000-00-00 00:00:00”’
  • modify “mediumint” to int4

About phpPgAdmin

  • Check php path on config /etc/apache2/conf-enabled add one here refer phpmyadmin
  • restart apache2 service apache2 restart
  • However it still need php to build with psql -> change to Windows UI PgAdmin

關於Github issue 當作blog的優缺點與感想..

搜集一堆China 技術團隊使用Github issue當作blog

不論是熟知的阿里前端: 還是fouber都有,挺值得follow 來看看有沒有更多更新的…

其實有研究過用 github issue來做blog :

  • TL;DR:
    • 懶得架站就用 github issue,不過記得多一份在md檔案中.
  • 優點:
    • 易使用(不用搞jekyll/hugo),highlight support,高互動(可以跟人討論)
  • 缺點:
    • Google search 找不到 (不少團隊會複製一份到 github 當md來給google search)
    • 備份也是一樣. github issue 無法備份,需要另存檔案
    • 無法透過RSS來訂閱,對於我這種feedly高度用戶很麻煩.
  • 其實像是fouber這樣兩份(一個放issue給討論,一份放檔案github 來搜尋) 也不錯.只是好像就有點太麻煩…
  • 所以除非真的不想搞jekyll/hugo 不然還是乖乖弄blog方便點.

程式設計週記[2016/02/26]: 心血來潮整理部落格,一弄又是改Hugo又是修Jekyll

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

這個禮拜花了太多的時間再弄自己的jekyll blog.本來想migrate到hugo去,但是因為hugo import jekyll有太多的問題(即便已經改了一些)還是有不少部分需要改. 後來還是把jekyll 3.0產生的樣板相關問題修復,也另外換了一個主題來使用. 好像jekyll又可以再戰十年?

本週持續NSQ的學習,先透過上週的Disk queue來改寫之前寫過的PubSub.

Go

Introduction Go 1.6

  • Go 1.6剛在02/17正式release,Brad Fitzpatrick馬上在GopherCon India發表了這篇.裡面不僅僅有介紹了Go 1.6的功能也有順便預告了Go 1.7 ~ 1.10的產品規劃.當然也有一些笑話很有趣.

PlanB: a distributed HTTP and websocket proxy inspired by Hipache

  • 透過Redis來架設的HTTP websocket proxy,可以拿來好好學習其中的作法與應用方式.

Google Cloud Vision API on Golang

  • 在上週Google 總算開放Cloud Vision API給一般人申請使用,這篇文章有講解該怎麼做,當然也有提供他寫好的Golang Package

GOPHERCON INDIA 2016 Summary

  • 2016最早開始的Gopher Con 有不少關於Go 1.6的相關議題.

nsq的使用與一部份介紹

  • 最近幾週都在學習NSQ,這篇文章有不少的探討從技術層面跟他的設計理念都有提到.

Open-Source Phishing Toolkit

  • 網路釣魚的工具給企業做測試與訓練用的.

Handling Database Migrations in Go

  • 由gophish網路釣魚的package公司發的DB migration 介紹文.裡面使用的是goose,但是比較多人推薦migrate

goose: A database migration tool

  • DB migration tool,可以在無痛的狀況下變更你得資料庫schema.並且查看有無任何問題也可以快速的rollback.

A Go library for carefully refactoring critical paths and code. lightweight port from github scientist

gago is a genetic algorithm written in Golang

  • 基因演算法的golang套件,會隨機產生數個解法,評估後挑選最適解法.

Building binary executables for Android in Go

  • 在Android系統上面跑go的excution,由於Go 1.6支援x86的Android系統,這篇文章的應用又更多了.

HOW WE BUILT UBER ENGINEERING’S HIGHEST QUERY PER SECOND SERVICE USING GO

  • Uber 如何透過Go來打造高效率的查詢系統.不少架構與內容的討論.

Python

gRPC Practical Tutorial — Magic That Generates Code

  • 這篇主要講解如何使用grpc.很詳細地講解從protobuf開始,到一些簡單的應用.

Ruby

scientist: A Ruby library for carefully refactoring critical paths.

  • 由github出的可以將你的critical path做重構的工具,並且可以幫你的Ruby程式碼做更好的重構.

Android/JAVA/NODE.JS

Docker

iOS/Swift

Swift cygwin ported

  • Swift Programming Language gained a Cygwin Port 在Windows上也可以用了

30 Days of Swift

  • 每天寫一個Swift iOS App來學習Swift,真是厲害.

網站文章

产品经理,你真的有经理职权吗?

  • 一般的產品經理(Product Manager)常常因為有掛著Manager的頭銜讓人誤為就是具有經理的職稱.其實這邊指的是對於產品本身的管理職權擁有.但是是不是真的PM都有這樣的職權? 這篇文章有詳細介紹,並且從不同的層級來讓你更了解PM的工作內容.

IBM区块链技术(Blockchain)简介

  • 一份由IBM提更的對於blockchain的基本介紹.

The Twelve Days of Crisis – A Retrospective on Linode’s Holiday DDoS Attacks

  • Linode在去年聖誕節跟新年受到大規模的DDoS攻擊,這是一篇事後檢討文章.有清楚的介紹出事情的原因,經過與之後該如何防範.最近蠻喜歡看這類的文章,對於這種大規模出問題(Github, Linode)的檢討文章都有相當的深度.

網站收集

Become a Programmer, Motherfucker

  • 超多各種語言的免費電子書跟相關連結

TIL: Today I Learn

  • TIL (Today I Learn)是一個非常好的概念,透過github repo 來記錄.或許,也可以弄成一個TIR (Today I Read) 或是 TIB (Today I Browse)

What’s inside a PDB File?

  • 微軟總算把PDB的資料格式開源,並且提供數個可以查看的工具.

有聲書/影片心得

USENIX Enigma 2016 - Several Horror Stories about the Encrypted Web

  • 講解關於你認知的HTTPS其實沒有想像中的穩固.

本週專案

這邊會寫一些我的Project 52的成果.

本週專案:

https://github.com/kkdai/pd (PUBSUB) Publish-Subscrbe message broker with Disk queue in Golang

心得:

原本想到說PUBSUB跟DiskQueue應該要很簡單的整合,結果發現問題還真不少.首先要先定義DiskQueue本身是需要放在哪個部分,找過不少的地方之後,後來決定獨立出來一個Topic物件,並且讓他控制DiskQueue來存取所有Publish的資料.這樣的好處有:

  • 當一個topic有太多的訂閱者(subscriptors)可以讓Publish不會有block
  • 當Topic有太多資料要送,可以先放在DiskQueue之後再慢慢Queue出來.

這樣的設計有一點參照到原先NSQ的設計,不過相對的簡單.

接下來應該會多花一點時間來讓DiskQueue更加的細緻,也多花一點時間去了解整個檔案的多工控管的細節.

[筆記] 關於網路廣告相關用語紀錄

前言

主要是整理一下最近在一個學習領域的Line群組討論到關於網路廣告業界的一些名詞.主要的原因是在討論最近很紅的新聞”延攬台大「機器學習之神」林軒田,Appier 啟動產學合作計畫” 大家就在討論台灣的AD產業近況與大陸成熟的AD發展.

當然這種討論就有一堆名詞跑出來,其實最近應該也不少文章)有提到.我在這裡只是給自己筆記一下,那些名詞到底有什麼差異.

產業演化

  • 原本由廣告主(Advertiser)跟發布商(publisher)買廣告.就像是某公司看上彎彎的人氣請他在他的人氣部落格上面放廣告一樣.
    • 問題:
      • 由於廣告主與發布商越來越多,不易管理.
      • 廣告主需要自己找發布商太麻煩.
    • 解決方式:
      • 有人出來搜集需求與供給成立AD Network
  • “AD Network”來收集所有廣告主的需求與發布商的供給並且透過分類的方式(將發布商分類)來幫廣告主分發廣告.
    • 問題:
      • 重複付費,無法精準找到瀏覽者.
    • 解決方式:
      • 透過瀏覽者Cookie,開始精確的分類瀏覽者
  • “AD Exchange” 來透過Cookie來仔細分析每個網路上的瀏覽者,並且精準的定位出該使用者有興趣的廣告.
  • RTB(Real-Time Bidding) 是AD Exchange會提供的功能,透過競標的方式來讓廣告主針對潛在客戶來競標,價高的人可以投放他的廣告.
    • 問題:
      • 大部分廣告主都是透過中間商來跟AD Exchange溝通與購買廣告.無法找到最佳策略(舉例: 廣告商不知道該在Facebook投廣告,或是Google投廣告才能獲得最佳效益)
      • 廣告主可能自己是發布商,透過AD Exchange 可能會買到自己的廣告.
    • 解決方式:
      • 有個人專門來幫助需求端成立平台,廣告主可以透過該平台直接將需求下給各個不同的AD Exchange
  • “DSP” (Demand Side Platform)需求方平台幫助廣告主成立一個平台可以將多個AD Exchange整合後給廣告主選擇與使用.並且DSP也提供RTB
  • 同時在另外一方面發布商也有相關的聚合服務叫做SSP (Support-Side Platform).SSP整合了DSP,AD Exchange與AD Network的需求,並且本身也提供RTB.讓發布商可以更容易地在他的媒體上面將廣告賣到正確的使用者身上.

目前幾個已經知道的名詞會形成以下的狀態.

(Pic: from orbitsoft)

  • 這張圖表是另外一件事情就是: 廣告主透過DSP成為了RTB的client,而發布商透過了SSP成為了RTB的Server負責提供資訊給DSP.

  • 當DSP越來越多的時候,ATD(Agency Trading Desk) 就是可以讓廣告主去挑選不同的DSP

  • 回過頭來不論是ATD還是DSP,廣告主還是得面對去挑選不同的平台與方式來投放他的廣告.但是如何制訂自己的廣告客群是誰?就是得要透過DMP(Data Management Platform).

    • DMP分析使用者偏好篩選出何者是潛在客戶.(資料來源: SSP)
    • 透過投放的效益報表來顯示最適合的投放平台.(資料來源: DSP)

應該就這些…..

角色舉例:

  • Advertiser: 廣告主
    • Ex: 任何一家需要廣告的企業(Visa, Apple, 微軟…)
  • Publisher: 發布商
    • Ex: 具有高瀏覽量的網頁或是App(彎彎的網站,Yahoo 新聞,蘋果新聞…)
  • AD Network / AD Exchange
    • 具有廣告發佈與使用者追蹤能力(cookie)的廠商 (Facebook, Yahoo, Google Adsense)
  • DSP(Demand Side Platform) 需求端平台
    • 具有多平台的媒體公司,就有會提供DSP.通常像是比較大媒體公司(ex: Yahoo)其實本身也做DMP.
  • DMP (Data Management Platform) 能夠做資料分析,當然最重要的就是資料的個數.
    • TalkingData的Mobile DMP透過自己擁有的8億個App使用者搜集來的資訊可以分析,進行推薦進而讓廣告商能夠更精準的投入廣告.
    • 當然Facebook也是如此,透過不同使用者的Facebook ID可以追蹤使用者的喜好幫助他們分析進而找出更精準的廣告投放方式.

數據轉錄與心得

避免提到太多個人談話,盡量將數據找到網路上有的資訊.

  • 根據Marketing Technology Landscape Supergraphic (2015)的報告.2015年的時候有1876個Advertising Vendor在市場中.
  • Google在積極回到China的同時Google Double Click, AD Exchange/ GA / Google DMP看來都有機會回到China並且大舉徵才.(不過跟RD無關 :p)
  • 負責公司內部管理AD策略與方向部門叫做Data Strategy,這裡有一些LinkedIn的Director Data Strategy相關履歷.也就是專門負責調配媒體成本到可編程的購買(shift media budget to programmatic buy)也就是透過DMP來買媒體廣告.
  • AD Tech中對於技術與資源的要求都相當的高.其中技術不外乎是AI與ML,而資源就是$與媒體關係(不外乎財經關係).就這幾點,其實台灣的廠商很難做到DMP,頂多就是DSP.
  • 大媒體的DSP(ex: Yahoo)本身也會提供DMP的服務.

相關文章:

相關slide:

What is Real time bidding (DSP, SSP, DMP, ATD, ITD) from Stanislav Mikhaylyuk

[Hugo] Customized hugo for jekyll import

Issue

hugo import jekyll is very easy to import your blog post from jekyll to hugo.

However it has some issue, original you have change you permallink ex like:

  • permallink: /:title/
  • permallink: /:categories/:title/

I just file a issue#1887 on Hugo project, detail as follow:

I try to use it to convert my blog from jekyll which run over decade and contain over 1000+ posts. I found it will force to add “url” in every post which is /year/month/dat/postname.

for ex:

---
date: 2016-02-18T00:00:00Z
description: ""
tags: []
title: '[Visual Studio] Using Visual Studio 2015 to remote debugging C++ on linux'
url: /2016/02/18/vs-debug-linux-exe/
---

However it will conflict with my configuration of “permallink”, I found it force to store the same “url” no matter your jekyll “permallink”.

Here should be two approach of “url” generation rule:

  • Load config from jekyll and parse “permallink” configuration to apply it.
  • Just not use “url”, let user to configuration whatever they want. (It might be some issue because the “title” in jekyll permalink, mean the “postname” in hugo but no permalink config with it.) Any idea of this issue?

Temprary Fix:

Because my jekyll config use permallink: /:title/, I directory modify source code to use postName to do correctly import.

How to use it

go get github.com/kkdai/hugo  //if you don't install it before.
//build or run hugo on github.com/kkdai/hugo

TODO:

I will try to survey how to import correctly jekyll configuration. However I still wait any comment on issue #1887.

I also found hugo import jekyll will occur categories lost randomlly, keep tracking on this.

[Jekyll] 取決於要不要跳到Hugo,後來決定修改樣板

本來是想要換到Hugo的

其實早就想換到Hugo了,新版的Hugo中的Hugo Import Jekyll 也算是順利.但是卡在permalink一直設定不成功. 先來改改Jekyll的theme,不然現在的已經醜到我有點受不了.

記錄下jekyll整合到hugo過程

  • 記得要更新到Hugo 1.5之後,才有Hugo Import Jekyll
  • 跑過之後,發現會有一堆error Parse filename error: .DS_Store
    • 解法: 使用最新的source code,需要有這個fixed

Hugo轉換目前遇到問題

我希望能把整個permalink跟原先的jeky來對應.成為permalink: \:title\ 會一直無法修改permalink. 這邊卡了一下,決定把他弄好再轉到Hugo,先來換Jekyll的theme

後來問題發現是在hugo jekyll import裡面有預設的url:.也就是會跑成/2016/02/02/title/這樣,還是要找個方法來改改.

[更新 2016/02/22] 透過改code,現在可以透過import跑完所有jekyll文章也有正確的url. Refer issue #1887. 但是又卡在原先部落格的設定有問題,我使用了多個category (照理說category 只能有一個,複數個應該要用tag),這邊就有點難改了…..

剩下的問題:

  • hugo import jekyll: Categories在轉換的時候會掉(應該是issue 要修)
  • 需要另外準備Archive跟Category 的頁面,就像接著我要在jekyll裡面準備的一樣.
  • 找個一漂亮一點,實用一點的樣板.(就像女人的衣服,可能永遠少一個?)

來換 Jekyll 的 Theme

把theme 換成dbyll,簡潔我又喜愛. 不過由於本來有使用到JB (Jekyll Bootstrap),所以要做一些修改.快速紀錄一下:

  • 把JB的相關設定移掉(Remove specfic string in all file)
sed -i.bak '/include JB/d' *
rm *.bak
  • 移除layout: post (Remove layout post)
sed -i.bak '/layout: post/d' *
rm *.bak
  • 糟糕,錯誤移除.在用到gsed把他加回去(Oops, Use gsed to insert it back)
sed -i "2i layout: post" *
  • dbyll只有類別的分類,但是沒有(Add archive without plugin by month and year refer here) 程式碼列在後面.
  • 發現試著要連categories.htmlarchive.html會跳出404,原來要改成/categories//archive/就好了.

  • 發現到了 jekyll 3.0 原先的 categories.html會有問題,於是得把原先裡面的categories.html語法改一下.

  • 相同的東西也改了 tags.html

這樣改…應該可以撐一下. 等我把Hugo問題修好.. 馬上換到Hugo…