標籤

ASP.NET MVC (29) Visual C# (15) JQuery (10) Plugins (8) JQuery Plugins (6) JavaScript (6) MySQL (5) CSS (4) LinQ (4) Mac OS (4) CentOS (3) Design Pattern (3) Entity Framework (3) IIS (3) Python (3) php (3) LAMP (2) SQL Server (2) WCF (2) Windows (2) .NET (1) .NET Core (1) AWS (1) Browser (1) Docker (1) GIS (1) Internet Security (1) Linux (1) React (1) SEO (1) VMware (1) Windows 7 (1) cookie (1) curl (1) laravel (1) phpBB (1) session (1) 閒言閒語 (1) 面試 (1)

2017年4月26日 星期三

curl 指令如何使用 cookie

curl 是可以取得網頁內容的指令

語法是

➜  ~ curl  "https://www.google.com"

如果想要保持連線狀態的話就必須透過cookie來達成,

curl可以使用檔案方式來讀寫cookie, 語法為-c

➜  ~ curl -c googlecookie "http://www.google.com.tw/"

使用並讀取該cookie的語法為-b

➜  ~ curl -b googlecookie "http://www.google.com.tw/"/"

可用cat觀看cookie保存的資訊:
➜  ~ cat googlecookie   
                             
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
#HttpOnly_.google.com.tw TRUE / FALSE 1509019185 NID 102=K7YGg2AnB0sRuEW2fBj-YlogUpgBellyQFZZ7efgcUFJRjbDE1jLm9ky-aji2F4KEDtCxY6_Pxdu7xBtiKxtgBaCT7nz7gsOzUiMPTVJ0lZHajlOUjVkimkg4YPJrWJ5


如果想要多帶參數, 可以使用-d, 想帶referer網址可以使用--referer

➜  ~ curl -c googlecookie "http://www.google.com.tw/" -d "A=a" -d "B=b" --referer "http://www.google.com.tw/"



Reference:


HTTP Cookies
curl: how to send cookies via command line?


2017年3月21日 星期二

React 讀書會



主講 Andy Tsai

上課資源

React ToDoList投影片
https://hackmd.io/p/rynrUdfoe#/

sample code in github
https://github.com/bbandydd/React_Todolist_Demo

react-bootstrap
https://react-bootstrap.github.io/components.html

React Stateless Functional Components

https://hackernoon.com/react-stateless-functional-components-nine-wins-you-might-have-overlooked-997b0d933dbc#.9xo1qgbav





Reference
從零開始學 ReactJS:給初學者的 React 入門教學書
https://www.gitbook.com/book/kdchang/react101/details

Redux
https://rhadow.github.io/2015/07/30/beginner-redux/

Javascript Introduction
https://hackmd.io/p/r1Igzkvgl#/






2017年2月6日 星期一

PHP MySQL 出現 「Fatal error: Call to undefined method mysqli_stmt::get_result()」

Fatal error: Call to undefined method mysqli_stmt::get_result()

原因是PHP透過MySQLi使用prepare statement, 必須要安裝mysqlnd driver

Mac環境似乎預設就有載入,


Reference:

1. mysqli_stmt::get_result

2. StackOverflow: Call to undefined method mysqli_stmt::get_result

3. MySQL Native Driver





2016年11月22日 星期二

[PHP] Laravel syntax error, unexpected '[' in guzzlehttp/guzzle/src/functions.php on line ...


這幾天重新安裝Laravel時, 發現apache出現PHP錯誤

syntax error, unexpected '[' in guzzlehttp/guzzle/src/functions.php on line



看訊息一開始以為是guzzle http client有錯誤,

查詢後發現原來[]語法代表陣列是PHP5.4之後的版本才支援,

如果是使用PHP5.3或更早版本則會出現語法錯誤(Parse error).

解決方式是將PHP升級至5.4或者更新版本即可.


Reference:

1. i have error in laravel on function /vendor/guzzlehttp/psr7/src/functions.php on line 77 [duplicate]





2016年10月20日 星期四

[閒聊] 我從沒聽說過這間"蘋果"公司, 可以請你跟我多說一點嘛?


I have never heard of this 'Apple' company. 

Can you tell me more about them?


昨天在網路上查找資料, 看到了一個有趣的問答




純粹博君一笑...


















2016年9月13日 星期二

[PHP] PHP的Session外部儲存機制探討

PHP中存取Session可直接對$_SESSION變數做操作,

預設Session會儲存在伺服器中的檔案下, 可以由php.ini中的session.save_path去設定.

在只有單一台Web Server沒有什麼問題, 如果遇到多台Web Server作負載平衡的狀況,

就需要將Session放到外部單一儲存體, 例如MySQL, Redis, Memcached等.


如果PHP是新專案就較好解決, 不少現成的class(Session物件)可以使用,

若是維護PHP舊專案, 且代碼均直接使用$_SESSION變數時,

我們就只能從session.save_handler去下手.

github上也有不少透過save_handler的操作去解決Session儲存體方案, 例如:

1. MySQL

2. Redis

3. MongoDB

其實就是透過註冊以下六個事件(open; close; ...)來指定Session操作時的對應動作

session_set_save_handler('open','close', 'read','write', 'destroy','gc')

分別為開啟; 關閉; 讀取; 寫入; 消滅; 垃圾回收 六種方法.




在套用之前先了解Session的外部儲存讀取及寫入機制是如何運作的,

首先先定義六種事件, 基本上就是單純的echo輸出:



測試Session讀取:

Session讀取結果:



測試Session寫入:
Session寫入結果:



從結果發現, 無論是單獨讀取還是單獨寫入, Session都會呼叫read, write 兩個操作事件,

所以在介接外部儲存體時需要注意讀寫效能問題.

另外註冊的destroy()事件在呼叫session_destroy()方法時就會觸發執行.

而註冊的gc()事件則是由php.ini設定機率(例如1%)去觸發執行.






以上完整範例原始碼放在github

Reference:
http://php.net/manual/en/class.sessionhandler.php




2016年7月14日 星期四

[Design Pattern] 如何在Hello World中濫用(套用) Design Pattern

前幾天看到一篇「The Abuse of Design Patterns in writing a Hello World Program」文章中,示範了如何在最簡單的Hello World程式上,一步步套用不需要的Design Pattern,雖然看著有趣,但我認為對於想了解Design Patterns的人來說,還是有參考的價值的.

原文中的故事很有趣如下:
One comment I saw in a news group just after patterns started to become more popular was someone claiming that in a particular program they tried to use all 23 GoF patterns. They said they had failed, because they were only able to use 20. They hoped the client would call them again to come back again so maybe they could squeeze in the other 3.

Trying to use all the patterns is a bad thing, because you will end up with synthetic designs—speculative designs that have flexibility that no one needs. These days software is too complex. We can’t afford to speculate what else it should do. We need to really focus on what it needs.” – Erich Gamma

上述大意是說有個團隊想要在程式中套用GoF四人幫所有的23種Design Patterns,但是最後失敗了,因為只套用了其中20種,他們希望客戶最後還會請他們將最後3種Design Patterns也套用上去.
使用所有的Pattern不是個好主意,最終會使軟體架構變得太複雜,而且設計了永遠用不到的彈性,其實只要專注在當下產品所需要才是正道.



由於原文是使用Java當作範例,這邊我除了將它改寫為C#外,也加了一些改變:


1. 首先最基本的Hello World:



2. 定義 觀察者模式(Observer Pattern) 的主題與訂閱者



3. 實作主題與訂閱者的類別











4. 命令模式(Command Pattern) 的介面與實作



5. 抽象工廠模式(Abstract Factory) 的介面與實作



6. 單例模式 (Singleton),這邊使用Double checked locking,濫用得徹底一點 XD


7. 讓這複雜的Hello World動起來吧:



8.執行結果,這麼精美的一行...


原文有做了一些結論:


  1. 對於單純了Hello World程式來說太複雜了
  2. 我們加了一些根本就用不到的程式彈性
  3. 整個系統的分析與設計浪費太多時間
  4. 造成了類別爆炸(class explosion)
  5. 違反KISS原則(Keep it simple, stupid!)
  6. 這不是原始程式的目的,原始程式只是在命令列印出一行Hello World,現在這個程式碼離這個目.











Reference:
The Abuse of Design Patterns in writing a Hello World Program