Quantcast
Channel: 小惡魔 – 電腦技術 – 工作筆記 – AppleBOY
Viewing all 325 articles
Browse latest View live

Laravel 不同開發環境設定

$
0
0
Laravel PHP Framework

Laravel 本來預設的 Environment Configuration 是透過 Domain Name 來區分,程式碼 bootstrap/start.php 如下

<?php
$env = $app->detectEnvironment(array(
    'local' => array('your-machine-name'),
));

我們可以根據上述程式碼產生不同的開發環境,像是 develop, production, staging… 等,根據不同的 Domain 給予不同的環境設定檔。但是根據使用 Domain Name 來區分各種不同的環境換產生兩種問題

  • 如果想單一 Domain 跑多種環境?
  • 多個 Domain 增加 Nginx 或 Apache 的設定檔

老實講用 Domain 來分類蠻不方便的,如果突然想要在同一個 Domain 使用不同的環境設定,又要改 Domain mapping。所以 Laravel 也不是強制要使用這方法,我們可以透過增加 environment.php 來決定目前專案跑哪一種環境設定,該程式碼只有一行

<?php

return "production";
/* End of bootstrap/environment.php */

那當然我們也要將 detectEnvironment 改成

$env = $app->detectEnvironment(function() {

    // Defined in the server configuration
    if ( isset( $_SERVER['APP_ENVIRONMENT'] ) ) {
        return $_SERVER['APP_ENVIRONMENT'];

    // Look for ./environment.php
    } elseif ( file_exists( __DIR__ . '/environment.php' ) ) {
        return include __DIR__ . '/environment.php';

    // set default configuration
    } else {
        return 'local';
    }

});

Apaceh 可以直接在設定檔內定義變數如下,Laravel 可以透過 $_SERVER['APP_ENVIRONMENT'] 取環境變數。如果沒有設定 Apache 變數,則讀取 bootstrap/environment.php,最後才會讀取預設值。

SetEnv APP_ENVIRONMENT development

Laravel 4.2 繁體中文文件完整上線

$
0
0
Laravel PHP Framework

Laravel 是目前最火紅的 PHP Framework,但是對於第一次接觸 Framework 的使用者,安裝或學習方面一定會遇到重重困難,而為了降低學習門檻,網路上集結很多好朋友一起加入翻譯,經過了半年時間,快速的完成 4.2 版本的翻譯文件,雖然 4.3 版本在年底即將推出。這次要好好感謝 Facebook Laravel Taiwan 群組,透過台北的小聚會來定期 review 及分配翻譯項目,才可以在這麼短的時間完成翻譯內容,果然團結力量大。目前線上內容已經翻譯完成,但是還需要網路上各位大大來潤稿,Laravel TW 的 Github 在這裡,若要參與翻譯,請直接看 Docs Repo,有人常常問我,不會 Git 可以幫忙嗎?答案是當然可以阿,可以直接將介面切換到瀏覽模式,找到底下符號,按下編輯,修改完成,拉到底下按下送出就可以了喔

laravel_github

最後附上 Laravel 台灣官網,還沒嘗試過 Laravel 可以直接先看中文文件。

快速安裝 Laravel Homestead 環境

$
0
0
Laravel PHP Framework

在看本篇安裝教學前可以參考翻譯完成的 Laravel Homestead,此篇會紀錄如何在 Ubuntu 底下快速架設 Laravel 環境,對於一般新手而言,剛開始安裝 Laravel 開發環境一定會遇到許多問題,為了解決開發環境,Laravel 推出 Homestead 搭配 Vagrant Box,讓初學者不用為環境問題而煩惱,減少浪費時間在架設 Laravel。簡單來說 Laravel Homestead = Vagrant + VirtualBox + Laravel 安裝包。底下簡單幾個步驟就可以完成 Laravel 開發環境。

步驟一:事前準備

由於 Laravel Homestead 是由 Vagrant + VirtualBox 組成,所以環境請先安裝好這兩個套件

假如您是 Windows 開發環境,請多安裝 Bash Tool,完成後你需要透過 Vagrant 下載封裝好的安裝包

$ vagrant box add laravel/homestead

由於檔案還蠻大的,需要一段時間,請耐心等候

步驟二: 安裝 Homestead 程式碼

此部份為 Vagrant 的設定檔,請直接抓取官方 Homestead 程式碼

$ git clone https://github.com/laravel/homestead.git Homestead

步驟三: 設定虛擬目錄

此步驟為設定開發虛擬目錄及相對應主機名稱,請先打開 Homestead.yaml

---
ip: "192.168.10.10"
memory: 2048
cpus: 1

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Code
      to: /home/vagrant/Code

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public

variables:
    - key: APP_ENV
      value: local

這邊需要注意的就是 folderssites 兩項設定,假設今天你有兩個 Laravel 網站需要設定,環境相關路徑如下

# 網站一
主目錄: /home/git/laravel_1
public 目錄: /home/git/laravel_1/public
網域名稱: a.tw
# 網站二
主目錄: /home/git/laravel_2
public 目錄: /home/git/laravel_2/public
網域名稱: b.tw

則我們在 Homestead.yaml 內則設定如下

folders:
    - map: /home/git/laravel_1
      to: /home/vagrant/laravel_1
    - map: /home/git/laravel_2
      to: /home/vagrant/laravel_2

sites:
    - map: a.tw
      to: /home/vagrant/laravel.tw/public
    - map: b.tw
      to: /home/vagrant/laravel.tw/public

步驟四: 設定主機名稱

設定連接虛擬目錄的網域名稱,請打開 /etc/hosts 加入兩行設定

127.0.0.1 a.tw
127.0.0.1 b.tw

之後就可以透過這兩個虛擬網域來開發了

步驟五: 啟動 Vagrant up

最後請在 Homestead 目錄下執行 vagrant up 啟動訊息可以發現底下 port mapping

default: 80 => 8088 (adapter 1)
default: 3306 => 33060 (adapter 1)
default: 5432 => 54320 (adapter 1)
default: 22 => 2222 (adapter 1)

如果 port 已經被佔用,請修改 scripts/homestead.rb

# Configure Port Forwarding To The Box
config.vm.network "forwarded_port", guest: 80, host: 8088
config.vm.network "forwarded_port", guest: 3306, host: 33060
config.vm.network "forwarded_port", guest: 5432, host: 54320

如果你要啟動時更新系統套件及 composer 話請加入底下程式碼

# Copy The Bash Aliases
config.vm.provision "shell" do |s|
  s.inline = "cp /vagrant/aliases /home/vagrant/.bash_aliases"
end

改成

# Copy The Bash Aliases
config.vm.provision "shell" do |s|
  s.inline = "cp /vagrant/aliases /home/vagrant/.bash_aliases"
  s.inline = "sudo apt-get update"
  s.inline = "sudo composer self-update"
end

透過 vagrant ssh 可以登入系統,目前系統預設環境已經升級到 PHP 5.6.0 了,感謝 Laravel 作者更新 Box。

PHP 5.6.0-1+deb.sury.org~trusty+1 (cli) (built: Aug 28 2014 14:55:42) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

如果你的 Hoststead 並非是 5.6.0 環境,請直接透過 vagrant box update 更新 Box。最後補上啟動截圖

快速安裝 Laravel Homestead 環境

在 Windows 上安裝 Sublime Text 2 搭配 PHP-CS-Fixer 套件

$
0
0
Sublime_Text_Logo

由於近幾年來 PHP-Fig 發佈 PSR-0 ~ PSR-4 標準,所以在撰寫 PHP 程式碼時,請依照標準,而為了符合這標準,@fabpot 寫了一個轉換工具叫 PHP-CS-Fixer (PHP Coding Standards Fixer) 最主要目的是按照 PSR-1 and PSR-2 的 Coding Style,只要透過 command 就可以將程式碼轉成標準格式。此篇要紀錄在 Windows 搭配 Sublime Text 安裝 PHP-CS-Fixer。

在 Sublime 編輯器可以使 ctrl + shift + p 後選 Install package 找到 PHPCs 點下安裝即可。打開 Preferences -> Package settings -> PHP Code Sniffer -> Settings,裡面把相關路徑補上去即可。底下是參考設定

{
    // Plugin settings

    // Turn the debug output on/off
    "show_debug": true,

    // Which file types (file extensions), do you want the plugin to
    // execute for
    "extensions_to_execute": ["php"],

    // Do we need to blacklist any sub extensions from extensions_to_execute
    // An example would be ["twig.php"]
    "extensions_to_blacklist": [],

    // Execute the sniffer on file save
    "phpcs_execute_on_save": true,

    // Show the error list after save.
    "phpcs_show_errors_on_save": true,

    // Show the errors in the gutter
    "phpcs_show_gutter_marks": true,

    // Show outline for errors
    "phpcs_outline_for_errors": true,

    // Show the errors in the status bar
    "phpcs_show_errors_in_status": true,

    // Show the errors in the quick panel so you can then goto line
    "phpcs_show_quick_panel": true,

    // The path to the php executable.
    // Needed for windows, or anyone who doesn't/can't make phars
    // executable. Avoid setting this if at all possible
    "phpcs_php_prefix_path": "C:\\xampp\\php\\php.exe",

    // Options include:
    // - Sniffer
    // - Fixer
    // - Mess Detector
    //
    // This will prepend the application with the path to php
    // Needed for windows, or anyone who doesn't/can't make phars
    // executable. Avoid setting this if at all possible
    "phpcs_commands_to_php_prefix": ["Fixer"],

    // What color to stylise the icon
    // https://www.sublimetext.com/docs/3/api_reference.html#sublime.View
    // add_regsions
    "phpcs_icon_scope_color": "comment",


    // PHP_CodeSniffer settings

    // Do you want to run the phpcs checker?
    "phpcs_sniffer_run": true,

    // Execute the sniffer on file save
    "phpcs_command_on_save": false,

    // It seems python/sublime cannot always find the phpcs application
    // If empty, then use PATH version of phpcs, else use the set value
    "phpcs_executable_path": "C:\\xampp\\php\\phpcs.bat",

    // Additional arguments you can specify into the application
    //
    // Example:
    // {
    //     "--standard": "PEAR",
    //     "-n"
    // }
    "phpcs_additional_args": {
        "--standard": "PSR2",
        "-n": ""
    },



    // PHP-CS-Fixer settings

    // Fix the issues on save
    "php_cs_fixer_on_save": true,

    // Show the quick panel
    "php_cs_fixer_show_quick_panel": true,

    // Path to where you have the php-cs-fixer installed
    "php_cs_fixer_executable_path": "C:\\xampp\\php\\php-cs-fixer.phar",

    // Additional arguments you can specify into the application
    //
    // Example:
    // {
    //     "--level": "all"
    // }
    "php_cs_fixer_additional_args": {
        "--level": "all"
    },



    // PHP Linter settings

    // Are we going to run php -l over the file?
    "phpcs_linter_run": true,

    // Execute the linter on file save
    "phpcs_linter_command_on_save": true,

    // It seems python/sublime cannot always find the php application
    // If empty, then use PATH version of php, else use the set value
    "phpcs_php_path": "",

    // What is the regex for the linter? Has to provide a named match for 'message' and 'line'
    "phpcs_linter_regex": "(?P<message>.*) on line (?P<line>\\d+)",



    // PHP Mess Detector settings

    // Execute phpmd
    "phpmd_run": false,

    // Execute the phpmd on file save
    "phpmd_command_on_save": true,

    // It seems python/sublime cannot always find the phpmd application
    // If empty, then use PATH version of phpmd, else use the set value
    "phpmd_executable_path": "",

    // Additional arguments you can specify into the application
    //
    // Example:
    // {
    //     "codesize,unusedcode"
    // }
    "phpmd_additional_args": {
        "codesize,unusedcode,naming": ""
    },


    // PHP Scheck settings

    // Execute scheck
    "scheck_run": false,

    // Execute the scheck on file save
    "scheck_command_on_save": false,

    // It seems python/sublime cannot always find the scheck application
    // If empty, then use PATH version of scheck, else use the set value
    "scheck_executable_path": "",

    // Additional arguments you can specify into the application
    //
    //Example:
    //{
    //  "-php_stdlib" : "/path/to/pfff",
    //  "-strict" : ""
    //}
    "scheck_additional_args": {
        "-strict" : ""
    }
}

這裡面需要注意的是底下參數

"phpcs_php_prefix_path": "C:\\xampp\\php\\php.exe",
"phpcs_commands_to_php_prefix": ["Fixer"],
"phpcs_executable_path": "C:\\xampp\\php\\phpcs.bat",
"php_cs_fixer_executable_path": "C:\\xampp\\php\\php-cs-fixer.phar",
"php_cs_fixer_on_save": true,

如果發現沒作用,請打開 sublime console 介面,請直接按快速鍵 ctrl + ~ 就可以看到哪邊設定錯誤。

Laravel Homestead 開始支援 HHVM

$
0
0
Laravel PHP Framework

Laravel News 看到這篇 Laravel Homestead – Now with HHVM,也就是官方 Homestead 開始支援 HHVM,現在可以直接透過底下指令升級 Box:

$ vagrant box update

版本會從 0.1.8 升級到 0.1.9,升級過程需要一段時間,最後要啟用 HHVM 服務,請在 Homestead.yaml 加入底下設定

sites:
  - map: homestead.app
    to: /home/vagrant/Code/Laravel/public
    hhvm: true

不用煩惱架設 HHVM 環境了,對開發者真是一大幅音。

簡報 GNU Make, Autotools, CMake 簡介

$
0
0

實戰 CodeIgniter in 成功大學計算機與網路中心

$
0
0
CodeIgniter

第一次在校園內推廣 CodeIgniter 這套輕量級 PHP Framework,很高興受到成功大學計算機與網路中心邀請,這次講的是進階 CodeIgniter 操作與實做,所以我把一些常用到的 CodeIgniter Library 包成一包,當成這次訓練課程,其實一天講下來,有認真實做,其實可以學到蠻大量的。但是作業還是要回家完成才可以。底下是我給的投影片

投影片內的作業可以直接參考 CodeIgniter-App 此 Repo 包含了底下常用 Library。

CodeIgniter 終於找到新東家 British Columbia Institute of Technology 英屬哥倫比亞理工學院

$
0
0
CodeIgniter

自從去年 CodeIgniter 宣佈要開始找尋新東家,我就很期待下一個新東家會是誰,終於在今天公佈了新東家 British Columbia Institute of Technology 英屬哥倫比亞理工學院 (BCIT),官方也正式公佈一篇 Your Favorite PHP Framework, CodeIgniter, Has a New Home,去年到現在 EllisLab 就收到大量的候選人信件,但是困難的就是要從一堆候選人中選出一位最適合 CodeIgniter 新雇主,最後決定人選就是 BCIT,BCIT 是一間網路學校,裡面有超過 4 萬 8 千名學生,最重要的是,每年學校都會培養 150 名 CodeIgniter 學生,導入這套 PHP Framework 到業界。

最後會由該學校的 James Parry 擔任 CodeIgniter Project Leader,並且由每年訓練優秀的學生加入此 Project 並且持續貢獻原始碼。看到這裡應該很興奮,因為對於 CodeIgniter 3.0 看起來應該不久之後就可以問世了。新的 Repo 網址也變成

https://github.com/bcit-ci/CodeIgniter


自動修復 JavaScript Linting-errors 好工具 Fixmyjs

$
0
0

前端工程師撰寫 JavaScript 程式碼後一定會透過 JSHint 驗證程式碼品質,但是 JSHint 只會提醒各位開發者哪些代碼需要修正,工程師還是需要手動去修復這些錯誤,這有點麻煩,所以今天來介紹一套自動修正 JSHint 錯誤的好工具 Fixmyjs,如果大家有寫過 PHP,一定有聽過 PHP-FIG 制定了 PSR-0, PSR-1, PSR-2 等標準,希望 PHP 工程師可以遵守這些規則,而 PHP-CS-Fixer 就是根據 PHP-FIG 來自動修復 PHP 程式碼,讓程式碼可以遵守這些共同制定的標準。

Fixmyjs 的出現解決了 JSHint 的問題,但是大家會問 FixMyJS 幫我們解決了哪些問題,請看底下

  • 自動幫忙補上分號 semicolons
  • 強制轉換 camelCase
  • 幫忙移除 debugger 程式碼
  • 執行雙引號或單引號
  • 自動補上空白
  • Mixed spaces/tabs
  • 去除行尾空白
  • 自動轉換 array literal 和 object literal

更多支援請參考這裡,給個範例大家比較有感覺,可以看一下底下程式碼

var a = Array();
var b = Object();
var c = [];
var d
debugger;
delete c;
a == null;
var e = undefined;
var foo = new Foo;
foo([1, 2, 3,]);
a = 1;
a++;
var x = 1;;
a == NaN;
a != NaN
var q = .25;

透過 fixmyjs 指令轉換,可以得到底下結果

var a = [];
var b = {};
var c = [];
var d;
c = undefined;
a == null;
var e;
var foo = new Foo();
foo([
  1,
  2,
  3
]);
a = 1;
a++;
var x = 1;
isNaN(a);
!isNaN(a);
var q = 0.25;

透過命令列可以直接轉換 JavaScript 檔案

$ npm install fixmyjs -g
$ fixmyjs app.js

另外如果有使用 Sublime Text 編輯器可以直接找 sublime-fixmyjs,當然也可以透過 gulp-fixmyjs 來導入自動修復流程。gulp 可以參考底下

gulp.task 'jshint', ->
  gulp.src 'app/assets/js/**/*.js'
    .pipe $.fixmyjs
      legacy: true
    .pipe gulp.dest 'app/assets/js/'
    .pipe $.jshint()
    .pipe $.jshint.reporter 'jshint-stylish'
    .pipe $.if !browserSync.active, $.jshint.reporter 'fail'

如果你將 legacy 設定為 false,你會發現 JavaScript 的空白 Line 會被移除,這已經回報到官方 Issue,所以現在建議大家還是將 legacy 設定為 true 會比較好,否則程式碼會擠成一團 XD

更多介紹可以直接參考 Explorations In Automatically Fixing JavaScript Linting-errors

Laravel Homestead 2.0 介紹

$
0
0
Laravel PHP Framework

在九月寫了 Laravel Homestead 的基礎介紹,最近 Laravel 推出 Laravel Homestead 2.0,在 1.0 套件是沒有支援 homestead 指令,現在 2.0 可以直接使用 homestead 指令,前置安裝 Vagrant + Virtualbox 就不在此介紹了。

安裝 Homestead

如同上面所說,以前是直接 clone homestead 專案下來就包含了全部 config 檔案,2.0 則是直接支援 homestead 指令,可以直接透過 composer 來安裝

$ composer global require "laravel/homestead=~2.0"

完成後可以在使用者目錄發現 ~/.composer/vendor/bin 目錄,此目錄內會含有 homestead 指令,所以只要把 ~/.composer/vendor/bin 寫入到 PATH 變數即可,直接寫到使用者 .bashrc.zhsrc 設定黨內即可,接著如何產生 Homestead 設定檔,請執行底下指令

$ homestead init

到使用者目錄可以看到 ~/.homestead 裡面就含有 Homestead.yaml 設定檔,將此檔案打開

---
ip: "192.168.10.10"
memory: 2048
cpus: 1

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Code
      to: /home/vagrant/Code

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public

databases:
    - homestead

variables:
    - key: APP_ENV
      value: local

可以發現跟 1.0 不一樣的地方在於,現在 2.0 可以直接指定 Databases,以及區域變數。另外在 ~/.homestead 下可以發現多了 after.sh,詳細說明如下

If you would like to do some extra provisioning you may add any commands you wish to this file and they will be run after the Homestead machine is provisioned.

意思是說,中途要增加任何 command 可以將指令寫到 after.sh 後,直接執行 vagrant provision 即可,而不用登入 vagrant ssh。2.0 變化大致如下

  • 支援 homestead 指令
  • 增加 database 及 variables 設定
  • 增加 after.sh

詳細介紹可以參考 Introducing Laravel Homestead 2.0,更多介紹可以參考 Laravel Homestead 官方文件,或者直接看 Laracasts 教學影片

CodeIgniter 搭配 Homestead 開發環境

$
0
0
CodeIgniter

HomesteadLaravel Framework 所提供出來的懶人安裝環境,大幅降低學習 Laravel 的門檻,大家都知道初學一套 Framework 最重要的是快速寫出 Hello world,如果初學者卡在環境都架設不來,那就更加不用接著學習 MVC 架構了,所以 Laravel 提供了 Homestead,不管你是用 Linux 或 Windows 都可以快速的把開發環境架設起來。相信很多人也從 CodeIgniter 跳往 Laravel 框架了,但是舊的網站還是要維護阿,所以這次透過 Laravel Homestead 一起來把 CodeIgniter 開發環境無痛架設起來,省去新人安裝 Nginx + PHP + MySQL 的時間。

這次直接用之前在成功大學電算中心講課的專案來搭配 Homestead,專案為 CodeIgniter-App,如果尚未安裝 Homestead 指令,可以直接參考我上一篇教學 Laravel Homestead 2.0 介紹,接下來我們一步一步安裝,架設環境為 Debian 7.4。

設定 Homestead.yaml

先將 CodeIgniter-App 程式碼下載到 /home/git 目錄,此目錄可以任意指定

$ git clone https://github.com/appleboy/CodeIgniter-App.git /home/git/CodeIgniter-App

打開 ~/.homestead/Homestead.yaml,原版您的 Laravel 專案設定如下

---
ip: "192.168.10.10"
memory: 2048
cpus: 1

authorize: ~/.ssh/id_rsa.pub

keys:
  - ~/.ssh/id_rsa

folders:
  - map: /home/appleboy/newProject
    to: /home/vagrant/Code

sites:
  - map: homestead.app
    to: /home/vagrant/Code/public

databases:
  - homestead

variables:
  - key: APP_ENV
    value: local

這次增加 CodeIgniter 專案如下

folders:
  - map: /home/appleboy/newProject
    to: /home/vagrant/Code
  - map: /home/git/CodeIgniter-App
    to: /home/vagrant/codeigniter-app

sites:
  - map: homestead.app
    to: /home/vagrant/Code/public
  - map: codeigniter.app
    to: /home/vagrant/codeigniter-app/public

databases:
  - homestead
  - app

這裡可以發現增加了一組 folders、sites 和 databases,這樣就設定完成了

啟動 Homestead

完成後直接透過底下指令來產生相對應設定

$ homestead up --provision

注意的是,如果之前的 Laravel 專案資料庫存在的話,執行 --provision 則會砍掉 homestead 資料庫,然後重新建立新的,所以這邊建議執行 --provision 之前,先把舊的 database 拿掉會比較好。或者是要把初始化資料寫到 after.sh 內也是可以的。

#!/bin/sh

# If you would like to do some extra provisioning you may
# add any commands you wish to this file and they will
# be run after the Homestead machine is provisioned.

mysql -uhomestead -psecret app < /home/vagrant/codeigniter-app/sql/app.sql

增加 host

打開 /etc/hosts 增加新的 domain

172.21.117.2 homestead.app
172.21.117.2 codeigniter.app

最後打開瀏覽器 http://codeigniter.app:8000 就可以看到結果了喔

上述的 CodeIgniter-App 專案可以參考 https://github.com/appleboy/CodeIgniter-App

加速 PHP Composer 執行效率

$
0
0
logo-composer-transparent

早上剛起床就看到 DK 發表一篇增加一行程式碼讓 PHP Composer 效率爆增Composer 是 PHP 套件管理工具,現在各大 Framework 都用 Composer 管理套件相依性,但是最讓人擔憂的是,每次執行 composer install 或 update 的時候,機器就會開始哀號,然後等了很久指令才執行完成。今天看到 Github 上 Composer 為了改善執行效率及時間就把 gc disabled。這 commit 引發了很多人迴響,超多搞笑留言圖片。底下有兩種方式可以加速 Composer 執行效率

更新 Composer 到最新版

請透過 composer self-update 將 composer 更新到最新版,因為今天已經將 gc_disable 納入官方程式碼內了。

/**
* Run installation (or update)
*
* @return int 0 on success or a positive error code on failure
*
* @throws \Exception
*/
public function run()
{
    gc_disable();

測試數據如下,原本

$ composer update --dry-run --profile
# Memory usage: 164.29MB (peak: 393.37MB), time: 82.9s

關閉 gc 後

# Memory usage: 163.99MB (peak: 318.46MB), time: 47.14s

如果尚未更新 composer 到最新版,可以透過底下指令:

$ php -d zend.enable_gc=0 composer update --dry-run --profile

其實真正原因是出在 GC,可以參考此留言

This might indeed be a GC issue. If there are many objects created – all of which cannot be cleaned-up. PHP’s GC will kick in frequently trying to clean-up, only to discover that it cannot clean-up anything, and just wastes time/CPU cycles. This might be the reason why you see the effect for big projects (= many objects), but not so much for small projects (= GC is not kicking in frequently). In these cases, disabling GC entirely is a lot faster (at the cost of some more memory consumption ofc). If no-one has checked yet, it might be worth to add gc_disable() to the update/install command.

保留 composer.lock

在還沒有關閉 GC (Garbage Collection) 之前,可以透過 cache 來減少 composer 執行時間,Laravel 本來將 composer.lock 放入 .gitignore 內,現在我們將此行拿掉,也就是不要任意升級版本,避免讓程式 crash 掉。並且透過底下指令來初始化專案,保留 composer.lock 有兩個好處

  • 不會因為 composer update 讓整個專案爛掉
  • Deploy 時 composer install 會直接從本地端抓取相依程式碼

底下為 Deploy 上 Production 時所執行的指令

$ composer install --prefer-dist --no-dev --no-scripts

第一次由於沒有 cache,會比較慢,等到第二次安裝時,就可以減少一大半時間。

解決在 Ubuntu 系統下 Chrome 瀏覽器亂碼

$
0
0
Screenshot from 2014-12-10 22:15:27

UbuntuChrome 瀏覽器一陣子後,突然發現全部的中文介面都變成亂碼,就像上面這張截圖一樣,除了網頁可以正常顯示外,其他像是 Tab 或書籤都變成亂碼,在百度找到這篇解答,解決方式很容易,但是就是不知道原因為什麼這樣改就可以,底下紀錄如何解決此問題。

打開 /etc/fonts/conf.d/49-sansserif.conf 可以看到底下內容

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!--
  If the font still has no generic name, add sans-serif
 -->
        <match target="pattern">
                <test qual="all" name="family" compare="not_eq">
                        <string>sans-serif</string>
                </test>
                <test qual="all" name="family" compare="not_eq">
                        <string>serif</string>
                </test>
                <test qual="all" name="family" compare="not_eq">
                        <string>monospace</string>
                </test>
                <edit name="family" mode="append_last">
                        <string>sans-serif</string>
                </edit>
        </match>
</fontconfig>

找到倒數第四行的 sans-serif 換成 ubuntu 字串,關閉瀏覽器重新開啟即可。

Parse 支援台灣繁體中文文件

$
0
0
parse-logo

Parse 月初宣佈將支援簡體、繁體、日文、韓文等語系的文件,為什麼宣佈此消息呢?其實原因最大就是在 Parse 內部統計,全世界亞洲區的流量成長率高達 90 %,加上全球 15 個最大用戶內,亞洲區就佔了六個 India, Japan, Australia, China, Taiwan, Korea。沒看錯,台灣也是榜上有名。雖然不知道台灣有哪些網站用到了 Parse,我自己最主要用 Parse 的原因就是 Push Notification,公司就不用架設兩套伺服器 AppleGoogle GCM。Parse 提供了 JavaScript, PHP SDK, .NET SDK 等。台灣開發者可以直接線上看繁體中文文件了。

GitLab 快速安裝

$
0
0
gitlab_logo

最近想安裝新版的 GitLab,竟然發現 GitLab 推出快速懶人包,終於可以不用打很多指令來安裝了,大幅降低了安裝困難度,目前支援 CentOS, Ubutnu, Debian 等安裝包,GitLab 各版本也可以從這邊列表找到,另外安裝前請確保你的硬體環境是符合 GitLab 所要求,來看看有沒有這麼簡單安裝。

安裝方式

底下是 Debian 7 安裝方式

wget https://downloads-packages.s3.amazonaws.com/debian-7.7/gitlab_7.6.1-omnibus.5.3.0.ci-1_amd64.deb
sudo apt-get install openssh-server
sudo apt-get install postfix # Select 'Internet Site', using sendmail instead also works, exim has problems
sudo dpkg -i gitlab_7.6.1-omnibus.5.3.0.ci-1_amd64.deb

完成後,你會看到畫面要求您執行 gitlab-ctl reconfigure 來啟動所有服務,檢查服務是否都正常啟動可以透過 gitlab-ctl status 看到底下就代表啟動成功

run: logrotate: (pid 29315) 2180s; run: log: (pid 25339) 2699s
run: nginx: (pid 29886) 2148s; run: log: (pid 25324) 2701s
run: postgresql: (pid 29334) 2179s; run: log: (pid 16414) 3353s
run: redis: (pid 29342) 2179s; run: log: (pid 16313) 3360s
run: sidekiq: (pid 2542) 1282s; run: log: (pid 25303) 2703s
run: unicorn: (pid 2598) 1279s; run: log: (pid 25278) 2704s

如果系統本身有安裝 Nginx,請將 GitLab 預設 80 port 改掉,請修改 /etc/gitlab/gitlab.rb 設定檔,找到底下

nginx['redirect_http_to_https_port'] = 80

修改成

nginx['redirect_http_to_https_port'] = 8088

儲存設定檔後,請重新跑 gitlab-ctl reconfigure 即可,另外對外網址也請設定正確 external_url。另外官方也有寫出 Digital Ocean 也直接推出 One-click install and deploy GitLab,一個月才 10 美金,真是太超過了。


Debian 7.x Install PHP 5.5 或 5.6 版本

$
0
0
screen

Debian 目前預設的 PHP Stable 版本是 5.4.x,由於 Laravel PHP Framework 關係,所以希望升級到 PHP 5.5 或 5.6 版本,只要透過底下操作就可以直接裝 PHP 5.6 版本了

echo "deb http://packages.dotdeb.org wheezy-php56 all" >> /etc/apt/sources.list.d/dotdeb.list
echo "deb-src http://packages.dotdeb.org wheezy-php56 all" >> /etc/apt/sources.list.d/dotdeb.list

完成後請加入 apt key,如果是要安裝 PHP 5.5 請將 wheezy-php56 改成 wheezy-php55

$ wget http://www.dotdeb.org/dotdeb.gpg -O- | apt-key add -

接著更新 apt repository 及安裝 PHP 5.6

$ aptitude update
$ aptitude install php5-cli php5-fpm

如果有安裝 php5-memcached 時,會遇到找不到 libmemcached11 套件,這時候請在 repository list 加入

deb http://packages.dotdeb.org wheezy all

接著再重新安裝一次 php5-memcached 即可

CoffeeScript 轉 ES6

$
0
0
es6-logo

開始嘗試 ES6

最近有時會看看 JavaScript ECMAScript 6 的相關文件,今年也是時候將新專案用 ES6 來撰寫,在還沒使用 ES6 以前,我個人比較偏好使用 CoffeeScriptLiveScript,如果嚐試過 CoffeeScript 後,你會發現轉換成 ES6 是相當容易。網路上可以直接看 6to5 專案,提供 Sprockets, Broccoli, Browserify, Grunt, Gulp, Webpack ..等,要嘗試 ES6 語法轉成 Javascript 可以透過 ES6 repl 介面來嘗鮮。

Classes

來看看用 CoffeeScript 怎麼寫 JavaScript Class:

class Person
  constructor: (@firstName, @lastName) ->

  name: ->
    "#{@first_name} #{@last_name}"

  setName: (name) ->
    names = name.split " "

    @firstName = names[0]
    @lastName = names[1]

boy = new Person "Bo-Yi", "Wu"
boy.setName("Boy Apple")
console.log boy.name()

在 ES6 可以使用 classes, getters, and setters

class Person {
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  get name() {
    return this.firstName + " " + this.lastName;
  }

  set name(name) {
    var names = name.split(" ");

    this.firstName = names[0];
    this.lastName = names[1];
  }
}

var boy = new Person("Bo-Yi", "Wu");
boy.name = ""Boy Apple";
console.log(boy.name);

從上面可以發現 2 點不一樣的地方

  • 可以忽略 function 字串
  • 每個 function 後面不需要分號(;)

Interpolation

ES6 開始支援 Template String,詳細可以參考 Addy Osmani 最新寫的 Getting Literal With ES6 Template Strings

CoffeeScript:

"multi-line strings with interpolation like 1 + 1 = #{1 + 1}"

JavaScript:

"multi-line strings with interpolation like 1 + 1 = " + (1 + 1)

ES6 template strings:

`multi-line strings with interpolation like 1 + 1 = ${1 + 1}`

注意 ES6 並非用雙引號了。所以上面的 get name function 可以改成底下

get name() {
  return `${this.firstName} ${this.lastName}`;
}

Fat Arrows

在寫 Javascript 要如何把目前的 this 綁定到現在函式內,可以透過 CoffeeScript 的 => 符號,現在 ES6 也支援了

純 JavaScript 寫法

var self = this;

$("button").on("click", function() {
  // do something with self
});

CoffeeScript:

$("button").on "click", =>
  # do something with this

ES6:

$("button").on("click", () => {
  // do something with this
});

Default arguments

CoffeeScript 可以定義函式傳入預設值

hello = (name = "guest") ->
  console.log(name)

ES6 現在也可以了

var hello = function(name = "guest") {
  alert(name);
}

Splats functions

PHP 5.6 開始也支援了 Variadic functions,而 CoffeeScript 也有此功能

PHP 5.6:

<?php
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

echo sum(1, 2, 3, 4);
?>

CoffeeScript:

awards = (first, second, others...) ->
  gold = first
  silver = second
  honorable_mention = others

ES6:

var awards = function(first, second, ...others) {
  var gold = first;
  var silver = second;
  var honorableMention = others;
}

Destructuring

Destructuring 讓變數可以直接對應物件或陣列內容

CoffeeScript:

[first, _, last] = [1, 2, 3]

ES6:

var [first, , last] = [1, 2, 3];

我們可以將 set name 函式改成底下

set name(name) {
  [this.firstName, this.lastName] = name.split(" ");
}

結論

更多學習資源可以直接參考 6to5 專案,從現在開始擁抱 ES6 吧。

參考: Replace CoffeeScript with ES6

Laravel 5 PHP Framework 釋出

$
0
0
Laravel PHP Framework

很開心看到 Laravel 作者 Taylor Otwell 能在年前公開 Laravel 5 is Released!,這次連官網也順道一起改版了,經過幾天努力,Laravel Taiwan 也將官網換成新的了,這次 Laravel 5 共釋出 22 個新功能,前端部份也導入新功能叫做 Elixir,另外也將 Scheduler 納入主功能了,非常開心能看到作者開發了好多新功能。由於 Laravel 5 出來了,那接下來就是要翻譯新的文件,請大家可以到 Hackpad 登記翻譯,翻譯完成後送 PR 到 Laravel Taiwan documentation Repo,基本上翻譯過 4.2 版本,把差異性部份補上即可。

Laravel 5 新功能可以直接到 Laracastslaravel 5 Fundamentals 教學影音。

成立 iojs 台灣群組

$
0
0
9950313

昨天在 node.js 台灣群組討論對岸已經成立 iojs-cn,不多說我們也請官方幫忙成立了 iojs-tw,目前的工作只有兩項,就是負責將[ iojs 官網]翻譯成中文,這部份 @cfsghost 已經送 PR 給官方了,另外就是翻譯官方的 Weekly Notes,iojs 每週五都會發布一篇 iojs 的最新動態,我們就是負責將其中文化,上週五已經翻譯好了請參考如下:

io.js 週報 – 2015.02.06

Atom & nw.js 開始採用 io.js, Linux Tracing .. 等等。

每周五我們都會發布關於 io.js 的最新發展。

回顧整個一月份的社群貢獻,io.js 共有 294 次提交,是 Node 近三年來第三活耀的月份,(2012 年 2 月份有 308 次提交)。随着社群貢獻的成長,預計二月份會有更多產出。

  1. 發布 v1.1.0,詳細資訊請參考更新紀錄
  2. Sam Newman lands 簡化了 Stream 建構方法
  3. 正在進行 加入 Linux Tracing (LTTNG) 的工作
  4. 隨著我們加強在 io.js debugging 工作,Google 分享了部分在 V8 和 Chrome 中應用的追蹤技術
  5. Travis CI 增加了 io.js 的支援
  6. Codeship 支持 io.js
  7. Atom 編輯器轉移到 io.js
  8. nw.js(前身是 node-webkit)轉移到 io.js
  9. Tessel 硬體新產品將支援 io.js
  10. Chris Dickinson 增加了 6 位新的貢獻者,活躍的貢獻者目前共有 23 名
  11. 正在制定穩定兼容性策略,歡迎踴躍參加。
  12. 我們開始接受各大公司的反饋意見。如果您有我們遺漏掉的的公司的聯絡方式,請告知我們。
  13. 下週舉行 Node summit,將會有許多演講和與會者。
  14. 技術委員週會
  15. 網站工作群組會議
  16. 追蹤工作會議

原文:io.js Week of February 6th 2015,作者:@iojs,翻譯 @iojs-tw

如要加入 iojs 翻譯請直接到這裡申請

您不可不知的 io.js

$
0
0
9950313

io.js 至今已經成立了快三個月,目前也快速推出到 1.2.0 版本了,相信很多人都不太知道為什麼會多一個 io.js 組織,這組織是 fork 自 Joyent’s Node.js 相容於 npm 原始平台。

為什麼 fork Node.js

這就是大家所好奇的地方,iojs 團員皆來自於 Node.js 核心開發團隊,在去年八月,內部成立了 Node Forward 社群組織來試圖改善 Node.js。

A broad community effort to improve Node, JavaScript, and their ecosystem through open collaboration.

然而總是事與願違,底下就是為什麼要 fork Node.js 主因

Some problems require broader ownership and contributorship than have traditionally been applied, while others are so dispersed between tiny projects that they require new collaborative space to grow. Node Forward is a place where the collaboration necessary to solve these issues can take place.

最終因為商標版權的限制下,核心團員才決定直接 fork Node.js,這就是 io.js 的誕生。Isaac Schlueter (核心開發團員之一) 在部落格發表了一篇心得提到為什麼要這麼做,一個關鍵點,就是未來 io.js 還是希望能夠跟 Node.js 專案合併,而不是現在這樣分成兩個專案。

io.js 新變化

io.js 使用 semantic versioning (semver) 釋出 1.0.0 版本,用此版本來區分 Node.js。jQuery 官方部落格也指出使用 semver 的重要性

One of those best practices is semantic versioning, or semver for short. In a practical sense, semver gives developers (and build tools) an idea of the risk involved in moving to a new version of software. Version numbers are in the form of MAJOR.MINOR.PATCH with each of the three components being an integer. In semver, if the MAJOR number changes it indicates there are breaking changes in the API and thus developers need to beware.

最新 V8 Engine

io.js 更新內部 V8 Engine 到 3.31.74.1 版本,讓開發者可以直接使用 JavaScript ES6 新功能,而不需要加上 --harmony 參數

ES6 新功能

底下的新功能都不用加上任何 Flag 就可以正常使用

新模組

io.js 內建了兩個實驗性新模組

  • smalloc: 讓您透過 allocation/deallocation/copying 存取外部記憶體。
  • v8: 暴露 iojs 中 v8 的 events and interfaces。

更多資料可以直接參考 io.js 版本紀錄.

執行 io.js

執行 io.js 就如同執行 node.js 一樣,只是名稱變了而已

Node.js

$ node app.js

io.js

$ iojs app.js

Node 版本管理

相信大家都是使用 Node version manager (nvm) 工具來管理多個 node 版本,您可以透過底下指令來找到 io.js 版本列表

$ nvm ls-remote v1
    iojs-v1.0.0
    iojs-v1.0.1
    iojs-v1.0.2
    iojs-v1.0.3
    iojs-v1.0.4
    iojs-v1.1.0
    iojs-v1.2.0

個人建議一定要裝上 nvm 工具,此工具可以讓您隨時切換 node 版本,包含 iojs 各版本,確保測試無誤

開始使用 io.js?

這問題很多人一定會問自己,現在要把專案換到 io.js 上了嗎?我個人覺得,舊有專案如果在 Node.js 跑的很順,就不建議切換,如果是新專案,又想跑 JavaScript ES6 Feature,就可以直接嘗試看看跑 io.js 1.2.0 版本。本文翻譯自 Getting to know io.js。如內容有誤,請儘速告知。

Viewing all 325 articles
Browse latest View live