標籤

ASP.NET MVC (29) Visual C# (15) JQuery (10) Plugins (8) JQuery Plugins (6) JavaScript (6) CSS (4) LinQ (4) Mac OS (4) MySQL (4) CentOS (3) Design Pattern (3) Entity Framework (3) IIS (3) Python (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) SEO (1) VMware (1) Windows 7 (1) phpBB (1) 面試 (1)

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






2016年7月10日 星期日

[MySQL] Mac 啟動 MySQL 出現「ERROR! MySQL server PID file could not be found! ERROR! The server quit without updating PID file」


今天啟動MySQL服務時出現警告:


ERROR! MySQL server PID file could not be found!
ERROR! The server quit without updating PID file (/usr/local/mysql/data/XXX.pid).

回想一下因為更新brew更動到/usr/local/的目錄權限, 使用chown將目錄權限改回即可運作:


sudo chown _mysql /usr/local/var/mysql/*





Reference:



2016年6月21日 星期二

Mac OS 安裝 .NET Core 與執行 HelloWorld

.NET Core 不需要Mono也可以在MacOS & Linux中執行, 趁著空擋來玩看看, 以下是所有安裝及執行的過程:

1. 更新brew

➜  ~ brew update


2. 透過brew安裝openssl

➜  ~ brew install openssl


3. link openssl

➜  ~ brew link --force openssl


4. 移除之前的版本, 執行sh檔案內容請參考
(https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0/scripts/obtain/uninstall/dotnet-uninstall-pkgs.sh), 這邊我選擇使用vim新增一個sh檔案並把內容複製到檔案內.

➜  ~ vim dotnet-uninstall-pkgs.sh


5.賦予可執行權限

➜  ~ chmod +x dotnet-uninstall-pkgs.sh 


6. 執行
➜  ~ sudo sh dotnet-uninstall-pkgs.sh

Deleting install root - /usr/local/share/dotnet
rm: /usr/local/share/dotnet: No such file or directory
rm: /etc/paths.d/dotnet: No such file or directory

dotnet packages removal succeeded.


7. 下載pkg檔案並且安裝
https://go.microsoft.com/fwlink/?LinkID=798400







8. 建立Helloword專案
➜  mkdir hwapp
➜  cd hwapp

➜  hwapp dotnet new



9. 恢復project.json

➜  hwapp dotnet restore



10. 編譯並執行

➜  hwapp dotnet run




真的有輸出「Hello World」!, 既然如此順便看看編譯後的專案結構與專案原始碼


看起來與原本Windows一樣有bin & obj 資料夾, 原始碼看起來也是與原本.NET環境下相同, 順便看看bin資料夾下有什麼東東...


真的有hwapp.dll檔案~

雖然覺得微軟進入的比較晚, 但也算是重大突破了!



Reference:
https://www.microsoft.com/net/core#macosx


2016年6月20日 星期一

phpBB 安裝流程

PHPBB 是一個開源的論壇, 可以透過簡單的設定就架設於LAMP環境中. 官方網站

以下紀錄安裝過程.

1.先至PHPBB竹貓星球觀看最新版本號, 並確認完整安裝包的下載連結

  • 確認版本 (http://www.phpbb-tw.net/phpbb/viewforum.php?f=6)
  • 3.1.9 (http://phpbb-tw.net/phpbb/viewtopic.php?t=57918)
  • 安裝說明(http://phpbb-tw.net/phpbb/viewtopic.php?t=57024)


2. 使用wget抓取
[root@dev temp]# wget http://phpbb-tw.net/phpbb/download/phpBB-3.1.9.zip


3. MySQL設定 (以下依照實際狀況設定)

  • 建立資料庫phpbbDB
  • 建立使用者phpbbUser
  • 設定密碼phpbbPassword
  • 給定使用者指定資料庫權限


4.解壓縮剛剛下載的檔案
[root@dev temp]# unzip phpBB-3.1.9.zip

5.將解壓完後的資料夾移動至web的根目錄(根據實際狀況可能會不同)
[root@dev temp]# mv phpBB /var/www/html/

6. 改變資料夾權限
[root@dev phpBB]# chmod 777 -R config.php
[root@dev phpBB]# chmod 777 -R cache/
[root@dev phpBB]# chmod 777 -R files/
[root@dev phpBB]# chmod 777 -R store/
[root@dev phpBB]# chmod 777 -R images/avatars/upload/

7. 透過網頁install設定phpBB
直接使用瀏覽器瀏覽http://localhost即可開始進行Web安裝步驟




Reference:





2016年6月15日 星期三

CentOS 6.7 LAMP 安裝過程

最近拿了手邊空的機器複習一下如何安裝LAMP在CentOS6.7上, 安裝紀錄過程有點簡陋請見諒.



1. LAMP

[安裝Apache]
[root@localhost ~]# sudo yum install httpd

[root@localhost ~]# sudo service httpd start

觀看防火牆狀態
[root@localhost ~]# /etc/init.d/iptables status

加入80 port規則
[root@localhost ~]# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重啟防火牆
[root@localhost ~]# /etc/init.d/iptables restart


[安裝MySQL]
[root@localhost ~]# sudo yum install mysql-server

[root@localhost ~]# sudo service mysqld start

設定root密碼
[root@localhost ~]# /usr/bin/mysql_secure_installation
- Set root password? [Y/n]
- Remove anonymous users? [Y/n]
- Remove test database and access to it? [Y/n]
- Reload privilege tables now? [Y/n]


[安裝PHP]
[root@localhost ~]# sudo yum install php php-mysql


[安裝Webmin]
[root@localhost ~]# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.801-1.noarch.rpm
[root@localhost ~]# yum -y install perl perl-Net-SSLeay openssl perl-IO-Tty
[root@localhost ~]# rpm -U webmin-1.801-1.noarch.rpm

加入 10000 port 規則
[root@localhost ~]# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT






[Reference]
https://www.atlantic.net/community/howto/install-lamp-centos-6/
http://os.51cto.com/art/201103/249398.htm
http://www.webmin.com/rpm.html



2016年5月5日 星期四

[心得] 高應大資管碩專班面試


以下為參加高雄應用科技大學 資訊管理系碩士在職專班 的面試內容, 將有印象的部分分享出來給有需要的人參考囉.

1. 自我介紹
- 我想不管是哪位考生都需要回答這題, 這題也是100%面試的必考題, 可事前先充分準備, 因為面試時間只有約5分鐘~10分鐘, 掌握在1分~1分半是比較適當的, 內容建議簡單扼要, 重點儘量放在工作經驗上, 畢竟碩專班的招生對象是在職生, 工作經驗會是面試官比較有興趣的部分.
至於「我的家庭真可愛幸福美滿又安康」能省略就儘量省略囉, 簡短扼要, 不要將寶貴的面試時間浪費囉.


2. 為什麼不同工作的間隔較短
- 因為我本身每一份工作的工作時間都不超過3年, 面試官應該是想要瞭解工作上是否有遇到什麼問題, 我是以本身的工作特性與人格特質去作回答.


3. 目前的工作內容
- 這題應該是面試官想了解你在公司內部扮演的角色是什麼, 是企業主; 中高階主管; 基層小主管, 或是基層員工. 不要過分渲染或是講一些非自身工作內容的事情, 面試官都是面試過無數學生身經百戰的教授, 太誇張的話一定會在接下來的問題中露出馬腳的喔.
*此題也算是面試很容易被問到的問題, 可事先花時間準備.


4. 目前工作時間狀況
- 面試官應該是想了解如果真的錄取你之後, 能不能兼顧工作與課業, 例如天天加班到晚上8點以後, 基本上要上課就很不容易, 也許教授錄取你的意願可能會降低.


5. 目前公司的規模?
- 面試官應該是想了解你的公司大小, 公司在業界的知名度與影響力.


6. 目前工作待遇如何?
- 面試官應該是想了解工作內容與工作待遇是否符合邏輯, 例如工作內容是管理職結果待遇過低, 會造成有違常理的回答.


7. 有想要創業嗎?
- 這題應該沒有標準答案, 教授可能想知道我們的職涯規劃為何 .


[面試結果]
正取


[總結]
在業界打滾多年後, 或多或少可以磨練出應對的能力, 例如下面連結中所提出的問題可當作面試問題的準備:

【在職專班】口試 VS 為何要考在職專班?


提供一個準備口試的心法:「如果你是教授, 為什麼會問這些問題? 你會希望學生怎麼回答呢?」






2016年3月2日 星期三

MySQL 新增table 顯示「Error: Tablespace for table xxx exists. Please DISCARD the tablespace before IMPORT」


前幾天要把某一張MySQL 的xxx table刪除後重新建立,建立時出現:


Error: Tablespace for table xxx exists. Please DISCARD the tablespace before IMPORT


上網google一下,發現是table的.idb檔案還殘留在系統中。

依照stackoverfkow的方法刪除idb檔案後,還是不能create,顯示有foreign key constraint ,原來是當初有人設定foreign key在xxx表的某個欄位,只好找出來把它刪掉,終於成功create table了。

可能當初就是加了foreign key後,沒有先刪除foreign key就直接刪除table所以造成table的.idb檔案殘留吧。




[Reference]:

1.Error: Tablespace for table xxx exists. Please DISCARD the tablespace before IMPORT


2.How do I see all foreign keys to a table or column?