在 Python 中偵測執行環境版本

Posted by – January 20, 2018

一直很想好好學 Python。不過這事已經放在心上兩年了吧
最近這陣子工作比較空閒, 才開始摸索 Python 3 的旅程。

在 setup 開始環境的時候有點好奇自己在 vscode 裡面跑 task 時是用 Mac 內建的 2.7 還是我用 Homebrew 安裝的 3.6,才有了這個題目。

一樣是來自 Stack Overflow 的解答,稍做筆記。

第一種方法如下

import platform

print(platform.python_version())

輸出的結果

3.6.3


第二種方法如下

import sys

print(sys.version_info)
print(sys.version_info[0]) # 輸出大版號
print(sys.version_info[1]) # 輸出次版號
print(sys.version_info[2]) # 輸出微版號

輸出的結果

sys.version_info(major=3, minor=6, micro=4, releaselevel='final', serial=0)

 

Mac terminal ssh 到 Linux 時,出現 cannot change locale (UTF-8) 訊息

Posted by – December 27, 2017

每回從 Mac terminal 登入到 CentOS,一登入就會看到以下的訊息
雖然沒什麼問題,就覺得有點不完美

testuser@localhost ~ $ ssh_linux
Last login: Wed Dec 27 23:22:50 2016 from 10.28.28.39
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

tl;dr

登入 CentOS 後,改個檔案再重登即可

vi /etc/environment

add these lines...

LANG=en_US.utf-8
LC_ALL=en_US.utf-8

詳細的發生原因可以看這篇 [Mac] SSH 到 Linux 機器時,出現 cannot change locale (UTF-8) 訊息

VS Code 啟用 Emmet 對 Blade 模版的支援

Posted by – December 18, 2017

數個月前拜讀了 為什麼我從 Sublime Text 跳槽 Visual Studio Code? 後,我也試著將日常的開發工作改用 vscode 進行,剛開始還蠻不習慣的,總是同時開著 sublime text 和 vscode,輪著操作。

隨著 vscode 快速迭代,效能與功能進步神速,sublime text 也就越來越少使用了。

最近又有了在 Laravel 底下寫 HTML 的需求。

blade 編寫畫面本身不是什麼困難的事。但是 emmet 在寫 blade 時沒作用還蠻困擾的,一直敲 < /> 令人心煩。

retrieved from https://code.visualstudio.com/blogs/2017/08/07/emmet-2.0

好在家,vscode 1.15 後終於可以啟用 Emmet for Blade,只要在 Setting 加上以下兩組設定即可啟用

"emmet.includeLanguages": {
    "blade": "html"
},
"emmet.triggerExpansionOnTab": true,

 

 

MAMP MySQL 啟動失敗

Posted by – October 7, 2017

原本好好的 MySQL 突然啟動失敗....

我知道現在比較流行 Docker,不過我還有很多舊專案放在 MAMP 裡,也是要維護一下的。

這 MySQL 無法啟動這問題毫無頭緒,還在思考怎麼查 log 時就 google 到解法了

刪除 MAMP/db/mysql56 下的 ib_logfile*

我看我的資料夾有 ib_logfile0 和 ib_logfile1 兩個檔案,刪掉再重啟 MAMP 就正常了

Laravel 4.x WhoopsDisplayer::display() must be an instance of Exception

Posted by – September 28, 2017

有個用 Laravel 4.2 開發的舊專案,近來經常遇到下面這個錯誤

PHP Fatal error: Uncaught TypeError: 
Argument 1 passed to Illuminate\Exception\WhoopsDisplayer::display() 
must be an instance of Exception, instance of ParseError given

找了許多討論都提到是 Laravel 4.x 與 PHP 7 不相容的關係。但我的開發環境有 PHP 5.6 和 PHP 7,似乎前者也有機會發生,十分不解。

每當發生這個 Error 就不會看到真正的 Exception 訊息,debug 十分困擾。

Stackoverflow 上找到一個應急用的解法,可以用在開發環境上....

app/config/local/app.php 的檔案開頭加兩行

set_error_handler(null);
set_exception_handler(null);

暫時搞定了...

CentOS 7 安裝、升級 PHP 5.6

Posted by – September 16, 2017

轉眼間當年幫客戶架設的 server 也好幾年了。隨著程式碼的迭代,server 也到了不得不更新的時候了。不過目標沒有很遠,只要把 PHP 5.4 升到 5.6 就可以了。

把升級的過程筆記一下

首先是更新 EPEL 庫

yum install epel-release

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

接著更新 Remi 庫

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

檢查系統安裝了哪些和 PHP 相關的套件

rpm -qa | grep php

要升級的話要先移除舊套件。因為 PHP 版更,相關的 extension 都要換成相對應的版本才行。注意以下指令可能也會把 phpmyadmin 一起移除

yum remove php-*

啟用 Remi 庫,用編輯器打開以下檔案

/etc/yum.repos.d/remi.repo

找到這一段... 把 enabled 設為 1

[remi-php56]
name=Les RPM de remi de PHP 5.6 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php56/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php56/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

接著安裝 PHP 套件們

yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-mysql

安裝完成後重啟 httpd service 即可

要注意的是 php.ini 會被洗掉哦

HoRNDIS ~ 讓 Android 在 MAC OS 上也能共用 USB 網路

Posted by – August 2, 2017

最近偶然把 iPhone 插上 Macbook 才注意到原來用 USB 連線就可以讓筆電上網... 我之前都是開 WIFI hotspot 功能上網,這方法相對耗電許多.... 😓

More

如何在 Kobo 上安装 KOReader

Posted by – April 30, 2017

入手 Kobo 電子書好幾個月了,入手前就有聽聞 KOReader 這套第三方的韌體

不過因為也不覺得原廠韌體哪裡不好用,所以一直沒進行刷機的動作。直到今天心血來潮想試一下,步驟記錄如下:

以下步驟適用於第一次安裝 KOReader 的閱讀器

第一個部分是安裝 Kobo Start Menu (KSM),最新版本為 08

說明文件與下載地址

  1. 將 Kobo 連接至 PC
  2. 複製 kbmenupngs 資料夾至 Kobo 根目錄
  3. 安全地退出 Kobo
  4. Kobo 自動進行系統更新。更新完畢後確認剛剛放進去的六張圖片都能正常顯示縮圖

之後開機應該會看到一個陽春的選單,這個便是 KSM。

如果你的 Kobo 型號是 Aura One、Aura Edition 2,或是其他韌體版辭高於 4.2.8432 的機種,要安裝這個 patch

  1. 下載附件,解壓縮得到 KoboRoot.tgz
  2. 將 KoboRoot.tgz 複製到 Kobo 的 .kobo 資料夾,注意這是一個隱藏的資料夾
  3. 安全地退出 Kobo
  4. 在 KSM 首頁選擇 "handle update" > "install update" (不要選 "install partial update")
  5. 待 Kobo 更新完成

再來是第二部分,安裝 KOReader

  1. 下載 KOReader。nightly 是開發版,stable 是穩定版,看你想裝哪個,再依裝置選擇檔案
    我目前裝的是 koreader-kobo-arm-linux-gnueabihf-v2015.11-894-gd168db9.zip
  2. 解壓縮檔案,裡面有一個資料夾和三個檔案
  3. 將 koreader 資料夾複製到 Kobo 下的 .add 資料夾,注意這是一個隱藏的資料夾
  4. 安全地退出 Kobo

這樣就完成了。

開機時在 KSM 選擇 KOReader 或是在 Kobo 原介面點選剛丟進去的圖片 switchtokoreader 也可以啟動

 

我先摸索下 KOReader 有什麼功能再繼續報告心得。

Best practice to generate random token in PHP

Posted by – January 10, 2017

在 Stackoverflow 看到一篇超級實用的文:在 PHP 中產生隨機字串的最佳實踐。

產生隨機字串這個看似不起眼的議題實作起來還挺麻煩的,曾經為了如何產生字串跟同事討論了許久。

$length = 16;
$token = bin2hex(openssl_random_pseudo_bytes($length));
# => e9bf18672b051619a3479ecbe1cb7d08

唯一的參數 $length 可以替換成任意整數,產生的字串長度就是 $length *2。

同場加映,Google Chrome 的亂數演算法也有改過

How to Flatten a Multidimensional Array in PHP?

Posted by – January 9, 2017

最近碰到的小需求:如何將多維陣列攤平成一維陣列?....

本來以為 PHP 那巨大的 Lib 會有一個神奇的 function 完成這任務,結果翻了一遍 php.net 的文件,沒有找到這神奇的功能。不過還是有另一個神妙的 function 可以拿來用,那就是 array_walk_recursive,這個 function 會有遞迴的方式走完整個 array,然後看使用者後續想幹嘛...

以攤平一維陣列為例,以下是只保留 value 的作法...

function flatten(array $array) {
  $return = array();
  array_walk_recursive($array, function($a) use (&$return) {
    $return[] = $a; 
  });
  return $return;
}

如此一來就可以將多維陣列轉為一維。若是要保留 key 與 value,要注意 key 名稱是否有重複 (isset)。