原來可以這麼寫(9):結果我變成python 工程師?

祝大家新年快樂。原來可以這麼寫這個系列終於來到第九篇!

說聲好消息,最近工作獲得肯定(撒花~)。只是不知道年終到底有多少…搞不好…其實很少…. 這個就題外話啦,在這個公開網路場合還是不宜多說XD

從資料庫匯出資料

最近接到一個需求,是要從資料庫匯出資料。其實這個東西並不是很難,寫寫SQL 語法就能搞定…但因為安全的因素我們的資料庫通常要透過SSH 跳板才能進去。可是他們匯出資料的需求是要by 一個顧客(客戶),你媽咧我難道一個一個SQL 撈出來然後再丟進Excel 嗎?

不!這絕對不是工程師的思維… 後來想想我在我第一份工作的時候開啟了一個side project : office: https://github.com/r567tw/office

那時候為什麼我要開啟這個專案呢?原因是,我當時負責重構一個網站系統,是用Laravel 重構原本native php 改寫的報名網站…. (這大概可以說是我工程師生涯其中一個直得常常拿出來說嘴的一個成就…但當然啦我之後在想覺得那時候我初出茅廬才維護一年多就改寫實在有點冒險…只怪我當時太年輕太衝動太不懂事了…. 裡面還是有一些遺珠之憾等級的小後悔~)

啊話說開了,總之那時候有要驗證台灣的身分證字號,還有生成台灣的身分證字號…這當然網路上可以有工具可以用啦,但你不覺得開瀏覽器->搜尋-> 點進網址 -> 可能還有點一些按鈕bla 的才能搞定自己的需求很麻煩嗎?

於是你看到office 裡面就有一個資料夾應運而生:id_card_number

隨著時間推移,裡面的工具也越來越多XD

這次我就用到使用ssh 連接到database 來幫我完成需求的工具:connectDBthoughSSH

import pymysql
import sshtunnel 
import dotenv
import os

dotenv.load_dotenv()

server = sshtunnel.SSHTunnelForwarder(
    ssh_address_or_host=(os.getenv('SSH_HOST'), 22), # 指定ssh登入的跳轉機的address
    ssh_username=os.getenv('SSH_USER'), # 跳轉機的使用者
    ssh_pkey=os.getenv('SSH_PEM_PATH'), # 跳轉機的密碼
    remote_bind_address=(os.getenv('DB_HOST'), 3306)
)

server.start()

db = pymysql.connect(
    host='127.0.0.1',
    port=server.local_bind_port,
    user=os.getenv('DB_USER'),
    passwd=os.getenv('DB_PASSWORD'),
    db=os.getenv('DB_DATABASE')
)

cur = db.cursor(pymysql.cursors.DictCursor)

cur.execute('select id,name from clients')

clients = cur.fetchall()

db.close()
server.close()

接下來,拿到sql 的資料之後就是python 和 excel 的問題了,撒花!

匯入第二波小說資料

因為目前時程與安排的緣故,目前匯入資料暫時由工程師處理,前面的應用到step function 就是其中一環的應用,但說真的,前面這一環的資料匯入,我開發幾個 laravel 的 api , 實在規劃的! 很!爛! 我愧對我作為工程師的身份啊…

經過漫長快一個禮拜的規劃… 我想到他馬的我為什麼要繼續用PHP完成我這個需求?用Python 呢?

再經過兩~三天的研究與開發, python 的版本終於應運而生!不過裡面資料先暫時用在sqlite 上面, 之後我想把它放在mysql 資料庫上面… 然後寫好專案裡面的readme和說明,不用我只要大家用這個程式就可以做使用,多自動化多方便啊… 這是我這個的最終目標啊!

嘗試做一些改變

目前,我是一名後端工程師,我的專案其實就只有一個。這一個專案負責官網、後台、ios/android app 的API, 同時也需要與交易的 Lambda 溝通,去年我甚至也主導單集銷售模式的Lambda 開發,而我在接手此專案的過程中曾發下宏願:

  1. 完整文件化
  2. 導入TDD,甚或是DDD , 強化程式碼品質、程式碼架構彈性

目前我自認自己將文件化的目標至少有70-80%,我很努力的研究swagger 怎麼寫,創造一個較為優良的swagger文件的環境,整理目前就我角度上專案的開發現況,導入代碼表的文件在每個需要代碼的swagger 文件。也在多次與app team/PM/官網/後台 有多次的溝通摩擦、gap , 雖然是有點加重了我個人的loading , 但至少在開發前做一次好好地確認、流程、導入mock api 的機制先在開發前作討論。

我不知道,我這樣的做法,是否對於各方角度team 有好的成效、好的溝通效率?甚願可以。希望可以。畢竟API 的 DX 很差,那我這個後端工程師真的不用在繼續幹下去了!

接下來,希望完成資料庫的文件化,也希望程式的TDD, 測試能一一地補上。這是我接下來要努力的目標之一。

每次改變一點點,這也是DevOps 文化的其中一環麻。

小君曰:原來這次我是python工程師?

原來可以這麼寫(8): SAM 真的好好玩~

這篇文章有點廢,沒什麼技術點… 純粹是拿部落格當筆記的概念。

玩 AWS SAM

最近在玩AWS SAM CLI 部署 lambda ,真的好好玩喔,最近拿來部署好關於一些資料庫、SQS、KMS 等等的東西… 以下是我花了一點時間研究好怎麼寫template.yaml … 都要變成yaml 工程師拉!


 

更多的Mysql 研究

另外因為某個原因,讓我最近一直在研究database lock 的問題… 原來,加一個[for update]就可以達成了,真的好好玩~


select points from customers for update

資料來源:https://oldmo860617.medium.com/transaction-%E4%BD%B5%E7%99%BC%E9%8C%AF%E8%AA%A4%E8%88%87%E9%9A%94%E9%9B%A2%E5%B1%A4%E7%B4%9A-51b8af6178ae

https://blog.xuite.net/vexed/tech/22289223-%E7%94%A8+SELECT+…+FOR+UPDATE+%E9%81%BF%E5%85%8D+Race+condition

徹底解決Composer 記憶體不夠的問題

再裝某些Composer package 時常常遇到記憶體不足的問題,後來查到一個超棒的指令

COMPOSER_MEMORY_LIMIT=-1 composer update

資料來源:https://medium.com/@kycd.dark/%E5%9F%B7%E8%A1%8C-composer-update-%E6%99%82%E9%81%87%E5%88%B0-composer-memory-limit-aee4f2df56ee

小君曰:「真廢」

原來可以這麼寫(7): 資料庫筆記第一彈

在工作上被賦予資料庫Schema的設計責任

像是因應贈課功能、訂閱功能、關鍵字功能等等。也因此發現資料庫的學問真的博大精深
看來我還需要多多的磨練。

1. unsigned & zerofill

在資料庫常常看到unsigned這個字,最近想一想覺得要好好研究他,查了一下資料,就我個人的理解是:
unsigned: 將數字「無符號化」,意表這個欄位就是0 和正整數
zerofill: 在查資料也發現zerofill , 原來它是資料庫中,拿來前面補零的語法與功能。
文章來源:https://twgreatdaily.com/RbGjcW4BMH2_cNUgvI0q.html

2. 資料庫怎麼設計

在查資料發現一個很棒的github repo , 告訴我們怎麼設計schema 或怎麼最佳化實踐,目前有空會再看看,好好消化一下。分享一下:https://github.com/alextanhongpin/database-design

原來可以這麼寫(6): 換了一個佈景主題

我換了一個佈景主題,你知道的,後端工程師美感幾乎都不怎麼樣。我覺得我開發的佈景主題好像還是不是很好用、很美… 所以找了一個新的佈景主題,好看多了……

參加 AWS 工作坊

最近有機會上課,課程名稱是:PHP 開發者工作坊 -深入淺出 AWS 無伺服器 LAMP 架構(https://awsphpday.splashthat.com/),引用了外國人寫的一系列文章:https://aws.amazon.com/tw/blogs/compute/introducing-the-new-serverless-lamp-stack/

從這一系列文章,這個人定義出新的LAMP定義: L- Lambda , A- API gateway , M-Mysql , P-PHP。並且介紹如何實作以及實現。

之後滿心期待報名,甚至還報名了三次,兩次用私人信箱、一次用公司信箱。AWS真的有夠現實的,只有公司信箱報名的那個有成功XD 另外也發現原來我們公司的公假這麼好請XD 只要主管有同意就好 哈哈

有機會認識到Pahud 大大,他真的是一個很熱情的人,在會後請教他問題都很熱情地回答哈哈,同時也深入到Bref 這個套件、以及 Pahud 大大開發的套件可以如何方便的部署serverless laravel 在 AWS 上,我真的很期待這門課程也很開心得到很多不錯的收穫,同時也認識到AWS CDK,目前也正以緩慢的速度慢慢理解學習他(畢竟我又不是DevOps 哈哈)……

啊主要這門課程他就是在介紹他開發的這個套件:https://github.com/aws-samples/cdk-serverless-lamp

這個套件主要是依據AWS CDK為基底,做出符合serverless laravel 的contruct lib ,可以很方便的讓開發者使用開箱

AWS SAM CLI & Lambda

同時我的第一個 Lambda 專案終於開發到一個階段了,甚至也經過前輩的Code Review 完!真的很期待他上架的時候,除了是我第一個Nodejs 架上專案也是第一個 Lambda 專案,而且很認真的畫流程圖、一步一步開發規劃。就是可惜目前開發順序&上架就是有點混亂、這也是讓我有點不爽的地方,一直被「中間插件」… 然後等到上架可能又有更多東西要調…那開發者到底為什麼當初要規劃那麼多?幫使用者想那麼多?(不過軟體工程不就是需求常常會改來改去嗎? 真的很好奇更標準更專業的IT他們怎麼處理這一塊?)

同時,這個專案也要慢慢學習與習慣用SAM CLI ,之前我們公司的Lambda 管理與開發比較亂、現在有了SAM之後會比較好整理及有次序,能夠成為公司內導入這部分的其中一份子真的蠻令人興奮的!也希望我的 第一個 Lambda 專案可以趕快上去! 這樣我就又有一個成績可以炫耀(誤

小君曰:最近都在搞AWS呢

原來可以這麼寫(5): 原來MySQL 博大精深

最近工作接下交易與金流的部分,開始將自己最近火燙燙學習的 Nodejs 來拿去試試水溫。不過,被callback 弄的昏頭轉向的…. 所幸,最後藉著文件與冷靜,慢慢的下斷點、看結果,參考之前前人寫的code , 才慢慢走出來,甚至處理到進度似乎發展還不錯。

MySQL 的 insert 新寫法

因為專案需求,我雖然接下這個舊專案,但是要開發新功能,於是,我覺得可以趁此改善專案架構與程式碼品質,原本程式碼的SQL 是用那種字串方式連結的,但我知道這樣會有SQL injection 的問題,所以在新功能&參考舊程式碼的過程當中,也慢慢的將字串方式改成可以防止SQL injection 的方式。同時也意外發現Mysql insert 有新的寫法:


INSERT INTO table SET a=1, b=2, c=3

比起原本冗長INSERT INTO table (a, b, c) VALUES (1,2,3), 我覺得這種set 的方法真的很不錯,這樣在對照上及程式碼易讀性也更勝一籌,所以覺得可以評估是否要引入的可能性…..

參考資料:https://stackoverflow.com/questions/861722/mysql-insert-into-table-values-vs-insert-into-table-set

參加LaravelConf 2020

其實本週還真的沒啥事情,除了就是討論、開發、維護、就是這些不斷的循環…. 工程師的人生就是這麼平凡無奇,但週末參加了 LaravelConf 2020 , 這次我買的是線上回放票,整體下來感覺很不錯,聽Ant 大大的對PHP&Laravel 之未來的一席話,真的有所感受與領悟啊!然後我覺得比起之前參與過的2017、2019,我發現我又更加聽懂了很多內容,覺得感受到自己的成長真的蠻棒的,不過整體的心得文與筆記我想之後會再好好整理起來。現在還有安可場,可以再去買票去聽啊

小君曰:工程師的生活就是這麼平凡無奇,且有趣

原來可以這麼寫(4) : 終於接新專案

近況

最近工作終於接到新的任務,雖然還是在同一個專案…..

事情是這樣的,我們那個專案的後台分成兩個部分的人負責,一個是後台、另外一個則是交易…..而我進來公司後,一直都是處理後台,對於交易都是一知半解,只知道要打Lambda 而已。而這次,在專案時程終於沒這麼趕的情況下,以統一後端接口(俗語說:天下大勢,合久必分、分久必合),我被授命要接下這交易功能的後續維護&開發新功能…. 這對我是一種挑戰,因為我終於可以有段時間不用繼續和PHP掛勾拉XD (交易lambda 是使用NodeJS)

況且,最近也剛學習了一點 NodeJS, 前陣子上完六角學院的 NodeJS 課程,很期待可以將自己新學習到語言運用到實務專案,不過之後還是要多多進修將nodeJS 補齊基礎拉,而且這個又是金流與交易,其實我自己說實在有點抖抖的&很興奮能接到此挑戰!

總之,為自己加油拉!而且其實也沒用到太高的技巧,那些 nodejs  其實還算好懂的

Mysql: COALESCE

因為在 trace 與理解交易商業邏輯的 code 當中,我看到我們用到COALESCE 在SQL語法中…原來,他是一個好方便的參數啊,可以回傳在列表裡的第一個非null的值。

例如

SELECT COALESCE(NULL, NULL, NULL, 'W3Schools.com', NULL, 'Example.com');
這行sql 語法就會回傳 ‘W3Schools.com’

相關可以參考的資料:https://www.w3schools.com/sql/func_mysql_coalesce.asp

沒用過還真的不知道可以這樣用啊!

強化與習得Docker技能

在今年初,看到Hahow 上面有個關於Docker 的新課程,在最近終於把那門課程上完了,雖然,自己本身工作就已經在使用Docker了,而且為了讓自己可以弄個舒服的開發環境,以符合自己早期的開發習慣,還自己簡單刻了 docker-compose.yml , 好讓自己資料庫可以用自己本機。(我們專案資料庫是用AWS RDS),所以早在上課之前對Docker 就有略知一二。不過,經過有系統的整理後確實能對Docker有更多的理解。像是中間會多了一個虛擬Linux container層,而每一個命令都是新的Container層而互不干擾,他的教學其實還蠻淺顯易懂的,我這裡可以推薦一下:Docker 部署入門完全指南-圖片速學攻略(https://hahow.in/courses/5df27f1fa5ee510022a08500/main)

不過之後還是會想研究一下,會有點想要像我們公司專案一樣,把 Laravel 部署到 Fargate 的部分……

小君曰:接到新專案囉,雖然還是在一刻(我們公司產品簡稱) XD

原來可以這麼寫(3) : 關於我的工作流程

來開始交代一周一次的功課了XD
希望技術部落格可以一周一篇文章, 提升更多的技術含量
記錄自己一天比一天更佳進步的軌跡

關於trello

trello 是很多Team會用到的一個工具,可以用來管理專案與任務安排
它真的是一個真的很方便以及很有幫助的工具
我的前一份工作和現在這一份都有用到這個trello

一開始進入公司的時候 我發現到他們trello 有 進行中, Todo , 完成後請檢察等等的分類, 然後用tag作專案上的分類, 用了一陣子之後發現他們這樣的管理方式真的很不錯

所以就應用在我的side project 管理上
不過我個人也對這樣的部分做了一個調整: 加入了一個研究中的list
畢竟做為小小工程師而言, 作side project 的目標除了是興趣與證明自己的實力以外
也是還要將一些新的東西應用與練習的麻~ 好幫助自己真的可以越來越進步

於是就來分享看看我這個trello 的 template 喔: https://trello.com/b/PFi72D78/r567tws-template

歡迎用我的template去管理你們的專案~
如果有甚麼改進的建議或管理好方法歡迎來告訴我喔

Composer scripts

本周也學到composer 可以在composer.json 裡面寫一些指令, 可以在安裝後,更新後或者安裝前,更新前可以寫command 執行

至於這裡就有豐富關於此的內容,這裡我就不贅述:https://docs.phpcomposer.com/articles/scripts.html

我看到這個的想法是: 哇以後那些php的初始專案就可以不用這麼麻煩了耶, 只要下載後, composer install 或 composer update , 就可以使用了……

我是一個很懶的工程師,也很不喜歡背來背去那些指令, 況且每次都要google 一下把指令們copy & paste , 真的很麻煩

有了這個東西,方便多了, 不用跑 cp .env.example .envphp artisan key:generage

不過也發覺, 原來我還不懂composer XDDDD
但還好啦, composer 就是一種工具, 有用到就會自然學到了
script 技巧 GET !!!!

接到新任務- rust 真的有點看不懂

最近接到新任務, 就是一個可以幫營運單位整理資料夾的任務, 好讓營運單位可以上傳整個資料夾, 而這個資料夾的整理, 是需要戴上資料庫的id , 而營運單位會給我們他們的原檔案, for example : 他們給我們a.mp3 ,我要幫他們找到資料庫 a.mp3 的資料id (例如 10), 那我就要幫他們a.mp3檔案複製存成 media/in/10/10.mp3

它其實真的很簡單: 就是先資料庫連線取得要被整理出來的id 到底是哪些, 然後就做檔案的管理這樣就好(而且我下午還有些時間被抓去開會, 討厭, 沒辦法專心寫程式)

至於程式碼之後我再補這樣 XD (雖然後來我們討論流程這個部分又改了ㄎㄎ 總之這段程式不會用到實務)

https://github.com/r567tw/office/tree/master/move_audio_files

我用python , 用了一個下午時間就寫完了, 隔天我還去找了python 有沒有那種.env 這種東西, 把env 導入我這個小小小程式, 也是不到幾小時的時間

因為還有時間, 我就想說來改寫成rust 的版本, 剛好前幾天在超級簡單的看rust 的東西, 發現…. rust 真的有點看不懂, 那個連結 mysql 的範例…. 感覺有點不好懂…. 需要一段時間我才能將python 語法轉換過去。不過 反倒golang 的範例就沒有那麼難懂….

不知道是不是因為rust 比較底層的關係呢?

後記: 來分享我目前的吃飯工具們好了~

  • vscode:寫程式慣用的編輯器
  • sourceTree
  • Tableplus(偶爾會用workbench)
  • Skype
  • Slack
  • AWS
  • Postman
  • Chrome
  • Spotify
小君曰: 最近我家的PM常常有事沒事來找我, 說: 沒事, 專案(Server / API)還好好的.....

原來可以這麼寫(2):好久沒寫文章了

哈哈,  原本想說可以一個禮拜寫一篇技術文章的

但就是「懶」,所以到現在才出所謂的第二篇….

距離通過工作試用期也已經超過一個月了,我覺得工作上還算是得心應手,進度都在掌握中,也很喜歡目前的工作狀態,只是….我好想接新專案啊…..

在家工作心得

之前,因為疫情關係,我們公司試行了在家工作。老實說,這是我人生第一次在家工作。第一次的時候,還沒有待滿一個月…第一次,好慌、好亂….完全不知道在做什麼

但是,等我慢慢熟悉專案與產品、進度也漸漸掌握起來了,第二次試行、第三次試行,搞清楚自己目前的戰鬥位置、狀況,突然覺得,在家工作好棒啊,甚至有點享受、開心!只要我進度在掌握中就好拉,也確實,我也漸漸掌握好專案的進度XD

可惜,台灣疫情控制實在太好了,之前公司試行在家工作的制度就這樣無疾而終。

我好想要繼續在家上班啊…

結論:在家上班的前置工作與預備真的要做好

Mysql function/trigger

在做搜尋API這個功能時,因為原有資料庫欄位的設計限制與需要,欄位存了HTML標籤,但這反而造成我們在搜尋類似‘p’這種關鍵字時,會變成所有的資料都被回傳,形同沒有搜尋….  那時還算菜… 同事後來找到一個解法,就是新增新的欄位,利用Mysql function 的功能,再加上trigger , 可以在每次資料庫有異動時,新的欄位可以放入沒有html標籤的原資料,從而在API開發上,搜尋這個新的欄位,就可以克服這個問題

我以為只有oracle 資料庫有這種trigger 功能,因為我以前有在學校上課有修過這個oracle資料庫的課,所以對這個略知一二,但沒想到Mysql 也有這樣的功能,於是花了一點時間重新複習,把以前上課的回憶都找回來了啊… 而網路上,也有幫忙去除html 標籤的現成function,  配合trigger 的onupdate & oninsert , 再配合sql 語法將現在線上資料的html標籤去除,  真的是一個不錯的方案….不過如果你知道有更好的方式解決,歡迎告訴我&交流~

windows docker  問題

因為公司產品有使用到docker, 另外我在公司配備的是 windows電腦 (好想要被配備mac啊~~),於是在某次午休回來時,發現為什麼我的API 會出現問題?明明token , 程式都沒什麼問題啊… 後來我發現好像原來是docker 在windows休眠之後醒來後, docker內部container的時間會和外部window 不是一樣的,因為我的專案有調用到aws的api , 在時間不sync的情況下當然api就出錯了…. 我記得有搜尋到某篇文章說怎麼解決那個問題,好像到window設定什麼東西的….  總之,那是之前遇到的,我也不知道我那時的紀錄丟到哪了,現在我寫文章的時候一直找不到XD  但我說一下我的解法:因為文章裡面交代得實在太麻煩了,於是我決定:重開docker 大法 哈哈哈

Laravel env 問題

我在開發時候,有時候調用一些env的資料, 後來發現, 為什麼都調用不到… 經查詢後發現,原來是因為執行了php artisan config:cache的指令關係…. 詳細可以看看這篇文章:https://learnku.com/laravel/t/3362/laravel-use-env-to-read-the-environment-variable-null

結論:媽的,坑….好拉, 對不起,我沒好好認真看文件所以犯蠢….

Laravel 的queue 和玩玩 graphQL

剛好專案有用到, laravel 的queue 功能, 我預計之後為這個寫一篇專屬文章筆記一下這個, 以後面試可以大膽說用到queue了哈哈

然後因為進度超前及在掌握中,有一些空閒的時間,研究一下之前開發者還沒研究出來的GraphQL, 我裝了rebing/graphql-laravel, 原來,graphQL 是這個樣子…..  在這段時間,比起之前對graphQL有更多更深入的認識了, YA ~

小君曰:真的很久沒寫文章了

原來可以這麼寫(1):新工作第一週

去年的12月,我從上一間公司離職。其實,一月是打算好好去玩~

突然覺得自己韓國去得真是很好的時候,不然可能回來就要自行隔離幾天了XD

想知道韓國旅遊心得的可以到我的樂在信仰中喔:https://r567tw.tw/2020韓國之旅/

然後二月就是各種找工作、思考要做那些工作…..然後各種的無聲卡、拒絕、邀請進去…。

有一家做博弈的接案公司最誇張,其實我本來就沒打算做博弈了,去面試也只是想說「以戰養戰」的態度、寫寫題目,看看有沒有需要再精進的…(是說這間在話術上也很厲害,在頁面其實沒有看到博弈,他們也說他們不標榜自己是博弈,只是接案剛好有大部分都是接博弈的……),然後我就隨意地寫寫,甚至幾題我是空白沒寫,想說記起來回家研究怎麼寫會更好…結果超好笑的是下禮拜居然還發給我錄取通知….(到底有多缺人Xd)

還有一間是說我們「氣不合」,這個理由真的很靠杯,雖然我也知道面試這種事其實與技術能力沒有太大關聯,技術能力只是代表你能帶多少籌碼,最重要的還是面試官喜不喜歡你麻~ 但直接用「談論起來氣不合」這種直白的理由真的會覺得很不尊重面試者,這間公司的名稱就不公佈了,想知道可以私訊~

總之三月之後正式工作,進入了一間大型傳統機構,薪水上蠻滿意的。不過我想先等三個月培訓期度過了在公開自己在哪裡好了,不然培訓期沒過真的會很好笑很尷尬XD

不過我覺得是時候應該要好好記錄工作上的筆記與東西了,畢竟有紀錄有籌碼,這樣下次在跳、再找也更有話可以嘴,同時也是一種回顧自己進步的軌跡的概念~

有一句話我很喜歡:「Don’t Prove; Improve」連結

話不多說,這個系列的文章就叫做「原來可以這麼寫」,紀錄我看前輩、同事的code的筆記、以及一些工作上學到的新概念、新技術~然後後面的標題可以自行發揮創意,像這週就比較沒創意:新工作第一週!

(1) 原來可以直接創造一個class…

trait TraitA {
     public    function   HelloWorld(){
           echo'Hello World';
      }
}
trait TraitB {
   public   function   HELLOTWO(){
       echo'hELLO tWO ';
    }
}
$helper = new class {
      useTraitA,TraitB;
};;
$helper->HelloWorld();

 

(2) ‘<=>’ 運算子

這個很少遇到,沒寫道真的不會記得~

他會比較兩邊的值,然後會回傳0,1,-1

至於規則可以參考:https://www.php.net/manual/zh/language.operators.comparison.php

 

(3) filter_var

https://blog.xuite.net/coke750101/networkprogramming/57002113-PHP+filter_var%28%29+%E5%87%BD%E6%95%B8Filter+%E5%87%BD%E6%95%B8

 

(4) AWS

1. ECR: 類似aws方提供的docker hub
2. KMS: 加解密服務
3. Lambda : 微服務的部分
(5) 匿名函數
“`
$gifts->sort(fn($a, $b) => $b->created_at <=> $a->created_at)->values()
// 越後面的日子就會排越前面~
“`
小君曰:這能這個系列應該會是週更,但有可能會是月更,阿不管啦,我想寫就寫啦XD

厭世工作筆記系列-各種無聊環境設定

前言

最近工作了一段時間,覺得有些東西需要紀錄筆記一下也分享給各位在網路上的開發者。也是一個非常無聊的筆記啦xd 我稱之為「厭世工作系列」,以後會非常不定期之輸出。這文章的主題是環境的架設,適用於mac os, 如果工作常用mac os 開發測試的話可以參考一下…

sudo 不用密碼

有時候我們執行命令會需要root的權限,當然你可以使用sudo susu來事先變成root 操作,但我這個人就是懶嘛~不想每次sudo 都要輸入密碼,所以我在網路上找到這個solution.
– 首先,下sudo visudo 這個指令
– 之後就會進入一個文件,這裡通常預設適用vim編輯器編輯文件,請按i鍵進入編輯模式,之後在最底下加入&lt;&lt;username&gt;&gt; ALL=(ALL) NOPASSWD: ALL *注意:這裡的username 請輸入你自己的帳號名稱,如果不知道的話可以先使用whoami是先查詢。
– 之後命令前加入sudo 都不會再問你密碼囉xdddd 當然這是一個很危險的舉動就是了,記得不要亂下rm -rf這個指令喔XD

參考來源:https://askubuntu.com/questions/147241/execute-sudo-without-password

懶得改etc/host

我目前的公司是個接案公司,有點麻煩每次增加一個專案都要在etc/host 加入一個網址,然後還要去vhost 改指定到什麼目錄之類的,超級麻煩~所以我就用了我很喜歡的python 語言做了小小自動化script,很臨時寫的,應該還有優化與進步的空間xd

程式碼在這裡:https://github.com/r567tw/office/tree/master/httpd_related

addproject.py 就是主要可以編輯etc/host 和vhost的檔案,而且可以事先寫一個template.txt作為模板加入,之後重啟這個apache! 讚!懶人做法XD

然後如果想更自動的話還可以在自己的bashprofile或zshrc加入alias 像是alias addproject="sudo python /&lt;&lt;to file path&gt;&gt;/add_project.py",以後就下addproject這個指令就好啦!省了幾個步驟呢!

mac 重灌小知識

剛進新公司,第一台電腦實在是很爛!說真的,我第一次覺得mac 怎麼可以被搞成這麼慢,常常動不動「發脾氣」,打個字都還會有小圈圈lag一下,這樣寫code實在不夠暢快! 所以和公司申請換新電腦,恰巧有公司同事離職,我可以使用他的電腦~~然後因此get 到mac 蟲灌新技能!其實也沒什麼了不起,上網查也就有、這是apple 內建的。先在準備開機的時候看到那個loading 條時狂同時按command + R 為什麼有時候要狂按呢。因為有時候會不成功,能遇到“工具程式”可遇不可求啊! 然後呢“先格式化磁碟”,我真的不知道要事先做這個步驟,害我卡關許久,然後你才“重新安裝mac os”。

聽說可以做開機碟或者啟用time machine 會更好用?!

php 多版本教學

有時候網站開發每個適用的php版本不盡相同,所以要在自己的電腦安裝多版本的php,這裡適用的是mac os,我覺得有個網路的文章實在寫得很不錯,我這裡只是簡單重述他的步驟啦!先上:https://getgrav.org/blog/macos-sierra-apache-multiple-php-versions

  • 先裝好Homebrew,這裡我就不贅述了,homebrew 是個mac 開發者好東西!/usr/local/etc/httpd/httpd.conf
  • sudo apachectl stop &amp;&amp; sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2&gt;/dev/null 先拿掉原生mac os apache 的連結,已確認我們連的apache 是用brew 的
  • brew install httpd 裝apache囉
  • sudo brew services start httpd
  • 修改/usr/local/etc/httpd/httpd.conf 這個檔案,文章裡面有寫,其中開啟rewrite 、改port號、改username、改主目錄等等
  • sudo apachectl -k restart 重啟apache 讀入httpd.conf 的新設定囉
  • brew install php@&lt;&lt;version&gt;&gt; 請安裝你要安裝的php version
  • 所有的php ini 檔都在 /usr/local/etc/php/&lt;&lt;version&gt;&gt;/php.ini
  • brew unlink php@7.2 &amp;&amp; brew link --force --overwrite php@5.6
  • php -v 確認一下版本
  • 接下來是選擇性,但我很建議繼續下去,就是下載這文章作者寫的script, sphp
curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /usr/local/bin/sphp
chmod +x /usr/local/bin/sphp
export PATH=/usr/local/bin:/usr/local/sbin:$PATH
  • 之後你就使用sphp 這個指令爽爽用囉,例如sphp 7.0

學習 magento

新公司是用magento開發電商網站的公司,讓我有點小小吃不消,因為magento的學習曲線真的蠻陡的,相較於我喜歡的laravel來看,laravel 易上手且容易看得懂,所以對於magento有點又愛又恨,為什麼愛呢,因為也深感佩服他真的能作為電商網站開發的方案,設計真的有點讓我驚豔甚至日後可以學習應用,其中eav-modal 讓我們可以自定義商品的attribute, 另外使用xml配置,容易複寫與增加客製化的模組,有點與zend framework 的概念有點像,可惜我只有寫過laravel,對於其他框架的理念還沒有那麼熟吧!這是我的功課。 為自己加油啦!