mapleboard on the table

我是楓葉板社群部落格板主Jonas~歡迎大家多發文、多回應,有任何問題歡迎寫信給我Jonas。                                               目前部落格網站有2個更動:1.草稿位置更改為博主首頁之內2.增加Emoji按鈕(按鈕的最左上角)。請大家留意並多加利用~    

學程式不到幾個月的我,
最近正在嘗試Dolibarr ERP/CRM這套開源軟體的應用。

Dolibarr logo
Image Source by Eldy10

從安裝開始,便遇到了不少SQL語法錯誤的問題,
克服了重重困難之後,我在會計的ledger部份遇到了一個BUG,
New transaction之後Create會出現

ERROR: 55000: currval of sequence "llx_accounting_bookkeeping_rowid_seq

在Mark老師的帶領下,花了一個上午,
我們發現了問題源自於missing $mode in BookKeeping::createStd()。
在我們補上這個變數並測試成功後,
便想著要回饋到Dolibarr上面。

Git

相信很多人都聽過 Git 這個非常有名的version control system吧!
我們commit的第一步就是先安裝git!

sudo apt install git

 安裝好之後我們先做基本設定

Github with Git

開始之前,跟大家分享一下,
我們偉大的Git並不是github開發的軟體,而是Linux之父Linus所寫的,
不過Github提供了我們很方便的遠端空間,可以輕鬆快速建立好git repository。

首先我們要有GitHub的帳號,並且加入RSA or DSA certificate到我們的帳號設定。
請參考Connecting to GitHub with SSH

/dolibarr選擇右上角的Fork,
這樣就會產生我們自己的fork repository了(為了取得對repository的編輯權限)。

接下來Clone and Update

cd where/you/want/to/clone/

(sudo) git clone https://github.com/YourGitHubLogin/dolibarr.git

//Update your repository
(sudo) git pull

check到我們想要的版本(version)

git checkout develop
git checkout x.y

接下來就可以開始安裝或著修改我們的Dolibarr Code了!
改完code以後察看我們的git狀態還有修改的狀態。

git status
git diff subdir/filename

接下來我們先commit到我們 local branch 吧!

git commit -a -m "Commit text"

or

git add /modified/files

git commit

git的最後一步

git push

這樣就會把我們local的commit都送到我們之前在github建立的fork repository了。

接下來我們就要送出pull request給Dolibarr/dolibarr了,
打開瀏覽器首先到我們的fork repository,按下New Pull Request,
選擇你要請求merge的commit然後按下Create!

如果我們的commit沒有問題就會被merge囉!
Screenshot of a commit




I wish i could be a youtuber someday but...

Photo by DanFa from pixabay

我爸從小就教我用Debian,直到現在我突然發現,未來,我想成為一名youtuber,但現在youtuber常用編輯 / 錄影軟體好像都是在windows 或是 mac上,看著面前的Debian 我突然覺得好茫然、好孤單、好邊緣... indecision

有沒有考慮從知識型的youtuber下手嗎?surprise

簡單說來就是在電腦桌面上將你想介紹的內容分享給全世界

像是新軟體開箱介紹、最新資訊整理分享、電腦語言教學等等...

如果是的話那恭喜你laugh,這邊有一個簡單的軟體供你參考 : kazam

有了它,桌面錄影+錄音一切搞定

其他桌面錄影軟體可參考 https://itsfoss.com/best-linux-screen-recorders/

0. 安裝kazam

sudo apt install kazam

1. 基本操作

以下畫面使用peek 軟體擷取 kazam 在 Debian Stretch 上之操作過程,圖片由錄製好的mp4檔透過ffmpeg 輸出png

how to convert videos to image

ffmpeg -i input.mp4 -vf fps=1 out%d.png

點開後會有兩個主要功能可以選擇 畫面錄影(Screencast) 或是 畫面擷取 (Screenshot)

kazam launched

這邊有很多選項可以設定 全螢幕(Fullscreen) / 某特定工作視窗(Window) /  區域錄影(Area

when capturing include (這邊選項會有關是否錄音)

Sound from speakers :  可以同時錄製來自電腦的聲音 (電玩遊玩實況?)

Sound from microphone :  可以同時錄製麥克風的聲音 (講授課程時)

最後一個是錄製前倒數秒數設定

設定完之後按下capture就可以開始了 yes

有耐心的讀者就麻煩先不要按下capture,否則你可能會不知如何停止錄影而感到困擾crying

2. 基本設定

preference

錄影細節設定 Preference要從File的地方開啟

max volume suggested

點選右邊對應的喇叭圖示可調整該項目的錄音音量

這邊建議大家把錄音音量調到最大(原始預設音量幾乎聽不到聲音)

同時也需要注意系統音量大小,以及程式音量(播放器音量,或是youtube播放音量)

framerate and others

這邊是設定錄影影格數(幀數 frame rate) 一般要求至少30以上

輸出格式有 webm / mp4 / raw avi  / huffyuv avi / lossless jpeg avi 可選擇

screenshot configuration

最後這是畫面擷取的設定,因為還沒有用過,所以再麻煩有使用過的同學分享一下使用心得吧。

 

3. 如何停止錄影 !! 我的按鈕呢?crying

好好好,這邊我們馬上來說

一開始小編也是被這情形嚇到了,因為kazam完完全全的消失

所以也不知道到底要如何停止錄影

只知道不馬上停止硬碟就會爆炸surprise

結果上網查了how to stop kazam recording

找到一頁快捷鍵的說明 結果還找不到鍵盤上的super key

https://jee-appy.blogspot.tw/2015/08/kazam-keyboard-shortcuts.html

幸好作者還記得說明super key 其實就是鍵盤上的windows key

https://en.wikipedia.org/wiki/Windows_key#/media/File:Touche_Windows_8_10.jpg

才終於結束這場鬧劇

接著就可以到存好的資料夾位置點開我們剛剛錄影完的結果

 

4. 那我要如何編輯我的影片呢?

試試blenderlaugh

詳細操作可以看看以下影片如何開啟blender中video editor的頁面

打開後就可以把我們剛剛錄下的影片放進去編輯了

import video to blender start from 1:04 (Mikeycal Meyers

之後有時間再來介紹怎麼使用blender編輯video吧




一想到復仇者聯盟,一定容易聯想到鋼鐵人與美國隊長這兩個角色。

此兩個角色的背景與設定,反映了我們對科技的憧憬,及強權國家的印象。

 

這兩年漫威電影系列已到了第三階段。今年《黑豹》的電影更是創下驚人的票房 !!

在第二階段尾巴時, 聯盟裡的角色開始出現不同想法。(尤其Tony Stark和美國隊長..crying

由於各來自不同的背景,也有不同的堅持與見解。雖然不斷在挑戰彼此的價值觀,在找到共識前,還有一段路要走...cheeky

第三階段的角色也開始與第一第二階段的角色拉出差別,這是個很有趣的現象。

《神力女超人》《奇異博士》,到2018年的《黑豹》。對於多元的英雄特質,開始佈線與深入。

 

隨著網路串接起開放與分享風潮,人類也不斷在挑戰彼此的價值觀,看似接受更多衝擊,或許越能開啟彼此的自由。

透過認識差異,我們可以感受自己的特別,同時也感受自己的渺小與孤獨。

三個臭皮匠也能勝過一個諸葛亮...或許AI的出現也是必然,難說未來我們與AI不會相處融洽。

 

黑豹是部很美的電影 

 

影片裡除了高科技的效果外,令人更驚豔的,是黑人的音樂、藝術、文化與崇敬自然的謙卑。

https://www.youtube.com/watch?v=aoddcwQUsbg

(Photo from YouTube)

---------------------- 接下來為劇情簡介,有輕微的雷,請慎入!----------------------

『神秘的瓦干達』: 一個貧窮的非洲國家,卻拒絕任何其他國家的援助。

 

秘訣是什麼...?

 

『汎合金』礦石...  瓦干達藏有豐富的汎金屬,可用來發展科技、交通、武器等等,甚至可以用來治療。

因此,長久以來,瓦干達施行鎖國政策掩飾這些高科技技術,保護自己的國家與人民。

在這裡,女性各個有魄力及個性,人與自然萬物過著和諧且富足的生活。

 

既然如此,又有什麼好看的呢...?(誤)

問題在於…不是所有的黑人都能過著這樣的生活。

前國王 T'Chaka 的弟弟 N'Jobu 出了瓦干達到了其他的國家時,發現其他黑人過著貧窮且痛苦的生活。

他開始對於這個世界有了不同的想法...

但同時他也清楚,家族對於汎合金的守護及嚴格的規定,因此想用偷渡的方式來幫助需要幫助的人。

有這樣想法的人,N'Jobu 不是第一個。

T'Chaka 兒子的女友 Nakia,也不願留在瓦干達過好的生活,情願到外面的世界盡己之所能。

https://www.youtube.com/watch?v=aoddcwQUsbg

(Photo from YouTube)

只是面對著自己的族人與全世界,身為一個國王又如何能掌握這麼多人口呢 ?

面對不同文化的差異及資本主義的遊戲,如果這些資源讓世界其他國家知道了,是不是會讓瓦干達面臨更多的危險與掠奪 ?

繼承著父親的王位 T'Challa 面臨許多掙扎與考驗,本以為跟著父親的腳步就能保護自己的人民。

卻意外地發現過往父親與弟弟 N'Jobu 的爭執... 無形中父親埋下了憤怒的種子...

------------------------------------------------------------------------------------------------------

智者建立橋樑、愚者樹立障礙 — T'Challa

 

身處於台灣這個特殊地理背景的我們,對於"全球化"的這三個字眼應該很耳熟。

不過,"全球市民" 與 "全球公民教育"這幾個字的聽聞就少了點。

>>何謂全球公民教育?  請見 Global Citizenship Education

>>全球公民與實踐和平的責任

簡單的找了幾個網頁,大家可以再多深入了解。

 

當有一天我們能發現彼此的差異不是問題時... 或與和平的實現並不難。




engineer

Photo by geralt from Pixabay

 

世界之大,人生之難;人類總是太過貪心,而我是個豢養20條巴蛇的人類。

一條巴蛇吃頭象,我倒是貪心的什麼都想抓,

還好巴蛇心有餘而力不足,時間是我最大的桎梏。

 

程式這坑真是太深太廣了!凡等如我怎敢貿然踏入呢?!

但見面總是三分情,看久了不認識也面熟,

原已打定主意要每天對視幾眼,但看了艾爾科技公司執行長林宜敬臉書貼文,立馬決定放下屠刀(火速~)

他在文內談了自身從軟體工程師轉為管理職,最後又開始上手寫程式的心路轉折,

還說了個美國軟體業的老笑話,「如果有兩個工程師在同一個團隊,一個很會寫程式,另一個很不會寫程式,

那後來升上經理的,一定是那個不會寫程式的。因為團隊需要那個會寫程式的留下來寫程式。」

 

 

程式與我,我想只需要點好點滿「許願技能」就可以了吧devil

媽媽說:「技能要練習,才能爐火純青、登高造極!」

文末就順道來許個願,我決定不會承認我打了那麼多都是為了要許願而已。

 

【許願】

1.  希望ERP系統工程師可以寫匯率自動更新程式。

     一個月要手動更新三次,我覺得我能夠謹慎地記住幾個月,

     但我對自己的腦沒那麼有信心,大抵一忙就會忘。(關於遺忘,我就異常有信心了!)

 

2.  希望WebDE軟體工程師可以讓你的程式有肉眼般的小小改變,

     我不清楚你在你的程式碼裡如何翻天覆地,

     我只知道我已經連續交了3個禮拜的空白報告啊啊啊啊啊

     時間是把殺豬刀,壓力肯定是把剃頭刀啊!

     工程師大大,小的生平無志,極為愛護頂上幾根毛(阿公說:「頂上無毛,辦事不牢。」阿公啊~是嘴上啦!)

     希望我下禮拜能夠交出篇精彩報告,我不想要鬼剃頭啊(淚奔)




Gnome成員做的草莓提拉米蘇

最近研究了一下Gnome的官方網站,發現還滿有趣的,就連簡單的詞彙都用前衛的語詞來表達,「Swag」(原意是贓物,Gnome把他當作酷炫、新潮的意思)。

 

其中有一個頁面,是Gnome成員們討論關於餐點、做菜的心得,後來甚至做成食譜,作為大家交流的一個重要項目:https://wiki.gnome.org/GnomeCookbook

 

這張食譜挺有意思的,是在做優格,不過以程式的方式來做表現:
https://wiki.gnome.org/GnomeCookbook/GateauAuYaourt

#include 

/* For the record * g_add_food (Container *container, const char *type, float size); */

int main (int argc, char *argv[])
{
    Container *bowl, *mould;

    bowl = g_new (Container, 1);
    g_add_food (bowl, "yogurt", 1);
    g_add_food (bowl, "sugar", sizeof ("yogurt")*2);
    g_add_food (bowl, "eggs", 2);
    g_add_food (bowl, "oil", sizeof ("yogurt")/2);
#ifdef HAVE_VANILLA_SUGAR
    g_add_food (bowl, "vanilla_sugar", 1);
#endif
    g_add_food (bowl, "flour", 3);
    g_add_food (bowl, "cake_yeast", 1);

    mould = g_mould_new_with_butter_and_flour ();
    g_food_reparent (bowl->children, mould);

    g_oven_set_thermostat (6);
    g_oven_set_timer (25);
    g_main_cook ();

    g_print ("Yum");
    return 0;
}

而我們楓葉板社群的人喜歡什麼呢? 我跟幾位MapleWebDE成員討論了一下,發現我們共同且持續在做的一件事情是「跑步」。

跑步這件事對身體很好,而根據根據科學研究,得到了以下的結論:

1.短跑有助於提昇自制力、學習力2.間歇跑(快慢交替跑步訓練)有助於心思敏捷3.長跑有助於大腦一部分機能休息,也就是能讓心靈清澈。

 

當然還有很多的益處,其中令我驚訝的是「跑步讓你更聰明」,以下是在一個關於跑步的科學實驗後,幾位研究相關者的想法:

『這個研究是針對努力跑步的11人與過去一年完全沒有運動的11人的腦部,以MRI進行調查的結果。而結果是有跑步習慣的人與沒有運動的人的腦部有著顯著的差異。……New York Times的Gretchen Reynolds報告說「跑步者的腦中,可以看到更多接續,這些是在不運動的人腦中沒有的。這些接續與高度思考的腦領域有關係」。

這項研究的共同負責人的Gene E. Alexander說到我不認為「跑步只是單純的活動」。「跑步是一項複雜的導航的技巧、計畫能力、視覺化環境並對應的能力、將過去跑步的狀況與現在的狀況比較的能力。另外,還要求有以一定的速度持續進行的能力。是一項非常複雜的活動。」』

 

雖然好處多多,但專家也指出跑步必須先暖身,跑步完收操:『劉又銓醫師指出,運動前應該進行大約10分鐘的暖身,利用「動態伸展」如:抬腿跑、開合跳、肩繞環、毛蟲爬、小跑步、跳繩、踩飛輪等方式,直到呼吸加速、身體微微發汗,正是最適合開始運動的程度。』

『運動後不要立刻停下來,應該進行5~10分鐘的低速跑、快走,接著做「靜態伸展」來收操,放鬆因為運動變得緊繃的肌肉,如此除了減少延遲性肌肉痠痛,更能預防運動後心臟問題的發生。』

藍色跑道

Image Source

 

我們MapleWebDE團隊成員深知跑步的好處,因此只要天氣允許,我們都會去台大操場跑步。台大操場是藍色的,在體育界而言,藍色的操場將有助於運動動員的沉著、理性。剛開始跑時我還不太習慣,但多跑幾次後也感受到心曠神怡、心靈平靜。跑步對身心皆有幫助,各位有空歡迎來台大體驗藍色操場哦。

 

 

資料來源:

https://health.businessweekly.com.tw/AArticle.aspx?id=ARTL000070092

https://www.cw.com.tw/article/article.action?id=5082149

http://www.spa-sauna.com.tw/running-make-you-more-smart/




Man annoyed stares at his laptop

Photo by bruce mars from Pexels

怎麼辦?為什麼我的網站更新完就壞掉了呢?
        沒關係,我覺得我的同事對我有滿滿的善意 wink

同學不用緊張,我們先回顧更新過程發生了什麼事吧!

想知道Linux如何複製隱藏檔請直接看最後一段吧~

 

Drupal Core更新

參考官網的Updating Drupal 8,我們這次使用Update core manually via CLI

一般來說,跟著這篇文章的步驟操作應該沒有什麼問題。
1. 開啟維護模式
2. 刪除 core vendor 資料夾,與所有root層的檔案
3. 如果有修改htaccess, composer.json或robots.txt要備份
4. 有時候更新會修改default.settings.php,這時候要備份原本的設定資料(settings.php),然後複製新版檔案貼上並填入設定資料
5. 複製所有新版drupal檔案與資料夾貼上,因為我們客製模組還有網站files並不存在於我們下載的新版drupal內,所以不會被動到
6. 將3.的備份檔案還原
7. http://www.example.com/update.php,如果沒有辦法以admin登入的話要去settings.php暫時把 $settings['update_free_access'] 打開
8. 以admin登入察看Status report,順利的話就關掉維護模式

 

更新完網站壞掉怎麼辦

原本開開心心更新完網站後,竟然發現除了首頁都 404 not found

(OS:不!我到底做了什麼!Drupal 為什麼要這樣對我!)
(謎之聲:不要再學Mark老師了,你看你裝不下去了吧,Mark老師的文筆不是你這種蔡逼八可以模仿的)
(OS:好der,拜託不要跟大家說我連文章封面圖片都是學Mark老師用同一位攝影師的。)

404 not found 代表說找不到頁面,
也就是說我們的瀏覽器向網路上的這個位置發出請求(request)時,找不到我們想要的網頁。
但是我們Server Apache的設定都沒有調整,Server主機也沒有壞掉,中華電信也沒有壞掉,檔案位置也沒有改變,
為什麼原本可以找到的網頁現在卻不行了呢?

對除了首頁其他頁面都404這個問題google一下後,
我們發現這應該是 /.htaccess 這個檔案出了狀況。
引用 Htaccess 這個模組的介紹:

Drupal tries to provide a one size fits all htaccess for Apache webservers, but this goal is increasingly difficult. This module allows the webmaster to set specific options.

也就是說Drupal對自己整個網站的apache設定可以透過.htaccess來管理,
一般來說照著官網的安裝流程去設定apache時預設的.htaccess應該沒什麼問題,
不過如果你的server有什麼特殊權限設定的話,就需要手動來修改一下這個檔案了。

可是我們以前都照預設的安裝方法沒有問題,這次更新Drupal也沒有修改這個檔案,
到底???

讓人震驚的是,當我們想要去看看我們的.htaccess檔案時,
不見了,沒有了,消失了!

 

Linux如何複製隱藏檔

原來當我們在複製最新的Drupal到我們的網站資料夾時,

cp -r /drupal_8.x.y/ /your/site/folder/

結果會變成

/your/site/folder/drupal_8.x.y

如此你還要把drupal_8.x.y內的檔案往上mv一層然後刪掉空的drupal_8.x.y
所以我們可能會加上*說要資料夾下所有檔案到指定資料夾下

cp -r /drupal_8.x.y/* /your/site/folder/

不過這樣會有一個問題是,file system預設*是不讀取.開頭的檔案,有一種解法是去修改這項設定,不過其實我們可以很簡單的不用*改成.就解決了!(指定從.開頭開始讀取)

cp -r /drupal_8.x.y/. /your/site/folder/

 




https://www.youtube.com/watch?v=WB5-s-mJKPw

All Photos from YouTube

---------------------------------------------------------------

這裡不只賣日常生活用品,還提供消煩解憂的諮詢。

困惑不安的你,糾結不已的你,歡迎來信討論心中的問題...

 

如果有一個地方,可以回應我們的煩惱……你願意說出來嗎?   (以下有雷慎入)

https://www.youtube.com/watch?v=WB5-s-mJKPw

(Photo from YouTube)

只要在晚上把自己的煩惱信放入雜貨店的鐵捲門,隔天可以在門後的牛奶箱收到回信。

雜貨店老闆從解決小學生的問題開始,培養了鼓勵人的興趣,常在深夜思索如何回應寄信者的問題。

音樂夢還沒實現,面臨父親身體狀況直下,掙扎著是否要放棄夢想來經營家裡的魚店...

為了讓養父母能還清貸款,在酒店當有錢人的情婦…但總覺得做不太來...該怎麼辦..?

沒有感情結果的情況下懷了孩子,我是否要把這個孩子生下來...?

https://www.youtube.com/watch?v=WB5-s-mJKPw

(Photo from YouTube)

『回信,只是希望那個人能得到幸福...』

 

30年後,雜貨店收店的同一天,三個少年意外闖入已經廢棄的雜貨店空屋。

這些信件紛紛投入雜貨店裡,讓他們意外的與30年前的人產生連結。

三人剛做完壞事,本來是打算在雜貨店老屋躲過警察。閱讀到這些信件,卻忍不住想回信給寫信的人,就好像看船要沉了,不能忍受自己在旁袖手旁觀。

即使現在失敗及迷惘的我,也能回應對方什麼好的建議嗎?收到第一封回信後,發現原來自己也可以使別人幸福。一封封看似簡短嚴厲的信件,卻反應出少年們設身處地的溫柔叮嚀,彷彿回到雜貨店老爺爺般糾結的思索...

『會不會有人因為我的建議而沒有過得更好...?』

https://www.youtube.com/watch?v=WB5-s-mJKPw

(Photo from YouTube)

美麗的誤會,串起了這一串人事物的奇遇。透過簡單的信紙與文字,反而更能反映出我們的共通性:煩惱、迷惘、探索人生的意義、期待對方幸福...等。

一次又一次的解憂過程裡,看似燒己煩惱之薪,卻也間接的湧現出迷惘裡的勇氣,與改變的動力。

看似很小的一個解憂舉動,卻改變了對方的一生。如果不是真心遇上真心,又何能真正在彼此的生命中產生出影響呢...?

『我的回答之所以發揮了作用,原因不是別的,是因為他們自己很努力...

如果自己不想積極認真地生活,不管得到什麼樣的回答都沒用。』

收到來自於30年後的感謝信,雜貨店爺爺很高興,也很感動。原來這些年來的努力都沒有白費...即使30年後,也有人繼續傳承著...




Installing Symfony should be easy though

Photo by bruce mars from Pexels

我按照官網說明將symfony安裝完了,但是他不會動。我覺得這個世界對我有著滿滿的惡意angry

 

同學請冷靜 我們這次就來看看symfony安裝時會出現哪些問題吧

0. 軟體安裝需求

由於目前最新版本為4.1,但4.0以後php要求為7.1以上,而debian stretch 目前php只支援到7.0,所以大家可以依照自己os安裝的php版本來決定要安裝那一版的symfony,簡單整理如下:

debian stretch (php7.0)  =>  symfony 3.4

debian buster (>php7.1) => symfony 4.1

當然如果你會自己compile php7.1 library 就不在此限制範圍內smiley

 

1.安裝symfony前置作業

因為在安裝symfony時會經常用到兩個指令composer 以及 symfony,所以就先來安裝這兩個吧

symfony︰

用途說明︰使用symfony 2或3 建構網站時官方建議的安裝工具

安裝詳細介紹︰https://symfony.com/doc/3.4/setup.html


 sudo mkdir -p /usr/local/bin
 sudo curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony
 sudo chmod a+x /usr/local/bin/symfony

這邊可能又會遇到一個問題就是curl指令找不到 ><

如果發生這個問題,請執行以下指令後,繼續完成前面的安裝步驟

sudo apt install curl

composer :

用途說明︰基本上在製作網站常常會使用到現成的library而library有時可能會有版本過舊或是和現有library衝突的情況發生,這個composer就是有能力可以來處理這些麻煩的問題,讓你可以放心使用安裝library而不怕彼此衝突

安裝詳細介紹︰https://getcomposer.org/download/

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

此處程式碼為安裝說明用。請勿使用此處的程式碼安裝,因為hash_file比對碼有可能更動,詳細請至composer 官網查看

這邊完成以後會看到有一個 composer.phar 檔案 但因為還沒安裝到 /usr/local/bin 所以目前還沒辦法像symfony安裝完就可以在console中打symfony就可以直接執行,所以這邊提供兩種解法︰

1.把上面第三行換成

php composer-setup.php --install-dir=usr/local/bin --filename=composer

2.參考symfony安裝方法將目前的composer.phar安裝到  /usr/local/bin

 sudo mv composer.phar /usr/local/bin/composer
 sudo chmod a+x /usr/local/bin/composer

這邊有注意到的人會發現為什麼我們要把composer.phar 改名成 composer?

因為之後你在看symfony 或是其他網頁教學,很少有機會看到教學文章中提到 composer.phar 這個指令,大多數時間你只會看到composer,而他們其實代表的視同一個指令 ,所以為了後續操作方便以及學習更容易,改名是有需要的。

 

2. My first symfony project 

這一步就是關鍵所在,後來我在官網上看了一下發現其實有兩種作法

4.0 以前 筆者之前在建立新網站是用以下方法

https://symfony.com/doc/3.4/setup.html

由於目前已更新到4.1所以預設會是以4.1來建立新網站,這邊請加上symfony版本數(3.4)

symfony new my-project 3.4

如果不想透過symfony安裝,也可以使用以下方法

composer create-project symfony/framework-standard-edition my-project "3.4.*"

4.0 以後 官網似乎鼓勵使用 composer create-project 方式來架構新網站

https://symfony.com/doc/current/setup.html

composer create-project symfony/website-skeleton my-project

好笑的是在download,4.0以後官方建議以下方式建立新網站

https://symfony.com/download

composer create-project symfony/skeleton my_project

所以這樣一共就有四種安裝方式 crying

其中差異我們在下一段再談

先講講第一個建立的網站(使用4.0以前建立方法)如何使用內建php-server來看結果

 cd my-project/
 php bin/console server:run

這時候console會提示說網頁可以到哪邊觀看

將該網址貼到瀏覽器後就可以看到我們的第一頁

first page shown after project created

至於如何製作第一頁我們就留到下次再做介紹吧。

 

3. 差異比較

symfony new test_1 3.4

這個安裝基本上照說明進行就可以順利完成

 Preparing project...

 ✔  Symfony 3.4.6 was successfully installed. Now you can:

    * Change your current directory to /home/XXX/Desktop/test/test_1

    * Configure your application in app/config/parameters.yml file.

    * Run your application:
        1. Execute the php bin/console server:start command.
        2. Browse to the http://localhost:8000 URL.

    * Read the documentation at https://symfony.com/doc


composer create-project symfony/framework-standard-edition test_2 "3.4.*"

這個安裝基本上照說明進行就可以順利完成

Installing symfony/framework-standard-edition (v3.4.6)
  - Installing symfony/framework-standard-edition (v3.4.6): Downloading (100%)         
Created project in test_2
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 38 installs, 0 updates, 0 removals
  - Installing doctrine/lexer (v1.0.1): Loading from cache
  - Installing doctrine/annotations (v1.2.7): Downloading (100%)         
  - Installing twig/twig (v1.35.2): Downloading (100%)         
  - Installing paragonie/random_compat (v2.0.11): Loading from cache
  - Installing symfony/polyfill-php70 (v1.7.0): Downloading (100%)         
  - Installing symfony/polyfill-util (v1.7.0): Downloading (100%)         
  - Installing symfony/polyfill-php56 (v1.7.0): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.7.0): Loading from cache
  - Installing symfony/symfony (v3.4.6): Downloading (100%)         
  - Installing symfony/polyfill-intl-icu (v1.7.0): Loading from cache
  - Installing symfony/polyfill-apcu (v1.7.0): Loading from cache
  - Installing psr/simple-cache (1.0.1): Downloading (100%)         
  - Installing psr/log (1.0.2): Loading from cache
  - Installing psr/link (1.0.0): Loading from cache
  - Installing psr/container (1.0.0): Loading from cache
  - Installing psr/cache (1.0.1): Loading from cache
  - Installing fig/link-util (1.0.0): Loading from cache
  - Installing doctrine/inflector (v1.1.0): Downloading (100%)         
  - Installing doctrine/collections (v1.3.0): Downloading (100%)         
  - Installing doctrine/cache (v1.6.2): Loading from cache
  - Installing doctrine/common (v2.6.2): Downloading (100%)         
  - Installing jdorn/sql-formatter (v1.2.17): Loading from cache
  - Installing doctrine/doctrine-cache-bundle (1.3.2): Loading from cache
  - Installing doctrine/dbal (v2.5.13): Loading from cache
  - Installing doctrine/doctrine-bundle (1.8.1): Loading from cache
  - Installing doctrine/instantiator (1.0.5): Loading from cache
  - Installing doctrine/orm (v2.5.14): Loading from cache
  - Installing incenteev/composer-parameter-handler (v2.1.3): Downloading (100%)         
  - Installing composer/ca-bundle (1.1.0): Loading from cache
  - Installing sensiolabs/security-checker (v4.1.8): Downloading (100%)         
  - Installing sensio/distribution-bundle (v5.0.21): Loading from cache
  - Installing sensio/framework-extra-bundle (v5.1.6): Loading from cache
  - Installing monolog/monolog (1.23.0): Loading from cache
  - Installing symfony/monolog-bundle (v3.2.0): Downloading (100%)         
  - Installing swiftmailer/swiftmailer (v5.4.9): Downloading (100%)         
  - Installing symfony/swiftmailer-bundle (v2.6.7): Loading from cache
  - Installing sensio/generator-bundle (v3.1.7): Loading from cache
  - Installing symfony/phpunit-bridge (v3.4.6): Downloading (100%)         
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
symfony/polyfill-intl-icu suggests installing ext-intl (For best performance)
doctrine/doctrine-cache-bundle suggests installing symfony/security-acl (For using this bundle to cache ACLs)
sensio/framework-extra-bundle suggests installing symfony/psr-http-message-bridge (To use the PSR-7 converters)
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
symfony/phpunit-bridge suggests installing ext-zip (Zip support is required when using bin/simple-phpunit)
Generating autoload files
> Incenteev\ParameterHandler\ScriptHandler::buildParameters
Creating the "app/config/parameters.yml" file
Some parameters are missing. Please provide them.
database_host (127.0.0.1): 
database_port (null): 
database_name (symfony): 
database_user (root): 
database_password (null): 
mailer_transport (smtp): 
mailer_host (127.0.0.1): 
mailer_user (null): 
mailer_password (null): 
secret (ThisTokenIsNotSoSecretChangeIt): 
> Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap
> Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache

 // Clearing the cache for the dev environment with debug                       
 // true                                                                        

                                                                                
 [OK] Cache for the "dev" environment (debug=true) was successfully cleared.    
                                                                                

> Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::installAssets

 Trying to install assets as relative symbolic links.

                                                                                
 [OK] No assets were provided by any bundle.                                    
                                                                                

> Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::installRequirementsFile
> Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::prepareDeploymentTarget

composer create-project symfony/website-skeleton test_3 

這次資料夾結構就有些不同

1.沒有app

2.沒有web

而至於首頁無法顯示是因為

1. 不存在對應的頁面 (之前有appbundle/defaultcontroller.php負責顯示此頁面,這次沒有安裝這個檔案,所以自然是連不上此頁面)

同時也可以透過 php bin/console debug:router 觀察到並不存在此路徑

Installing symfony/website-skeleton (v3.4.4)
  - Installing symfony/website-skeleton (v3.4.4): Loading from cache
Created project in test_3
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 89 installs, 0 updates, 0 removals
  - Installing ocramius/package-versions (1.2.0): Loading from cache
  - Installing symfony/flex (v1.0.70): Loading from cache

Prefetching 32 packages 
  - Downloading (100%)

  - Installing doctrine/lexer (v1.0.1): Loading from cache
  - Installing doctrine/inflector (v1.2.0): Loading from cache
  - Installing doctrine/collections (v1.4.0): Loading from cache
  - Installing doctrine/cache (v1.6.2): Loading from cache
  - Installing doctrine/annotations (v1.4.0): Loading from cache
  - Installing doctrine/common (v2.7.3): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.7.0): Loading from cache
  - Installing symfony/yaml (v3.4.6): Loading from cache
  - Installing symfony/webpack-encore-pack (v1.0.2): Loading from cache
  - Installing psr/link (1.0.0): Loading from cache
  - Installing fig/link-util (1.0.0): Loading from cache
  - Installing symfony/web-link (v3.4.6): Loading from cache
  - Installing symfony/filesystem (v3.4.6): Loading from cache
  - Installing symfony/config (v3.4.6): Loading from cache
  - Installing symfony/http-foundation (v3.4.6): Loading from cache
  - Installing symfony/event-dispatcher (v3.4.6): Loading from cache
  - Installing psr/log (1.0.2): Loading from cache
  - Installing symfony/debug (v3.4.6): Loading from cache
  - Installing symfony/http-kernel (v3.4.6): Loading from cache
  - Installing psr/container (1.0.0): Loading from cache
  - Installing symfony/dependency-injection (v3.4.6): Loading from cache
  - Installing egulias/email-validator (2.1.3): Loading from cache
  - Installing swiftmailer/swiftmailer (v6.0.2): Loading from cache
  - Installing symfony/swiftmailer-bundle (v3.2.0): Loading from cache
  - Installing symfony/translation (v3.4.6): Loading from cache
  - Installing symfony/validator (v3.4.6): Loading from cache
  - Installing symfony/serializer (v3.4.6): Loading from cache
  - Installing symfony/inflector (v3.4.6): Loading from cache
  - Installing symfony/property-info (v3.4.6): Loading from cache
  - Installing symfony/property-access (v3.4.6): Loading from cache
  - Installing psr/simple-cache (1.0.1): Loading from cache
  - Installing psr/cache (1.0.1): Loading from cache
  - Installing symfony/polyfill-apcu (v1.7.0): Loading from cache
  - Installing symfony/cache (v3.4.6): Loading from cache
  - Installing webmozart/assert (1.3.0): Loading from cache
  - Installing phpdocumentor/reflection-common (1.0.1): Loading from cache
  - Installing phpdocumentor/type-resolver (0.4.0): Loading from cache
  - Installing phpdocumentor/reflection-docblock (4.3.0): Loading from cache
  - Installing symfony/serializer-pack (v1.0.1): Loading from cache
  - Installing symfony/security (v3.4.6): Loading from cache
  - Installing symfony/security-bundle (v3.4.6): Loading from cache
  - Installing symfony/process (v3.4.6): Loading from cache
  - Installing monolog/monolog (1.23.0): Loading from cache
  - Installing symfony/monolog-bridge (v3.4.6): Loading from cache
  - Installing symfony/monolog-bundle (v3.2.0): Loading from cache
  - Installing symfony/routing (v3.4.6): Loading from cache
  - Installing symfony/finder (v3.4.6): Loading from cache
  - Installing symfony/class-loader (v3.4.6): Loading from cache
  - Installing symfony/framework-bundle (v3.4.6): Loading from cache
  - Installing symfony/console (v3.4.6): Loading from cache
  - Installing zendframework/zend-eventmanager (3.2.0): Loading from cache
  - Installing zendframework/zend-code (3.1.0): Loading from cache
  - Installing ocramius/proxy-manager (2.0.4): Loading from cache
  - Installing doctrine/dbal (v2.5.13): Loading from cache
  - Installing doctrine/migrations (v1.5.0): Loading from cache
  - Installing symfony/doctrine-bridge (v3.4.6): Loading from cache
  - Installing doctrine/doctrine-cache-bundle (1.3.2): Loading from cache
  - Installing jdorn/sql-formatter (v1.2.17): Loading from cache
  - Installing doctrine/doctrine-bundle (1.8.1): Loading from cache
  - Installing doctrine/doctrine-migrations-bundle (v1.3.1): Loading from cache
  - Installing doctrine/instantiator (1.0.5): Loading from cache
  - Installing doctrine/orm (v2.5.14): Loading from cache
  - Installing symfony/orm-pack (v1.0.5): Loading from cache
  - Installing symfony/options-resolver (v3.4.6): Loading from cache
  - Installing symfony/polyfill-intl-icu (v1.7.0): Loading from cache
  - Installing symfony/intl (v3.4.6): Loading from cache
  - Installing symfony/form (v3.4.6): Loading from cache
  - Installing symfony/expression-language (v3.4.6): Loading from cache
  - Installing symfony/var-dumper (v3.4.6): Loading from cache
  - Installing symfony/phpunit-bridge (v3.4.6): Loading from cache
  - Installing twig/twig (v2.4.6): Loading from cache
  - Installing symfony/twig-bridge (v3.4.6): Loading from cache
  - Installing symfony/web-profiler-bundle (v3.4.6): Loading from cache
  - Installing symfony/twig-bundle (v3.4.6): Loading from cache
  - Installing symfony/stopwatch (v3.4.6): Loading from cache
  - Installing symfony/profiler-pack (v1.0.3): Loading from cache
  - Installing easycorp/easy-log-handler (v1.0.4): Loading from cache
  - Installing symfony/debug-bundle (v3.4.6): Loading from cache
  - Installing symfony/debug-pack (v1.0.4): Loading from cache
  - Installing symfony/asset (v3.4.6): Loading from cache
  - Installing sensio/framework-extra-bundle (v5.1.6): Loading from cache
  - Installing symfony/dom-crawler (v3.4.6): Loading from cache
  - Installing symfony/browser-kit (v3.4.6): Loading from cache
  - Installing symfony/css-selector (v3.4.6): Loading from cache
  - Installing symfony/dotenv (v3.4.6): Loading from cache
  - Installing symfony/maker-bundle (v1.1.1): Loading from cache
Writing lock file
Generating autoload files
ocramius/package-versions:  Generating version class...
ocramius/package-versions: ...done generating version class
Symfony operations: 20 recipes (a4bdff63f5fbfdd018d5869c7cceef35)
  - Configuring symfony/flex (>=1.0): From github.com/symfony/recipes:master
  - Configuring symfony/framework-bundle (>=3.3): From github.com/symfony/recipes:master
  - Configuring doctrine/annotations (>=1.0): From github.com/symfony/recipes:master
  - Configuring symfony/webpack-encore-pack (>=1.0): From github.com/symfony/recipes:master
  - Configuring symfony/swiftmailer-bundle (>=2.5): From github.com/symfony/recipes:master
  - Configuring symfony/translation (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/security-bundle (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/monolog-bundle (>=3.1): From github.com/symfony/recipes:master
  - Configuring symfony/routing (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/console (>=3.3): From github.com/symfony/recipes:master
  - Configuring doctrine/doctrine-cache-bundle (>=1.3.2): From auto-generated recipe
  - Configuring doctrine/doctrine-bundle (>=1.6): From github.com/symfony/recipes:master
  - Configuring doctrine/doctrine-migrations-bundle (>=1.2): From github.com/symfony/recipes:master
  - Configuring symfony/phpunit-bridge (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/web-profiler-bundle (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/twig-bundle (>=3.3): From github.com/symfony/recipes:master
  - Configuring easycorp/easy-log-handler (>=1.0): From github.com/symfony/recipes:master
  - Configuring symfony/debug-bundle (>=3.3): From github.com/symfony/recipes:master
  - Configuring sensio/framework-extra-bundle (>=4.0): From github.com/symfony/recipes:master
  - Configuring symfony/maker-bundle (>=1.0): From github.com/symfony/recipes:master
Executing script cache:clear [OK]
Executing script assets:install --symlink --relative public [OK]

Some files may have been created or updated to configure your new packages.
Please review, edit and commit them: these files are yours.

              
 What's next? 
              

  * Run your application:
    1. Change to the project directory
    2. Execute the php -S 127.0.0.1:8000 -t public command;
    3. Browse to the http://localhost:8000/ URL.

       Quit the server with CTRL-C.
       Run composer require server --dev for a better web server.

  * Read the documentation at https://symfony.com/doc

                        
 Database Configuration 
                        

  * Modify your DATABASE_URL config in .env

  * Configure the driver (mysql) and
    server_version (5.7) in config/packages/doctrine.yaml

              
 How to test? 
              

  * Write test cases in the tests/ folder
  * Run php bin/phpunit

 

composer create-project symfony/skeleton test_4 

主要vendor內容只留下最精簡內容,應該是給進階使用者開發用
 

Installing symfony/skeleton (v3.4.5)
  - Installing symfony/skeleton (v3.4.5): Loading from cache
Created project in test_4
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 23 installs, 0 updates, 0 removals
  - Installing symfony/flex (v1.0.70): Loading from cache
  - Installing psr/log (1.0.2): Loading from cache
  - Installing symfony/debug (v3.4.6): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.7.0): Loading from cache
  - Installing symfony/console (v3.4.6): Loading from cache
  - Installing symfony/routing (v3.4.6): Loading from cache
  - Installing symfony/yaml (v3.4.6): Loading from cache
  - Installing symfony/framework-bundle (v3.4.6): Loading from cache
  - Installing symfony/http-foundation (v3.4.6): Loading from cache
  - Installing symfony/event-dispatcher (v3.4.6): Loading from cache
  - Installing symfony/http-kernel (v3.4.6): Loading from cache
  - Installing symfony/finder (v3.4.6): Loading from cache
  - Installing symfony/filesystem (v3.4.6): Loading from cache
  - Installing psr/container (1.0.0): Loading from cache
  - Installing symfony/dependency-injection (v3.4.6): Loading from cache
  - Installing symfony/config (v3.4.6): Loading from cache
  - Installing symfony/class-loader (v3.4.6): Loading from cache
  - Installing psr/simple-cache (1.0.1): Loading from cache
  - Installing psr/cache (1.0.1): Loading from cache
  - Installing symfony/polyfill-apcu (v1.7.0): Loading from cache
  - Installing symfony/cache (v3.4.6): Loading from cache
  - Installing symfony/dotenv (v3.4.6): Loading from cache
Writing lock file
Generating autoload files
Symfony operations: 4 recipes (0ddd9f25a0fe7f6017a9646bccfc603b)
  - Configuring symfony/flex (>=1.0): From github.com/symfony/recipes:master
  - Configuring symfony/framework-bundle (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/console (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/routing (>=3.3): From github.com/symfony/recipes:master
Executing script cache:clear [OK]
Executing script assets:install --symlink --relative public [OK]

Some files may have been created or updated to configure your new packages.
Please review, edit and commit them: these files are yours.

              
 What's next? 
              

  * Run your application:
    1. Change to the project directory
    2. Execute the php -S 127.0.0.1:8000 -t public command;
    3. Browse to the http://localhost:8000/ URL.

       Quit the server with CTRL-C.
       Run composer require server --dev for a better web server.

  * Read the documentation at https://symfony.com/doc