bestlong 怕失憶筆記

當健忘由隨機逐漸趨向常態時,作筆記是非常必要的

ECShop 解決在新版 PHP 環境會有 Deprecated: preg_replace(): The /e modifier is deprecated 問題

ECShop 改版的速度算是滿落後的,PHP 的都推進到第 7 版本了。所以很多函式基於安全性或其他問題都要被改換掉,只要將 PHP 錯誤報告開到 DEBUG 等級就可以看到一堆警示。不過看起來 ECShop 到 PHP 5.6 版環境都還可以運行。所以有能力的話可以自行解決,至少可以讓開發環境在做修改時能減少這些雜訊與寫入 SSD 的次數。

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in cls_template.php XXX line

以下列出我有修改的部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php //cls_template.php
//-- 原本
return preg_replace("/{([^\}\{\n]*)}/e", "\$this->select('\\1');", $source);
//-- 修改成
return preg_replace_callback("/{([^\}\{\n]*)}/", function($r) { return $this->select($r[1]); }, $source);

//-- 原本
$val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);
//-- 修改成
$val = preg_replace_callback("/\[([^\[\]]*)\]/is", function($r) { return '.'.$r[1]; }, $val);

//-- 原本
$out = "<?php \n" . '$k = ' . preg_replace("/(\'\\$[^,]+)/e" , "stripslashes(trim('\\1','\''));", var_export($t, true)) . ";\n";
//-- 修改成
$out = "<?php \n" . '$k = ' . preg_replace_callback("/(\'\\$[^,]+)/" , function($r) { return stripslashes(trim($r[1],'\'')); }, var_export($t, true)) . ";\n";

//--- 原本
$pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/se';
$replacement = "'{include file='.strtolower('\\1'). '}'";
$source      = preg_replace($pattern, $replacement, $source);
//--- 修改成
$pattern     = '/<!--\s#BeginLibraryItem\s\"\/(.*?)\"\s-->.*?<!--\s#EndLibraryItem\s-->/s';
$replacement = function ($r) { return '{include file='.strtolower($r[1]). '}'; };
$source      = preg_replace_callback($pattern, $replacement, $source);

Leave a Comment

‘vagrant up’ fails to mount linked directory /vagrant

在 vagrant 啟動 CentOS 6 的 VM 時,忽然出現了無法掛載 /vagrant 目錄的錯誤訊息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'chef/centos-6.6' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 80 => 8080 (adapter 1)
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /Users/bestlong/projects/vagrant_vms/chef-centos-66
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=<code>id -u vagrant

,gid=

1
getent group vagrant | cut -d: -f3

vagrant /vagrant
mount -t vboxsf -o uid=

1
id -u vagrant

,gid=

1
id -g vagrant

vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

這是因為在 Guest os 環境內有執行系統更新,因為更新的範圍有包含到 kernal 的部分,所以造成 VirtualBox 的系統工具程式就出問題了。

這時只需要重新安裝一次 VirtualBox Guest Additions kernel modules 應該就可以解決,首先要確認相關的套件都有安裝免得編譯失敗,請執行下列指令:

1
2
[root@localhost ~]# yum update -y
[root@localhost ~]# yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) dkms -y

再來就是安裝 VirtualBox Guest Additions kernel modules

1
2
3
4
5
6
7
[root@localhost ~]# /etc/init.d/vboxadd setup
Removing existing VirtualBox DKMS kernel modules           [  OK  ]
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules     [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]
[root@localhost ~]#

再來就可以重新啟動 Guest OS 確認啟動過程,應該就可以正常掛載 /vagrant 目錄了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'chef/centos-6.6' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 80 => 8080 (adapter 1)
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /Users/bestlong/projects/vagrant_vms/chef-centos-66
==> default: Machine already provisioned. Run <code>vagrant provision

or use the

1
--provision

==> default: to force provisioning. Provisioners marked to run always will still run.

參考資料

https://github.com/mitchellh/vagrant/issues/1657

Leave a Comment

error closing pipe: Bad file descriptor at /usr/lib/git-core/git-svn line 0.

在 ubuntu 14.04 x86_64 環境下將早期使用 subversion 作版本管理的程式專案移轉到 git 時碰到的錯誤訊息

查了網路上有很多資訊,有提到很多可能因素,例如:記憶體不足,或者是 ulimit 的限制…等,但怎麼調整都沒有排除掉錯誤。直到看到有人提到 git version, svn version, 32 bit or 64 bit, Perl version 都是可能原因時,就直接找另一台 CentOS 6.6 x86_64 環境的主機跑看看,還真的就順利過關。

因為是一次性的作業,在更換環境後可以達成目的就不深入研究錯誤原因了。

Leave a Comment

主機搬家到 VPS (DigitalOcean)

隨著地球越來越熱,而常年來放在家中的 Linux 主機不斷的熱力四射,總和攻擊能量已經累積到令人無法忽視的地步,開冷氣進行反攻可是會影響口袋的深度。

換新的電腦應該可以改善,但硬體成本起碼要數千元還要再加上 24H 不關機的每月電費起碼 NTD 三百起跳,再說有實體機器還是會有熱度,想一想還是決定租主機吧。因為在此主機上跑很多種系統與服務,所以需要找 VPS 才能擁有完整的管理權。

網路上很多專業部落客都建議使用 Linode 每月 $10 USD 起價。如果想要更低價的話還有另一個不錯的選擇就是 DigitalOcean 每月 $5 USD 起價,不過相對的規格就會小一些。實際的差異請參考官網,兩家都可以用小時計費。

因為是小站,所以就衝著 512MB RAM / 20GB SSD 每個月只要 5 USD 這麼便宜的特色,就先來用看看。可惜的是 DigitalOcean 沒提供試用時間,但是可以在網路上找一下優惠碼取得一定的使用金額來補償一下,要注意的是一個賬戶只有使用一次優惠碼的機會,我只有找到 10 美金的,所以各位就想辦法找到金額最高的就是了。

申請帳戶基本上就是完成註冊驗證流程提供身份資料與設定付款方式,付款可以用信用卡與 Paypal 兩種,不過有一個重點就是因為 DigitalOcean 目前的服務條款是不退款的,所以用 Paypal 預付時請注意一下。

再來就是要新增虛擬主機了,在 DigitalOcean 稱為 Droplet (水滴) 應該是與公司名稱相關,因為大海是由水滴所累積而成的,可見其雄心壯志。

建立新主機可依下列圖示依序操作,點擊 Create 後輸入主機名稱然後選擇虛擬主機規格

digitalocean - create droplet part 1

然後選擇要放在哪個機房

digitalocean - create droplet part 2

接著就是選擇要安裝何種系統,也可以選擇套裝系統安裝,或從備份擋來還原成新主機

digitalocean - create droplet part 3

digitalocean - create droplet part 4

最後就是點選 Create Droplet 然後系統就會開始依選擇的條件開始建立虛擬主機

digitalocean - create droplet part 5

整個建立過程不到 5 分鐘,完成後系統會寄 mail 通知告知新主機的 ip 位址與 root 密碼,透過 ssh 連線首次登入就是修改密碼。

可以先嘗試一下重開機感受一下令很多人驚訝的速度,大概就 5 秒內就可以再次登入了,真的非常的快。

自己的 VPS 主機是選擇新加坡機房與 DigitalOcean 特調的 Ubuntu 14.04 x64 作業系統版本,剛開始只移轉 blog 過去,也碰到一些狀況,例如:網站會忽然無法連線,用 ssh 登入回應超級慢…等問題,都一一排除之後又陸續移轉其他服務,至今已上線快兩個月算是調整到可以穩定運作了,網頁回應的速度也比以往更順暢,也不必擔心停電或設備老舊故障等瑣碎事項,也算是資訊委外一種模式。

如果各位也想試用的話可以透過我的推薦連結去申請,可以讓我有機會加減省一些費用。

Leave a Comment

入手 MacBookPro Retina 13” 與新手使用心得

原本使用的 17” i7 筆電,隨著年紀增長開始覺得每天背著上下班很重也很占空間,拿去秤重才知道
筆電加上電源居然將近有四公斤,只好調整自己的工作模式後將大筆電改放在座位旁涼伴。不過因為近來開始常常參與社群聚會活動都會需要用筆電,所以又經歷幾次徒步負重行軍後決定要買輕一點的筆電來用。

花了一些時間研究網路資料以及試用了好幾台 Windows 的筆電,總都會有部分不滿意的問題而都在當日或隔日辦理退貨(真要感謝網購提供的服務),其中最扯的狀況莫過於同型機居然會連續兩台開機就有明顯亮點的問題,讓我感覺這難道是神明在給我什麼暗示嗎?

到了假日就去了台中NOVA走走看看,進了某家專賣 Apple 商品的店家,首次與店員認真的詢問與交流,弄清楚 Mac Book 各機種的狀況後,終於在上週三晚上跑去該門市買下了 MBPR 13” 8GRAM 256GFlash 的機種成為蘋果人。

雖然店員交機時花了快一小時逐項說明操作,讓我對 OSX 的使用更快進入狀況,但是對於用了 Windows 超久的人,改變習慣還真是最大的考驗。首先要面對的就是鍵盤的使用(心中的OS:天呀,才剛習慣了 Win 8 的改變)要先記清楚組合鍵的符號有哪些與位置,如果沒有辦法很快記清楚的話,可以進入系統偏好設定中的鍵盤中啟動模擬鍵盤就可以打開模擬鍵盤來看畫面對位置了

啟動模擬鍵盤

顯示模擬鍵盤

OSX 模擬鍵盤

再來就是學習快速鍵的部分,雖然店家有提供一份頻果常用快速鍵的文件說明,不過內容與機器有些對不起來,應該是有舊機種的資料吧,還是去 Apple 官網支援服務看 Mac 入門的文件

Mac 入門 – 改變使用 PC 的習慣

然後就是要學習觸控板的手勢操作,強烈建議一定要學習,可以加快電腦的操作速度。在系統偏好設定中的觸控式軌跡版中就有影像教學,很容易上手,幾乎可以放棄滑鼠了。

OSX 觸控板手勢

接下來就是持續使用一直到成為習慣為止。使用到現在大約十天,其間還去參加了台中前端社群的聚會學習寫Code,當時還不習慣很令人抓狂。不過,整體來說都算滿意,雖然多花了兩倍的預算,但是夠長的電池續航力與打開螢幕即用蓋上螢幕即收的免關機工作效率就很有價值了。

至於配件的部分,大概就是有線網路與外接螢幕或投影機算是基本需求。基於備份考量所以有線網路強烈建議就是至少要用 1G 速度介面的,所以原廠的是首選,因為用 Time Machine 備份的資料量算是很大的,可以少等一些時間。外接螢幕就 VGA 介面基本必備,因為最普遍。

接下來,對筆者來說,就是開始逐步轉換程式開發的作業環境了。

Leave a Comment

  • 工商服務

    廣告讀取中...
  • 近期迴響

  • 標籤

  • 彙整