2016年9月19日 星期一

【Mac/Python3】基礎入門(3) - 符號、變數、計算

符號:

首先我們要知道的是
字符串都是用 包著的
那如果字符串裡需要用到這兩款引號時,要怎麼辦呢?
例如 
>>> print(‘I’m nightsnow’)
如果這樣輸入,是會報錯的
這時候我們需要用到 \ 這個轉義來標識
>>> print(‘I\’m nightsnow’) 
I’m nightsnow

\ 這個轉義字符可以轉義很多字符
例給常用的有
\n = 換行
\t = tab 
\\ = \

>>> print(“This is\nnew line”) 
This is 
new line

但當我們需要換很多行時
可以做用 '''…'''
>>>print(‘’’line1 
line2 
line3’’’) 
line1 
line2 
line3

Python的空值是 None
None 不能理解成0喔~

另外Python中的comment 是
#This is a comment
運行時就會自動跳離這句


在字串中想使用特定格式時
例如我們常見的有
"親愛的xxx你好!本月的費用為xxx元!”
這時候我們會使用到佔位符%
>>> print(‘Hi! %s, you have %d apples’ % (‘nightsnow’, 5)) 
Hi! nightsnow, you have 5 apples
常用的佔位符有:
%d = 整數
%f = 浮點數
%s = 字符串

%x = 十六進制整數

變數:

在Python中,如果沒定義變數種類,他會根據變數的值來定義種類
>>> a = 1
這個 a 的種類為 int
>>> a = “abc”
a 的種類變成了string

但如果我們指定了變數的種類,它就不能轉變成其他種類
>>> int a = 1 
>>> a = “abc”
這樣是會報錯的


計算:

值得注意的是除法
python 的除法即使除出來的是整數,最後也會變成浮點數的
>>> print(“9/3=”,9/3) 
9/3= 3.0
如果除出來不是整數
>>> print(“10/3=”,10/3) 
10/3= 3.3333333333333335

如果使用 // 這個符號,除出來的會是整數(下捨入法)
>>> print(“10//3=”,10//3) 
10//3= 3 
>>> print(“10//4=“,10//4) 
10//4= 2




【Mac/Python3】基礎入門(2)-輸出和輸入

輸出:
先來說說 python 是怎樣做輸出動作的
很簡單
使用 print() 指令
>>> print(“Hello World!”)

print() 指令能接受多個字串符,需要使用逗號分隔
>>> print(“I”,”am”,”nightsnow”)
I am nightsnow

print() 會依次輸出,遇到逗號時就會輸出空格


print() 指令也可以打印整數或計算結果, 當然也可以把結果打印得漂亮一點
>>> print(200) 
200 
>>> print(100+100) 
200 
>>> print(“100+200=“,100+200) 
100+200= 300
*python 版本為3以下時,使用逗號是會報錯的
*這時候請用
*>>> print("100+200%d"%100+200)

輸入:
如果想讓 user 輸入一些字串,我們可以使用 input() 指令


(如果python版本是2.7, 請使用 raw_input() 指令)
>>> name = input()
當輸入這一句後,python就會等待 user 輸入,當user輸入完成後,才會回到 >>> 狀態
這一句的意思是,把user輸入的字串存放到name這個變數中

然後當我們 
>>> print(name)
他就會出現user輸入的字串了

然後我們是可以輸入提示訊息,讓user知道自己應該輸入什麼的
name = input(‘Please enter your name:’) 
print(“Hello,”,name)
執行檔案後結果如下
Please enter your name: nightsnow


Hello, nightsnow



【Mac/Python3】基礎入門(1) - 簡介

Python 語言非常簡單易用
Python 可以做什麼? 日常一點的像自動備份,很多著名網站例如Youtube也是用Python寫出來的,亦可以做網站遊戲後台等等

Python 為我們提供了非常完善的代碼庫,覆蓋了網絡,文件,GUI,數據庫,文本等大量內容
被稱作為”內置電池” (Batteries included)
用Python開發,很多功能不需要由零開始,直接用現成的就可以了


安裝Python:
linux 內置是有Python的
如果想更新最新版本要到Python官網下載並安裝

查看是否有 Python:
在終端機輸入 python
看到 >>> 符號就代表我們進入了python環境中了
要離開python環境只需要輸入 exit() 或直接關掉終端機就可以了


Python 的副檔案名字為 .py 
要運行 .py 文件,我們需要 Python解釋器去執行

Python解釋器有好多款,最為廣泛的是CPython
CPython解釋器是在我們下載並安裝好Python後,就會自動獲得的

在終端機輸入 python 進入 python環境後
我們可以試試輸入
>>> 100+100 
200
會看到直接得出result200
如果我們把 100 + 100 放進 testPython.py 裡
然後執行py檔 (記得執行py檔案前要先退出python環境喔)
python testPython.py
如果Python版本為 3 以上, 請使用

python3 testPython.py
發現沒任何輸出的

在py檔案裡,我們必需使用 print() 這個指令
把 100+100 這句改成 print(100+100)
再執行一次testPython.php
就能看到輸出是200了

文本編輯器
人是推介 Pycharm 的

Community 版本是免費的阿



2016年9月8日 星期四

【Linux】Linux command - pipe, cat, tail


pipe 指令

 | <-- 這個符號就是管道(pipe)
pipe 是分隔兩個管線命令的界定
簡單來說
pipe = 把左邊得出的結果丟到右邊去

來個簡單的例子
當我們使用 ls -la
會把目錄下的全部檔案名稱列印在 console 上

當我們只想搜尋某個檔案時
就要使用到 pipe 了
ls -la | grep "Code"

想了解 grep, 請看 【Linux】Linux command - find, grep

會做完 ls -la 後,再找出含有 "Code" 字元的檔案

來張圖就更容易明白了!


這一句意思就是:
ls -la 裡含有 Code 字元的都給朕列印出來!


cat 指令

假如我們不是只想把檔案名字列印出來,而是想把檔案內容列印出來時
就會使用到 cat 指令

cat = 把file所有內容列印到console上

假如我們的 test.php 內容是..
<?
echo "I am test.php";
echo "hihi";
echo "hihi 1";
echo "hihi 2";
echo "hihi 3";
?>

使用 cat test.php 指令時
會把整個 test.php 的內容列入在 console 上

cat 配合 pipe, grep 使用的話
 cat test.php | grep "hihi"

結果是:
echo "hihi 1";
echo "hihi 2";
echo "hihi 3";


tail 指令

以上面 test.php 來做例子
如果我們只想列印最後一行的結果在 console 上

tail = 把file最尾的指定行數列印到console上

使用 tail -n 1 test.php | grep "hihi"
意思是把 test.php 最後一行有 hihi 字元的列印出來

結果是:
echo "hihi 3";



【Linux】Linux command - find, grep


find 指令

我們想查找路徑裡有什麼檔案,檔案名稱是什麼時
就會用到 find 指令

基本用法:
find "資料夾" -name "*.副檔案名"

例子:
find "/home/nightsnow" -name "*.php"

上面這個例子的意思是
把在 /home/nightsnow 路徑裡有的 php 檔案的名字都顯示出來


grep 指令

grep 指令是搜尋檔案內容


find + grep 指令

通常當我們需要搜尋內容出現在哪個檔案時
很常會用到 find + grep 指令

基本用法:
find "資料夾" -name "*.副檔案名" -exec grep "目標" {} \;

例子:
find "/home/nightsnow" -name "*.php" exec grep "welcome" {} \;

上面的例子就是要找出在 /home/nightsnow 路徑內 含有 welcome 字元的 php 檔案


另外在 grep 中有幾個命令參數是比較常用的
-m = 只顯示多少 rows (有時候可能有很多檔案會含有你所搜尋的字元,這樣會顯示超多的檔案,用了 -m 就可以 limit line 了喔)
-n = 顯示檔案內符合指定樣式的 line number
-H = 顯示檔案名稱

例子:
find "/home/nightsnow" -name "*.php" exec grep -m 10 -n -H "welcome" {} \;




2016年9月7日 星期三

【Laravel】基礎入門 (1) - Routing

使用 Laravel, 不得不提及的一定就是 Routing 了
個人認為學 Laravel 最最最最重要的第一步就是 Routing

Routing 機制是決定如何處理 request 的重要角色
現在我們來了解一下 Laravel 的 Routing 機制吧

在我們建立 Laravel 專案後,會看到專案內長這個樣子


好多資料夾和檔案的!!
然後我們需要用到的 route.php 就在 app/Http 裡


--------------------------------------
【基本路由】

打開 route.php , 我們可以看到 Laravel 已經有個簡單易懂的例子


這個例子的意思是
假設我們的網頁連結設成 website.com
那麼我們只要在瀏覽器輸入 website.com
就會顯示 Laravel 預設的歡迎畫面


假如我們想歡迎畫面設定成 website.com/welcome
然後想在 / print out "Hello World!" 這句
那只需要把 / 的 view 改成 return "Hello World!"; , 另外再加一個 /welcome 的 route 就可以了!
Route::get ( '/'function () {
return "HelloWorld";
} );
Route::get ( '/welcome'function () {
return view ( 'welcome' );
} );
view('welcome') 指的是讀取在 resources/views 裡 welcome.blade.php 這個檔案
如果想普通的讀取 php, html 檔案
就在 route.php 的最開頭加上
return View::addExtension(‘html’,’php’);
然後
Route::get ( '/index'function () { return File::get(public_path().’/pages/index.html’);} );
public_path() 指的是讀取 public 路徑

如果我們想網站只能以HTTPS進入
Route::get('/'array('https'function()
{
return 'Must be over HTTPS';
}));
這樣我們就只能 https://website.com 進入了,不然就會顯示 Must be over HTTPS

Route 的 method 除了我們熟悉的 GET 和 POST 外
還有以下很多種的
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);

Route::options($uri, $callback);

--------------------------------------
【透過URL傳遞參數】

假設我們開了 user.php ,裡面我們只是 echo $_GET['name'];
然後使用傳統的PHP GET去傳遞參數,我們的連結會長這樣
http://website.com/user.php?name=nightsnow
很長很不優美,被 user 都知道你用了什麼參數

而使用laravel的route功能,我們只需要
Route::get ('user/{name}'function ($name){
return "User ". $name;
});

加入這個在 route.php 後,在瀏覽器輸入 http://website.com/user/nightsnow
得出的結果就會是 User nightsnow 了!
連結會變得簡潔,而且 user 也不會知道我們的參數名稱

如果這個參數是選擇性的,可填可不填的
我們只需要在參數名稱後加 "?" ,例子如下
Route::get ('user/name/{name?}'function ($name = 'nightsnow'){
return "User". $name;
});


以上例子是給了一個 default 值給 $name
假如user真的沒傳參數過來時
$name 就等於 nightsnow 了

--------------------------------------
【為參數定義Regular Expression(正規表示式)】

為參數定義 Regular Expression, 需要使用 where 指令
Route::get ( 'user/{id}/{name?}'function ($id = 1, $name = "no name") {
return "User " .$id. " = " .$name;
} )->where(array('id' => '[0-9]+','name'=> '[A-Za-z]+'));

在這個例子中,意思就是 id 只能是數字,name 只能是英文字

除了定義指家路徑的 Regular Expression 外, 我們還可以定義全域的
例如很多 Route 都會用到 id 這個參數
而所有的 id 都只能是數字時
我們可以使用 pattern 指令
Route::pattern('id''[0-9]+');
這樣就不必在每個 Route 裡使用 where 來定義 Regular Expression 了!!

--------------------------------------
【為 Route 命名】

為 Route 命名,能方便我們管理,方便做 Redirect 等各項操作
使用 as 來命名
Route::get ( 'user/{id}/profile', [ 'as' => 'profile',function () {
return 'profile';
} ] );
除了 as 外還可以使用 name 的
Route::get('user/{id}/profile’, 'UserController@showProfile')->name('profile');
controller 會在之後的文章再說明~

--------------------------------------
【Redirect 重新導向】

在進行 redirect 之前,我們要先把 Route 命名
例如我們有 beforeRedirect 和 afterRedirect 的 Route
Route::get ( 'beforeRedirect', [ 'as' => 'beforeRedirect',function () {
return redirect()->route('afterRedirect');
} ] );
Route::get ('afterRedirect', ['as' => 'afterRedirect', function (){
return "redirect success";
}]);

然後 redirect() 就是重新導向嚕~
上述例子中,如果在瀏覽器輸入並前往 http://website.com/beforeRedirect
那麼他將會重新導向至 http://website.com/afterRedirect 
如果在畫面上出現 redirect success 這一句,就證明我們成功了!

假如我們 redirect 時需要傳遞參數
我們用命名的 profile route 來做例子
redirect()->route(‘profile’, [‘id’=>1]);
這樣就是 redirect 到 profile route 以及傳遞 id 這個參數了!

--------------------------------------
【Route::group】

當有很多重覆開頭的 Route 時,我們可以用 Route::group 把他們包起來~
例如我們可能會有 user/{id}/profile, user/{id}/name 等等重覆了 user/{id} 的 Route
這時候我們就可以把重覆了的 user/{id} 抽出來放在 prefix 裡
然後用 Route::group 把剩下的包起來
Route::group(['prefix' => 'user/{id}'], function () {
Route::get('name'function ($id) {
echo "name  id = ".$id;
});
Route::get('profile'function ($id) {
echo "profile";
});
});

2016年4月17日 星期日

【iOS】iOS Device Resolution


現在是 iPhone 的款式比以前多了很多
screen size 和 resolution 也比以前多了
寫 iOS app 的你可能會遇上一個問題
什麼圖適合在什麼 device 上呢?
現在 iPhone 的圖暫時分了 @1x, @2x, @3x

不要以為 screen size 越大 resolution 就越高!
這個觀念是錯的喔~
現時最高 resolution 的 device 是 iPhone Plus喔~

iPad 也只是用 @2x 的圖~~

如果想在不同 device 都有高畫質的圖
最好的方法是 provide 3 張圖,用同一名稱,但後面要記得加 @#x
size 的計法也只是 2 倍,3 倍這樣的~

例子:
假設我們有張 100x100 的 image.jpg
那我們的3張圖就分別是...
image.jpg 100x100
image@2x.jpg 200x200
image@3x.jpg 300x300

然後把圖同放進 Xcode Project 裡,Xcode會自動 detect 用家 device 是用什麼圖的~

至於正確的 size 嘛,就提供下圖給大家慢慢觀摩了!!