Posts

Showing posts from 2018

如何抓取最近生日的人

Image
如果想要抓取今天前後一週生日的人 SELECT * FROM customer t WHERE MOD(DAYOFYEAR(CURDATE()) - DAYOFYEAR(t.birth) + 365, 365) <= 7 OR MOD(DAYOFYEAR(t.birth) - DAYOFYEAR(CURDATE()) + 365, 365) <= 7 如果要抓取未來兩週生日的人 SELECT * FROM customer t WHERE MOD(DAYOFYEAR(t.birth) - DAYOFYEAR(CURDATE()) + 365, 365) <= 14 參考來源

Chrome Extension: 使用 Native Messaging 的方式串接讀卡機

Image
前提 由於需用 NFC 登入系統 評估後使用 新錼 CL-2100R 來實作 構想是用 Chrome Extension 串接讀卡機可快速登入系統 因 NPAPI 已經被淘汰了 所以用 Native Messaging 來開發 網路上有關 winscard.dll 跟 native messaging 的資料不多 一開始一直被誤導 以為可以直接呼叫 winscard.dll 今天看到 這篇文章 才晃然大悟 直接在 path 中帶入 winscard.dll 是 NPAPI 的做法 (因為直接 call .dll 不安全,所以才捨棄 NPAPI 的啊 XD) 如何在 Mac 上測試是否有抓到讀卡機 可以輸入以下指令 如果有出現讀卡機的型號就代表有抓到 $ pcsctest MUSCLE PC/SC Lite Test Program Testing SCardEstablishContext : Command successful. Testing SCardGetStatusChange Please insert a working reader :(我在這邊就卡住了) 如何執行 Chrome Extension 這邊不講解要如何載入開發的程式 只提該怎麼把 Chrome Extension 程式呼叫出來 可在 Chrome 網址列輸入 chrome://apps 就會出現安裝好的 Extension 如果沒出現請確認 Extensions 頁面有開啟該程式 註 winscard.dll 是 Microsoft Windows 內建的動態連結函式庫 基本上讀卡機都是用 winscard.dll 來提供服務 Linux/Mac 上則是使用 PC/SC lite 通常讀卡機廠商都不是自己寫 driver 都用公版程式 Mac 上早在 10.9 版以後就不支援了(10.8 還支援) 我用過兩個牌子都一樣 問過讀卡機廠商也是不了了之 所以目前要在 Mac 上面支援是有困難的(目前的 Mac 版本是 10.14) Reference Chrome Native Messaging Exampl Calling a C dll through chrome browser exten

使用 certbot 讓 wildcard certificate 可自動更新憑證

Image
由於 Let’s Encrypt Wildcard Certificate 使用 DNS 認證 所以無法用傳統的方式自動更新 ./certbot renew 如果你剛好使用 Cloudflare 的話就有福了! Cloudflare 支援 API key 認證 可以透過一些第三方的模組來自動認證 這樣就不用每三個月都要手動認證了 以下教學參考此篇文章 前情提要 下方使用 CentOS7 當作示範環境 如果你還沒裝 certbot,請先執行 $ yum install certbot 1. 首先要先登入 Cloudflare,右上角 My Profile 那就可找到 Global API Key 請點選 View 輸入密碼就會出現,這把 Key 很重要請小心保管 2. 由於這把 Key 很重要,所以要放在一個安全的地方 原作者把它放在 /root/.secrets 裡面(你要改地方也行,最後的參數路徑記得改就好) 但系統預設沒有 /root/.secrets 這個目錄 所以要先建立這個目錄 $ mkdir /root/.secrets 然後把下面這兩行填好後放到 /root/.secrets/cloudflare.ini 裡面 dns_cloudflare_email = "請填你的cloudflare帳號,也就是email" dns_cloudflare_api_key = "請輸入上述的 Global API Key" 3. 修改 /root/.secrets/cloudflare.ini 權限 $ sudo chmod 0700 /root/.secrets/ $ sudo chmod 0400 /root/.secrets/cloudflare.ini 4. 安裝 Certbot 及 CloudFlare DNS 認證套件 $ sudo yum install python-pip $ sudo pip install certbot-dns-cloudflare 5. 申請 Wildcard SSL 憑證 example.com 請帶入自己的 domain $ sudo /usr/local/bin/certbot certonly --dns

cordova-plugin-googleplus 無法在 android 上使用 google sign in

Image
我遇到的問題是 在 Android 手機上點選 Google sign-in 會沒有反應 正常會跳出視窗讓你選擇用哪個帳號登入 我們是使用這個套件  cordova-plugin-googleplus 在 iOS 上都是正常的 原本以為是 UI 被遮到 還特別把他將 Fb 的位置對調 而且奇怪的點是,在 console 沒有看到任何的錯誤訊息 這問題困擾了我好幾天 後來嘗試將 cordova-plugin-googleplus 版本一個一個降版 從 5.2.2 到 5.3.2 中每一個版本都試過 後來才發現 5.2.1 是可以 work 的! 不過遇到了 error 16 感謝 這個討論串 讓我很快就找到問題了 最主要是說 webClientId 要用 OAuth 2.0 Client ID 裡面的 Web client 這個才行 iOS 用其他的都可以執行 唯獨 Android 一定要用這一個 後來才知道裡面一堆人說 5.2.1 可以 work 為什麼不讓我早點看到這篇呢 orz... My Environment meteor : 1.7.0.5 cordova cli : 8.1.0 cordova-plugin-googleplus : 5.3.2

meteor build error & apk path

$ meteor build ../build --server localhost:3000 => Errors executing Cordova commands:    While removing plugins    cordova-plugin-app-version,cordova-plugin-badge,cordova-plugin-call-number,cordova-plugin-camera,cordova-plugin-device,cordova-plugin-dialogs,cordova-plugin-file,cordova-plugin-file-transfer,cordova-plugin-googleplus,cordova-plugin-local-notification,cordova-plugin-meteor-webapp,cordova-plugin-splashscreen,cordova-plugin-statusbar,cordova-plugin-whitelist,cordova-plugin-wkwebview-engine,cordova-save-image-gallery    from Cordova project:    Cordova error: Cannot find plugin.xml for plugin "cordova-plugin-facebook4". Please try adding it again.    (If the error message contains suggestions for a fix, note that this may not apply to the Meteor integration. You can try running again with the --verbose option to help diagnose the issue.) 如果遇到 meteor build 時候遇到上述問題 請先執行 meteor reset 再執行以上指令即可 另外紀錄一下 meteor 產生的 apk 路徑 build dir / android / project / b

Lumen 5.5 TimeZone

Lumen 的 timezone 設定於 .env 有兩個參數就要設定 APP_TIMEZONE=Asia/Taipei DB_TIMEZONE=+08:00 如果只設定 APP_TIMEZONE 的話 部分寫入資料庫的資料會有問題

如何申請 iOS 推播憑證

Image
大致上申請流程可以參考 Collyn Chen 的文章 iOS推播通知憑證申請流程 有一點要補充的是 最後產生 .pem 那段 我在 macOS High Sierra 10.13.6 上無法正常運作 查了一下我的 openssl 是 LibreSSL 2.2.7 居然不是 openssl ? 在執行這段指令時會發生以下錯誤 後來改了參數後就可以 work 囉! $ openssl pkcs12 -in filename.p12 -out filename.pem -nocerts -nodes 另外這邊要補充一個測試憑證的工具 叫做 Easy APNs Provider 取得 Device Token 後直接把憑證餵進去 就可以馬上收到推播囉! 請注意,這個工具是使用 .cer 檔,不是 .pem 檔喔! 2018.08.10 補充 後來用上述指令產生出來的 pem 無法用程式發推播 將 -nocerts 參數改成 -clcerts 才行 $ openssl pkcs12 -in filename.p12 -out filename.pem -clcerts -nodes 這時候系統卻不會出現上面的錯誤 中間做了什麼已經不可考了

如何在 apache2 上面啟用 http/2 on CentOS7

CentOS 的 repo 某些套件更新相當的保守 例如 apache 跟 php 就是很實在的例子 目前我使用的 CentOS7 是 印象中 apache 的版本在 CentOS7 上始終停留在 2.4.6 由於 apache 支援的 http/2 功能在 2.4.17 才會出現 (不過 2.4.26 版本不安全,請升級到後續的版本) 所以要先想辦法將 apache 升級 如果不想自己 compile 的話 可以參考這篇的做法 1. 先查詢 apache 的版本 可以用 httpd -v 或是 yum info httpd 查詢 2. 先確認是否安裝 epel-release $ sudo yum install -y epel-release 3. 下載並安裝 CodeIT repo $ cd /etc/yum.repos.d && wget https://repo.codeit.guru/codeit.el`rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)`.repo 4. 使用 yum info httpd 查詢是否可抓到目前最新版的 httpd 5. 如果還沒安裝 apache 可以輸入 $ yum install httpd 6. 如果要升級 apache 的話 $ yum update httpd-* 7. 重啟 apache $ systemctl restart httpd 接下來要設定讓 site 支援 http/2 1. 要把下面這行 Protocols h2 http/1.1 2. 加入 ssl.conf 或是 httpd.conf < VirtualHost *:443 > Protocols h2 http/1.1 ServerAdmin you@your-awesome-site.com ServerName your-awesome-site.com < /VirtualHost > 3. 重啟 apache $ systemctl restart httpd 如果想要測試可以用

如何重灌 macOS

蠢蛋如我一時猴急想要體驗 Mojave 10.14 beta 3 版的 dark mode 想說最近看螢幕容易眼睛酸 看看暗黑模式會不會比較好 結果悲劇就排山倒海的來了... 升上去後先是雙螢幕的第二顆螢幕掛點 無法偵測到該螢幕的正常解析度 只能用 800x600 或 1280*720 解析度顯示 另外休眠後,第二顆螢幕就再起不能,除非重開機 然後 chrome 跟 line 的字體有點糊糊的 而且 line 好像在休眠後也無法正常開啟 再加上一些軟體在 dark mode 下無法正常顯示 就算切換為原本的 light mode ? 也是有一樣的情形 所以才有這篇文章的產生~ 我有先試過 在開機的時候按下 command + R 選擇本機重灌 不過 Mojave 10.14 已經寫入硬碟中 所以無法還原到 10.13 的版本 在沒有 Time Machine 的情況下 就只能乖乖的去製作開機硬重灌了 1. 首先請先準備一顆 8G 以上的隨身碟,請重新命名隨身碟的名稱例如為 8G 2. 下載 High Sierra 到硬碟中 點選這個連結會導到 App Store 然後按下載 download 即可 3. 將檔案 copy 到硬碟上 由於每個版本的名稱路徑會不同 這邊以 High Sierra 來示範 其他的版本可參考這篇文章 打開終端機 Terminal 輸入以下的命令 sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/ MyVolume  --applicationpath /Applications/Install\ macOS\ High\ Sierra.app MyVolume 請修改為你隨身碟的名稱,例如我改成 8G 這邊就換替換成 8G 系統會要你同意打 Y 按 Enter 然後他會開始跑 等出現 Done 才算完成 4. 然後就可以拿著這顆隨身碟到你要重灌的電腦上安裝 開機的時候請按著鍵盤上的  option 執行出現蘋果的  logo 就可以放開了 5. 然後選擇你的隨身碟進行安裝 6. 如果你

CentOS7: How to install Mono in the apache2

CentOS7 上面要支援 ASP / ASP.NET 有兩種方式 一種是本篇文章要介紹的 Mono 另外一種是 Microsoft 自己開發的 DotNET Core 兩種都有跨平台支援 網路上的教學安裝了太多的套件 我只想跑 ASP 而已 僅列出我需要的環境教學 我的環境是: CentOS 7.5.1804 x86_64 Apache 2.4 安裝步驟 1. 匯入 Repo $ rpm --import "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF" $ su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo' 2. 安裝 mono 套件 $ yum install mod_mono 3. 修改 mod_mono.conf $ vi /etc/httpd/conf.d/mod_mono.conf 將這段加到最下面 MonoServerPath /usr/bin/mod-mono-server4 如果要跑 asp 請加入這行 AddType application/x-asp-net .asp 如果要讓 index.asp 變為預設首頁請加入這行 DirectoryIndex index.asp 4. 重開 apache $ systemctl restart httpd

CentOS7 如何新增/移除 Rich Rule for firewalld

如果要針對某個 ip 開放某個 port 需要用到 rich rule 來設定 針對 public zone 列出永久的 rule # firewall-cmd --zone=public --list-all --permanent 針對特定的 ip 開放特定的 port 這邊是針對 sql server 開放 # firewall-cmd --add-rich-rule="rule family="ipv4" source address="1.1.1.1" port port="1433" protocol="tcp" accept" --permanent 如果要移除 rich rule # firewall-cmd --permanent --remove-rich-rule 'rule family="ipv4" source address="1.1.1.1" port protocol="tcp" port="1433" accept' PS. webmin 看不到 rich rule, 所以需要用 cmd 才能設定

Websocket error

Image
前端使用 React 開發 利用 restful API 來串接資料庫的部分 在本機開發的時候不會有 websocket 連接 但放到 server 上就會跑出來 而且會有 http error 400 的錯誤 妙的是 Connecting 居然是 Upgrade 網路上搜尋到分別有 Apache 跟 Nginx 的解法 我是參考 fuatsengul 說的這部分去做設定的 ServerName mysite.com ServerAlias www.mysite.com SSLEngine on SSLProxyEngine On ProxyRequests Off SSLCertificateFile /etc/apache2/ssl/mysite.com.crt SSLCertificateKeyFile /etc/apache2/ssl/mysite.com.key SSLCertificateChainFile /etc/apache2/ssl/ca.cer DocumentRoot /var/www/errorPages ErrorDocument 503 /503.html ProxyPass /503.html ! ProxyPass / http://localhost:3999/ ProxyPassReverse / http://localhost:3999/ RewriteEngine on RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC] RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] RewriteRule .* ws://localhost:3999%{REQUEST_URI} [P] 主要是紅色區塊那部分 前面那兩行 ProxyPass & ProxyPassReverse 我本來就有加 主要是將 port 3000 導到 port 80 加上紅色區塊後(需要依照自己主機設定修改) 連線就正常了 如下圖

InvalidArgumentException: Field is unknown. in Drupal\Core\Entity\ContentEntityBase->getTranslatedField() (line 580 of /core/lib/Drupal/Core/Entity/ContentEntityBase.php)

從 Drupal 8.4.2 升級到 8.5.2 這次升級主要是資安的問題 遇到了以下的錯誤訊息(英文) 「The website encountered an unexpected error. Please try again later.」 中文則是 「網站遇到非預期錯誤。請稍後再試。」 以上的錯誤訊息算是非常常見的 有看沒有懂 基本上把該更新的檔案都有丟上去後 會出錯大概就是以下幾個問題: 資料庫沒升級 套件版本相衝突 資料夾權限沒設定好 升級 drupal 不一定每次都要執行資料庫升級 不過遇到問題的時候就跑一下 /update.php 如果這邊畫面可以正常顯示 那就跑一下資料庫升級 如果跑完升級後還是有錯 那就到 /devel/reinstall 那邊看看還有什麼錯誤訊息(需要裝 devel 模組) 因為一般頁面通常都進不去 所以要從特別的頁面進去才能知道發生什麼事

如何使用 Lumen 寄信 Lumen Mail example

由於 Lumen 沒有內建 Mail function 網路上找到整合 Mail 的方式大概有下面兩種 我實作的是第一種 第二種主要是把 Lumen 被拔掉的功能給加回來 因為不需要其他的功能 這邊的環境是 Lumen 5.5.2 1. 需要先安裝 illuminate/mail 套件 不過不能只安裝 illuminate/mail 會出錯,要把相依的套件一起裝起 這部分別篇文章有介紹不贅述, 請參考這邊 2. 然後在 bootstrap/app.php 裡面加入這段 $app->register(\Illuminate\Mail\MailServiceProvider::class); 然後把這行前面註解移除 $app->withFacades(); 3. 安裝這個套件 phanan's cascading config composer require phanan/cascading-config: "~2.0" 把下面這兩行加入 bootstrap/app.php 裡面 $app->register(PhanAn\CascadingConfig\CascadingConfigServiceProvider::class); $app->configure('mail'); 4. 在 config 資料夾中新增一個 mail.php 檔案 將下方的程式複製到 mail.php 中 return array(   "driver" => "smtp",   "host" => "smtp.gmail.com",   "port" => 465,   "from" => array(       "address" => "account@gmail.com",       "name" => "Mailbox Name"   ),   "username" =>

Lumen 5.5 Mailer

Lumen 沒有內建 Mailer 的功能 Note: By default, the illuminate/mail package is not included with Lumen, so you will need to add the illuminate/mail dependency in your composer.json file. 似乎沒什麼選擇 只有從 Laravel 移植過來的 illuminate/mail 如果直接使用 composer require illuminate/mail 會出錯 因為有太多版本了 建議還是從 composer.json 下手 將 "illuminate/mail": "^5.5" 加入 不過這時候執行 composer update 還是會出錯 root@kitchen maan_cs]# composer update Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 7 installs, 0 updates, 0 removals   - Installing symfony/css-selector (v4.0.8): Loading from cache   - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Loading from cache   - Installing doctrine/lexer (v1.0.1): Loading from cache   - Installing egulias/email-validator (2.1.4): Loading from cache   - Installing swiftmailer/swiftmailer (v6.0.2): Loading from cache   - Installing erusev/parsedown (1.7.1): Loading from cache   - Installing i

CentOS7 上安裝 SQL Server

Image
原來 Microsoft 早在 2016 年就讓 SQL Server 搬上了 Linux 了! 這真是個可喜可賀的好消息啊! 加入來源 $ sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo 安裝 SQL Server $ sudo yum install -y mssql-server 設定 SQL Server 的版本及密碼 $ sudo /opt/mssql/bin/mssql-conf setup  選擇版本的時候會出現下面選項,如果用量不大的話可選擇免費的 Express  設定防火牆 $ firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="你的ip" port protocol="tcp" port="1433" accept' $ firewall-cmd --reload 參考來源: https://docs.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-red-hat How to open port for a specific IP address with firewall-cmd on CentOS? [duplicate]

Laravel / Lumen Timezone

Lumen 跟 Laravel 的 Timezone 設定 都在 .env 裡面 預設是 UTC APP_TIMEZONE=UTC 可以改成所在地的 TZ 如 Asia/Taipei APP_TIMEZONE=Asia/Taipei

Howto use Postman test Cors

Image
Postman 是一個很方便測試 api 的工具 沒有他我不知道人生要怎麼過啊! 開發程式上由於不同主機都一定會遇到 Cors 的問題 如果不要自己寫程式測試 那最快的方式就是用 Postman 了 請記得這邊要選「options」 然後 Header 裡面加入這兩行就可以了 這邊的變數視你的狀況而定 我的環境是利用 token 帶 jwt token 且沒有使用認證的機制 Access-Control-Request-Headers : token Access-Control-Request-Method : GET Status 回傳 200 代表有開通 Cors 如果沒開通會回傳 405 我這邊 Server side 是用 Lumen 搭配 這個套件 使用