2018年7月29日 星期日

ubuntu 1804 的 php 升級為 php7.2

sudo apt-get install apache2 mariadb-server mariadb-client php7.2  libapache2-mod-php7.2 php7.2-mysql phpmyadmin php7.2-curl php7.2-gd  php-pear  php-imagick  php7.2-imap php-memcache  php7.2-pspell php7.2-recode php7.2-snmp php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php-mbstring php7.2-mbstring php-gettext p7zip* fcitx-table-scj6 fcitx-config-gtk shutter vlc kdenlive kazam gimp audacious






PHP 7.2 將 mcrypt 移除了,建議使用 Openssl 來取代




另, 預設 mysql 不會要我們輸入密碼, 所以, 在啟動後, 要 sudo mysql -uroot -p 不用密碼直接登入, 再用 grant all on *.* to root@localhost identified by '123456';  指定新的密碼.

2018年5月16日 星期三

php 的 $_SESSION 失效的處理方式


由於資訊安全考量的緣故,Web Server 被設定為比較安全的環境,造成 php 的 $_SESSION 失效,試了很多方式測試,$_SESSION 是啟動的,但是它的值就是無法傳遞到下一個頁面!
後來參考以下二個頁面: link 1, link 2
總算知道原因,並且解決了~~

第一部份,
先確認 /var/lib/php/session/ 目錄的權限是否正確?
通常都沒有問題!
再來確認 /var/lib/php/session/ 裡,有沒有你使用 $_SESSION 產生的暫存檔?
由於檔名是亂數編的,從檔案名稱看不出來,可能只能從檔案的日期找出最新的,看看它的檔案內容,如果有存在你所儲存的值,表示這部份沒有問題了。
值可以存進去,但是提不出來!

第二部份
用 phpinfo() 檢查 session.use_trans_sid 的值是否為 0。
若為 0 ,問題就找到了! 設為 0 的意思是,每一個 url 都為生成一個 session,其他的頁面也會生成新的 session,而造成無法追蹤前一個頁面的狀況。
也有二個解決方式,一個是修改 php.ini 的檔案,將它改為 1。 另一個,則是修改 php 頁面,在 session_start() 之前,先加上  session_id(SID) 敘述,就可以了。例如:
    session_id(SID);
    session_start();


2018年5月14日 星期一

android app 的資料備份

開發 app 時,常會寫入一些資料做些收集、檢測的工作,實體手機有權限的限制,寫入在 app 的 private data 時,資料的備份是一個麻煩事。
以下方式可以處理~

from:
https://stackoverflow.com/questions/15558353/how-can-one-pull-the-private-data-of-ones-own-android-app

從 android 手機要備份資料,用 adb 可能會用以下方式:
adb pull /data/data/com.corp.appName/files/myFile.txt myFile.txt
 
對於 android virtual device 可能可以,但對實體手機可能會產生錯誤,它不讓我們複製。 
 
先離題一下,連線到實體手機時,以下指令可以進入到 app 的目錄裡,可以看到相關檔案,但無法複製。 
adb shell
run-as com.example.appName 

回題,要複製 app 的資料方式,要用備份的概念來做,指令如下:
adb backup  -f myFiles com.example.appName 

這個指令執行時,為了安全考量,手機上會顯示是否允許備份的動作,所以,必須在手機上配合操作才能允許備份某個 app 的資料。 
其中,myFiles 是備份出來的檔案,這個檔案是有壓縮的。
解開的方式如下:
dd if=myFiles bs=4K iflag=skip_bytes skip=24 | openssl zlib -d > myFiles.tar
 
如果上面這個指令產生 zlib 的錯誤,我用以下方式可以解開壓縮檔,成為 tar 的檔案。
dd if=myFiles bs=4K iflag=skip_bytes skip=24 | zlib-flate -uncompress > myFiles.tar 

再用 tar xf myFiles.tar 方式解開就完成了。 
 
2020.12.02 更新
ref: https://stackoverflow.com/questions/29830981/error-zlib-is-an-invalid-command
如果出現 zlib 或 flate 錯誤,可以用底下方式,用 python 來解決~ 
dd if=myFiles bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -

========================

討論串的下方還有幾種方式,我沒試,也許簡單些~ 
 
方式1 
$ adb shell
$ run-as {app-package-name}
$ cd /data/data/{app-package-name}
$ chmod 777 {file}
$ cp {file} /mnt/sdcard/
再回到 linux 將檔案複製出來
$ adb pull /mnt/sdcard/{file}
 
方式2
adb -d shell "run-as com.example.test cat /data/data/com.example.test/databases/data.db" > data.db
直接用 print 的方式將檔案 dump 到 linux 的檔案裡。 
 
  

2018年5月3日 星期四

Photogrammetry 的資料整理


因為專案因素,就記錄一下~~ 

系統需求: 準備一張支援 CUDA 的 NVIDIA 顯示卡,才能跑出結果。 很重要!

使用 COLMAP + Meshlab

COLMAP 相關文件:
官方網站
Free photogrammetry software review: 2017
Lab Notes: A recipe for using photogrammetry to create 3D model
Photogrammetry Testing 8: COLMAP


wikipedia 的比較: Comparison of photogrammetry software


另外,協同編輯(共寫)的功能,有以下幾篇可以參考:
Collaborative Editing in JavaScript: An Intro to Operational Transformation
PHPWebSocket-TinyMCE


2018年4月30日 星期一

mysql restore


資料來源: https://github.com/17media/mysql-restore
以下為內容備份留存

前言

請優先善用storage的snapshot功能作backup and restore。
當你需要用上logical restore時:
  • master和slave機器都趴掉
  • 沒法從storage snapshot恢復過來
  • 其中一個use-case:整個datacenter趴掉,需要在別的datacenter重建mysql
這篇沒使用csv格式,因為所在的datacenter沒法這麼做

mysql.cnf

  • mysqlmysqldump會從這檔案讀取所需的username和password
  • 位置: ~/.my.cnf
  • 內容:
[client]
host=abc.com
user=root
password=abc123456
port=3306

backup script

  • 把純資料backup,不包schema,並且進行gzip
mysqldump --max_allowed_packet=512M --single-transaction --extended-insert --compress \
--no-create-info --no-create-db --skip-triggers \
--databases test1 | gzip -c > dump.sql.gz
  • 把database schema作backup
mysqldump --max_allowed_packet=512M --single-transaction --extended-insert --compress \
--no-data \
--databases test1 > schema.sql
  • autoinc的數值存放於schema部份而不是在data部份,所以每次logical backup一定要2者都跑
  • 次序一定是先跑data然後跑schema,否則autoinc數值會出錯
  • backup過程中不能跑alter table

restore script

  • 先重建schema:mysql < schema.sql
  • import data部份,mysql是用single thread來跑,100GB的資料需要超過6小時的,這樣子太慢
gzip -cd dump.gz | mysql --max_allowed_packet=512M --compress 

parallel data import

  • 原理
    • 先把本來的dump.sql.gz切成table_XXX.sqltable_YYY.sql……
    • 當準備好一個table_XXX.sql後,立即呼叫mysql < table_XXX.sql來做data import,因為同一時間能import多個table,所以時間大幅縮短了
    • 部份可以事後再補回的table可以先不做import,再進一步加快速度
  • compile program: go build
  • 執行import:
mysql-restore \
--path  \
--concurrency 
--ignore-tables 
  • 範例
./mysql-restore --path /backup/dump-20180429.sql.gz --ignore-tables "NotImportantTable,JustLogTable"

2018年4月13日 星期五

arduino 筆記


Arduino Ethernet


Arduino Ethernet 的話,需要 FTDI 的連接線,才能從電腦的 usb 連到 Arduino Ethernet 寫入程式。
接頭的樣式類似以下文章的說明:
https://gr33nonline.wordpress.com/2016/10/16/programming-the-arduino-ethernet-board/

以下幾個做為 web server 的例子:
http://wiznethk.pixnet.net/blog/post/344710378-arduino-ethernet%E5%85%A5%E9%96%80%E2%80%94%E2%80%94%E6%A7%8B%E5%BB%BA%E7%B0%A1%E6%98%93%E7%9A%84web-server%E6%95%99%E7%A8%8B
http://idledev.com/2015/04/http-get-parameters-with-arduino-part-1/



2018年4月8日 星期日

弱點掃描

自己留做記錄:

OpenVAS

若顯示
Status code: 503,
Status message: Service temporarily down
可以參考 https://itsol.biz/openvas-status-code-503-status-message-service-temporarily/ 這裡內容重新建置。


OWASP ZAP


2018年3月14日 星期三

林宜敬: 令人難以理解的軟體工程師生涯


我個人非常認同這篇的內容~~

原文網址: https://www.facebook.com/yijing1/posts/10155642313309495

整篇都說的很好,以下只節錄其中幾點:
四、
寫一個大型程式,並不是「人多好辦事」。
如果是土木工程或是製造業,人越多、產出就越大。如果一個計畫延誤了,就多調一些人手過來幫忙。
但是在軟體工程裡,人越多,就越是難以協調,寫出來的程式也往往品質越差、效能越糟糕。
這就是有名的”The Mythical Man-Month: Adding manpower to a late software project makes it later"。
IBM在1960年代開發OS/360作業系統軟體時,就發現了這個奇特的現象。
所以我也搞不懂,大型軟體公司雇用了那麼多的軟體工程師幹嘛?
六、
寫程式並不是寫的越長越好、越厲害。
我年輕在台大資訊工程系的時候,會跟朋友炫耀說:「我寫的程式語言編譯程式,總共有一萬多行耶。」
後來我去美國布朗大學讀電腦科學博士,畢業的時候喜歡跟朋友炫耀:「我的博士論文那個程式,功能那麼強大,但是我只用了七、八千行程式就搞定了耶。」
七、
二流的軟體工程師,喜歡把簡單的問題弄的複雜,寫出別人看不懂的程式。
一流的軟體工程師,喜歡把複雜的問題簡單化,寫出架構清楚明白的程式,讓人看了之後,覺得問題好像很簡單。
三流的軟體工程師會去崇拜二流的軟體工程師,因為他們會覺得二流工程師寫的程式都看不懂,一定是超級厲害;
三流的軟體工程師不會去崇拜一流的軟體工程師,因為他們會覺得一流工程師所做的事情都很好懂,好像都很簡單。
只有一流的的軟體工程師才會佩服一流的軟體工程師,因為只有他們才能看的出來,其他的一流軟體工程師厲害在哪裡?
台灣的軟體業如此,美國的軟體業也大致如此。

2018年3月6日 星期二

越在地越國際?


原文網址: https://www.facebook.com/agritruth/photos/a.1526400194238068.1073741828.1526178950926859/2031605333717549/?type=3&theater

【文青別鬼扯】---「越在地越國際?」

這幾年台灣不管是公部門還是許多民間組織,搞設計、賣創意、提企劃時總愛強調要有「在地特色」。幾年搞下來之後,鬼王越來越覺得,「在地」只是種「政治正確」,它是否能引起大眾的共鳴,或開拓市場、創造商業價值?實在讓人很懷疑。

同樣是為了賺取零用錢,今天下午鬼王又再度委身出門演講。演講時聊到所謂的「地方特色」產品問題,學員表示,每個講師都會跟大家說,「越在地越國際」。鼓勵大家做出在地特色,然後要故事行銷,講的好像只要是「在地」的玩意,就能創在消費者的購買慾望一樣。

如果大家有看過各種農村再生或社區營造的企劃案就會發現,「在地」已變成某種政治正確的價值。所以做任何東西,只要帶有在地意象,能夠跟在地歷史、在地人文扯上任何關係,就不用擔心被批評了。

反正如果有任何人跳出來說這樣的設計不好,這樣的企劃很沒創意,或這樣的構思很古板時,就能回擊罵對方不尊重在地。說真的,誰敢批評「在地」?即使這樣的「在地」爛到沒力,你敢嘴嗎?

但問題是,對外人而言,「在地」是賣點嗎?

倘若鬼王拿著嘉義縣六腳鄉的「蒜頭餅」向台北市大安區土生土長的天龍人朋友推銷,強調這是六腳鄉名產,很有在地特色。請問「六腳」對台北朋友而言,有任何吸引力嗎?這會成為購買誘因嗎?

No!多數台灣人甚至連「六腳鄉」都沒聽過。說不定天龍國朋友還會問:為何會有六隻腳?通常公廁或宿舍淋浴間頂多是四隻腳,為何你們嘉義玩這麼大,可以到六隻腳?

「在地」這概念頂多只對生活在外地的鄉親還有吸引力,但對多數人而言,它就只是個名詞、某個地名而已。台灣有319個鄉鎮(鬼王不確定還是不是319),多數人從小到大都只在其中一個鄉鎮成長,或許他對自己的原生地會有濃烈的情感,但他對其他318個鄉鎮也會有情感嗎?

這時候大家必定會質疑,某些鄉鎮的特產很有名,這樣就很有在地特色啊。

但問題在於,這些特產是因為那個鄉鎮而有名,還是那個鄉鎮因為這項特產而出名?

文旦是因為麻豆而出名的嗎?當然不是,是因為當地的文旦品質好,麻豆這個地方才因為文旦而出名。

所以囉,當我們一直強調「地方」與「在地」時,似乎忘記商品品質才是核心、才是根本。

至於有些人很愛說,「越在地越國際」,根本是弄錯兩者的邏輯關係。

不能否認的是,很多行銷全球的商品都帶有在地特色。但問題是,這些原來屬於地區性的產品,難道是因為很在地、被做得超級在地,所以能夠搖身一變為國際商品嗎?答案當然是否定的。

韓國泡菜夠在地吧,韓國人吃了幾百年,超級有韓國在地特色。即使它在地了幾百年,請問30年前其他國家有人會吃韓國泡菜嗎?好像沒有。

如今韓國泡菜變成全球性商品,並不是因為它超級有韓國特色,而是這十幾年來韓國流行文化、韓國美食強勢輸出,其他國家開始才注意到韓國泡菜,它才逐漸變成全球性的國際商品。簡單來說,你把一項產品做的超級在地、超級Local,你就算做一百年,也不會變成國際商品。

我們再回頭看看這幾年到處都在推的「在地化」、「一鄉一特色」或「地產地銷」,每個單位彷彿都喝了在地迷魂湯,以為只要冠上在地、地方的大帽子,產品就會變好、就會有吸引力。結果哩?花了政府一堆錢,到頭來真正能到市場上競爭的產品少之又少。

如果在地化、地方產品真的那麼棒,為何每次去各地的小農市集看到都千篇一律,必定是手工肥皂、手工果醬、果乾,全都長一樣?

如果真的都要做在地化,為何每個社區發展協會提出的Proposal永遠都是地方小旅行、在地觀光,而只要靠近山區的社區也都是在賣黑糖呢?

國際化商品確實都會有在地特色,但並不表示「越在地越國際」!

2018年3月2日 星期五

Machine Learning 資源


Google Machine Learning Crash Course with TensorFlow APIs, Google 免費機器學習課程
https://developers.google.com/machine-learning/crash-course/


2018年3月1日 星期四

Laravel 5 recursive query


使用 laravel 5 做的例子, 以下幾個站說明的很清楚

https://itsolutionstuff.com/post/laravel-5-category-treeview-hierarchical-structure-example-with-demoexample.html

https://heera.it/laravel-model-relationship

https://heera.it/laravel-nested-relationship-revised#.V9ntypN94dU


2018年2月13日 星期二

諸葛亮從來不問

 偶然從網路上看到的,還滿有道理的~~

===========================================

諸葛亮從來不問劉備,為什麼我們的箭那麼少?
關羽從來不問劉備,為什麼我們的士兵那麼少?
張飛從來不問劉備,兵臨城下我該怎麼辦?
於是一一
有了草船借箭、
有了過五關斬六將、
有了據水斷橋嚇退曹兵……

趙子龍接到進攻軍令時手上只有20個兵,
收穫成果時已攻下了十座城池、
多了2萬兵、增了三千匹馬,
軍令只是寫著:攻下城池!

——如若萬事俱備 你的價值何在!

孫悟空是在取經的路上碰到的,
豬八戒是在取經的路上碰到的,
沙和尚是在取經路上碰到的,
白龍馬也是在取經路上碰到的,
所以要碰到可以與你一路同行的人,
你必須先上路!
不是有了同行者才上路,
是因為你在路上才會有同行者!

2018年1月5日 星期五

clone windows 10 to another disk


從 HDD to HDD 可以,
從 HDD to SSD 也可以。

https://www.backup-utility.com/free-backup-software.html