2019年6月29日 星期六

台中大安濱海樂園沙雕音樂季


夏天到了,

海邊玩水可不是只有墾丁能去,

即日起6/29到7/21,

台中大安濱海樂園沙雕音樂季


除了來海邊玩以外,

也能欣賞沙雕創作,

 展期將近一個月


開幕請來林怡廷, 梁文音,宇宙人等等藝人來助陣,

當然不會只有熱鬧第一天而已,

除此之外,

7/6(週六)在大安濱海露營區舉辦

大地巡禮趣味探險



7/13(週六),

則是舉辦尋找海翁君活動,


自7/6起,

每周六均有舉辦海洋之聲,

時間為下午三點半至五點半,


可開車前往附近停車場停車之後,

再搭接駁車即可,


明代稱大安港為海翁窟港,

這個海翁其實就是鯨魚,

今年台中市以

嗨ON大安、鯨奇狂想派對

為主題,

結合海陸生態與海神故事,

還有最重要的海翁,

推出了一系列的活動,

有興趣共襄盛舉的觀眾,

歡迎來台中大安濱海樂園沙雕音樂季


2019年6月28日 星期五

透過Django後台管理資料庫


從Django資料庫基礎,

Django專案template模板範例教學,

到Django的視圖與URL,

針對Django的MTV架構,

到這邊應該都有大致的認識,

Django就只有這些內容?


答案是否定的,

寫程式就像無底深淵,

栽進去就沒完沒了的

不囉唆,

馬上進行今天的主題:

透過Django後台管理資料庫




大多數的網站都有後台管理,

身為基於Python的web框架-Django,

當然也內建有後台管理app - django admin,

在Django專案的settings.py可以找到:

INSTALLED_APPS = [
    'django.contrib.admin',
]

在urls.py也能找到:

urlpatterns = [
    path('admin/', admin.site.urls),
]

這些通常在建立專案的時候就自動加入專案的,

為了能夠進入Django Admin 必須建立一個superuser帳號,

透過命令列打上:

python manage.py createsuperuser

輸入使用者名稱,EMAIL,密碼等資訊就可新增一個superuser帳號,

根據urls.py的設定,

打上

https://網站url/admin

再以剛才建立的帳號密碼登入就能進入後台,

在專案資料夾找到admin.py,

透過後台管理資料庫最簡單的方法,

就是直接將其註冊到後台,

from school_id_login.models import Xschools

admin.site.register(Xschools)


登錄畫面如下,


如果沒有自訂名稱的話,

Django自動在Class名稱後面加上s

就能直接在後台對資料庫進行新增刪除修改,

不需要透過繁瑣的SQL語言

當然,

透過後台管理資料庫的方法不只一種,

先從最簡單的介紹起,

這裡是不及格研究室,

we are here , we are coding










2019年6月26日 星期三

SEO基礎-URL設計


什麼是URL呢?



URL全名Uniform Resource Locator,

簡單來說就是俗稱的網址,

相當於唯一的門牌號碼,

在網址列輸入位址就能找到該檔案或者網站,

相關的規範已經被定義在網際網路標準RFC1738中


跟SEO有何關係呢?


這就是今天的主題:

SEO基礎-URL設計


URL在搜尋結果中,

也是其中一個顯示內容,

當然是越淺顯易懂越好,

底下就舉幾個較佳的方式作為範例:





URL越短越好


雖說瀏覽器能支援的URL很長,

但如果相同內容的兩個網址擺在一起,

通常大家想點的都是短的URL,

此外URL越短對於複製傳播也比較方便,

避免複製長網址時,

漏掉某部分造成404錯誤,

此外長網址也不容易記憶

命名具有描述性


對於檔案或者目錄的名稱,

如果能讓使用者一看就明白這個URL的大致內容,

相信在搜尋結果中,

必然會獲得更多的青睞,

若是能讓關鍵字出現在URL中,

更能提高頁面的相關性


字母統一為小寫

預設鍵盤的操作方式,

是以小寫字母為主,

統一為小寫可避免人工輸入時大小寫差異而產生錯誤,

一些伺服器是有區分大小寫的,

即使只是大小寫字母的差異,

還是會視同不一樣的網址


兩個單字以連字號做分隔

並非所有應用程式都能正確讀出如底線,空格等特殊的字元,

而通常會將連字號當作空格處理,

故網址打上seo-基礎 會比seo基礎還來的好


使用靜態網址

雖說目前搜尋引擎的強大,

也能夠收錄動態產生的網址,

但若能以靜態網址作為URL,

兩者相較之下,

還是靜態網址比較受青睞的






上述這些雖說並沒有強制規定,

但在設計URL的時候若能多加注意,

相信對於搜尋引擎收錄與排名,

多少也是有些幫助的

2019年6月25日 星期二

HERAN禾聯HVC-23E6無線手持旋風吸塵器


是的,

今天的主角是

HERAN禾聯HVC-23E6無線手持旋風吸塵器


過往對使用吸塵器的印象,

就是拖著一台帶輪子的集塵箱,

連帶著一條很長的電源線,

時代在進步,

吸塵器也要改朝換代,

首先就要先拋棄那落落長的電線,

無線吸塵器就此而生


產品的外箱,

就是一個最好的廣告,

產品的規格就是要挑重點來吸引買氣,

禾聯HVC-23E6除了在外箱的正面介紹此產品的特點以外,

側面也以文字方式闡述了產品的長處


打開箱子,

是以紙板將各元件隔開,

沒有保麗龍在內


內容物有:

變壓器與易拆式2000mAH鋰電池 ,


依照左至右規則,

依序為:

二合一附件刷,

L型接頭,

T型沙發頭,

還有最重要的每分鐘4500次高速轉動全包覆電動地刷,


壁掛套件與導電硬管,

全長約113.6公分,

採卡扣式連接,

方便拆卸更換長短管


這就是涵蓋集塵盒的吸塵器主體 ,

約重1.67公斤,

採250W直流無刷馬達,

強力檔(Boost)可達20kPA吸力,

標準檔為9000PA



科技日新月異,

一個好的吸塵器可以輕鬆做好清潔工作,

HERAN禾聯HVC-23E6無線手持旋風吸塵器,

是值得入手的好幫手,

這裡是不及格研究室,

將這個訊息傳遞給世界各地的網友們,

we are here , we are cleaning






2019年6月24日 星期一

windows10變更螢幕文字大小與解析度


一般來說螢幕的解析度越高,

畫面也越清晰,

可顯示的範圍也越大,

以使用層面上來看,

卻是個人使用舒適才是重點

今天就來教大家如何在

windows10變更螢幕文字大小與解析度


首先到左下角點選開始,

找到一個名為設定的齒輪圖示

點進去就能看到如下圖的視窗
接著點選系統,

找到顯示器分頁



變更文字大小與解析度的設定在windows10中,

縮放與版面配置為標題,

調整的方式很簡單,

預設以下拉式選單讓使用者選取

文字大小的縮放是以百分比為單位,

系統針對目前的文字大小會顯示建議的選項
 至於解析度的也是類似的設計,

同樣會以下拉式選單讓使用者選擇目前螢幕所支援的各解析度,

也會針對目前螢幕給予建議值

通常的建議值都是以螢幕能顯示的最高解析度,

再進行文字大小的縮放,

以期達到最佳的體驗效果







2019年6月20日 星期四

Open edX第三方帳號登錄(Oauth2)


由於Open edX的開放,

所以對於第三方網站的支援也蠻多樣的,

針對第三方登錄,

Open edX是採用與現有Open edX帳號綁定的方式,

而非直接註冊一個新帳號給予第三方帳號使用,



Open edX支援底下幾種類型的第三方伺服器:


  • 基於Oauth的provider

  • Security Assertion Markup Language (SAML)  V2

  • LTI


既然Open edX支援,

接下來就教大家如何將此服務開啟

Open edX第三方帳號登錄(Oauth2)


1.
首先找到  /edx/app/edxapp/lms.env.json ,

找到

"FEATURES" : {
    ...
    "ENABLE_COMBINED_LOGIN_REGISTRATION": true,
    "ENABLE_THIRD_PARTY_AUTH": true
}

並確認ENABLE_THIRD_PARTY_AUTH為enable


2.
接著就是到django admin中找到底下



以Oauth為範例,

選擇Provider configuration (OAuth)後的 Add,

新增一個provider設定


3.
比較重要的幾個設定為

已啟用(Enable)  :  此選項當然要打勾啟用

icon class / icon image:  此兩者必須要設定其中一項

Name:  即provider的名字

site: 填寫目前Open edX網域名稱



Visible:  當然要打勾, 不然就使用者無法看到登入選項

Backend name:  目前的第三方下拉式選單,預設有Google , Facebook, Linkedin, Azuread等

再來就是Oauth中由Provider所提供的

Client ID與 Client Secret

按下儲存



4.
在Open edX登入畫面即可看到如以下的按鈕

使用者可根據自己需求,

點選不同第三方進行登錄


5.
前面有提到Open edX的第三方登入必須綁定現有的帳號才能使用,

所以第一次使用第三方登入必須先以平台的帳號登入,

在右上角下拉式選單中選擇 "帳號"(Account),

再到"已連結帳號"分頁進行綁定




除了Google , Facebook 等等,

據說還支援了其他不少的第三方Provider,

不過預設在系統中並未列出來,

僅在官方文件有提到:

2019年6月14日 星期五

如何佈署Django專案到apache上


Django就是網站的框架,

利用Django建立的專案,

最終目的就是上線運行,

所以今天就來教大家

如何佈署Django專案到apache上


首先要先安裝apache套件


sudo apt-get install libapache2-mod-wsgi-py3


WSGI全名Web Server Gatway Interface,

它是一種規範,

定義了server與web application之間的連接,

簡單的說,

wsgi是一個橋樑,

一邊連結web server,

另一邊則是連接web application



接著找到/etc/apache2/sites-available

新增一個conf檔案給新網站

內容大致為:

    ServerName 新站的domain name
    ServerAdmin 管理者信箱
  
    Alias /static/ 靜態檔案的絕對路徑
  
  
   
        Require all granted
   

    WSGIScriptAlias / 專案的絕對路徑/wsgi.py
   
  
   
   
        Require all granted
   
   

最後就是設定好wsgi.py

這樣就完工了?

如果上面描述設定都沒問題的話,

當然最好,

但通常都不會這麼順利的,



舉例來說:

通常IDE是用來加速開發速度的,

所以利用Pycharm所預設的wsgi設定應該就能馬上佈署上線才對,

其實不然,

一個Pycharm專案預設的wsgi.py長的如底下:


實際上還得加上專案的絕對路徑,

網站才能正常上線

import os
import sys
from os.path import join,dirname,abspath

PROJECT_DIR = dirname(dirname(abspath(__file__)))

sys.path.insert(0,PROJECT_DIR) 
sys.path.append('專案絕對路徑/venv/lib/python3.5/site-packages')

from django.core.wsgi import get_wsgi_application

os.environ['DJANGO_SETTINGS_MODULE'] = 'test1.settings'
application = get_wsgi_application()


這樣的寫法並不是絕對的,

甚至部份的設定可移至apache的網站conf中,

故專案上線的話,

還是得多花點時間試驗看看



另外還有一個簡單的方法:

就是在 apache 設定中加上紅框中的兩行即可



如果有多個 Django 專案在同一台伺服器上跑,

記得將專案的 wsgi.py 改為底下:

os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"

2019年6月13日 星期四

[影視戲劇]自白Confession


今天要來推薦的是韓劇

自白Confession


這部片表面上看起來是男主角崔道賢為父親冤獄平反的搜查劇,

實際上卻扯出國防弊案的重大事件


崔道賢從小患有心臟病,

父親崔必秀則是從事國防軍備驗收相關的軍人,

奇蹟似得到心臟移植後,

父親卻因殺人罪入獄


長大後的崔道賢成為律師,

希望找出十年前的真相,

該劇很用心的將每個事件的真相打散隱藏在每一個案件中,

要為父親洗親冤屈,

就必須從每個案件隱藏的線索拼湊起來,

從當年的目擊證人一一被滅口之後,

真相並沒有被隱藏起來,

反而因為凶殺案的關係,

牽扯出當年的真相





原來當年,

父親為了救兒子一命,

接受了交易,

選擇頂罪與掩蓋真相,

也因為這樣,

造成當年事件的目擊者一一被滅口

從調查弊案的檢察官盧宣厚,

化名雪花的金善熙,

護士曹晶善,

軍火說客Jenny宋,

等等

當然還有命大沒死的

駕駛兵韓鐘國,

兇手曹基卓,

秘書黃教植等

這一概人等

都是拼湊出真相的重要一環,

做為一個純追劇的影迷,

大家一起幫崔道賢,

找出當年的真相吧

2019年6月6日 星期四

使用X-Frame-Options避免蓋台與Clickjacking攻擊


何謂蓋台呢?

其實就是將網頁顯示在別人的網站,


至於Clickjacking,

其實就是惡意網站以雙層方式顯示,

上層為iframe為隱藏,

下層為欺騙使用者的顯示內容,

故意將上層的按鈕與下層的按鈕對齊,

使用者點擊其實是按到上層的隱藏按鈕



為了避免網站遭到惡意蓋台或者Clickjacking攻擊,

勢必要做一些防護措施,

而X-Frame-Options 就是其中的一種防治手段,




X-Frame-Options 限制了 iframe與物件的載入,

有三種設定



DENY

無論是誰都無法使用


SAMEORIGIN

只有同網域才能使用


ALLOW-FROM

只有指定網域才能使用





設定成功的話,

就能在瀏覽器主控台看到如下圖error訊息



各軟體語法不一樣,

底下就舉幾個常見的例子:



Apache :

Header always append X-Frame-Options SAMEORIGIN


Nginx :

add_header X-Frame-Options SAMEORIGIN;


.htaccess文件 :

Header set X-Frame-Options SAMEORIGIN



但並不是每個瀏覽器都支援ALLOW-FROM的,

比如Chrome就不支援,

就必須透過其他指令來阻擋iframe引用,

至於用什麼指令呢?

請待下回分解








2019年6月5日 星期三

Django資料庫基礎


Django為基於Python語言的網站框架,

其MTV架構讓前後端能夠更有效率地進行網站開發,

之前提到過Djano的視圖與URL,

也介紹過Django專案template模板範例教學,

當然少不了MTV架構中的Model了,

其實就是

Django資料庫基礎


Django是以Class類別建立Model,

藉由Model操作資料庫與資料表,

在Django的資料庫操作有幾個重要的步驟




1.

在model.py定義Class類別,   每一個Class類別視為一個資料表,

在Class類別中定義變數,這些變數就相當於資料表欄位,


2.
每當model.py檔案有更動,

就必須執行

python manage.py makemigrations   app名稱

或者

python    manage.py   makemigrations

來產生Django與資料庫之間的資料檔,

此兩個命令的差異在於前者專為某個app做資料檔的產生,

後者針對整個專案的model產生資料檔


3.

最後以

python   manage.py   migrate

更新資料庫內容



底下為model.py範例



程式的最上方要匯入models套件,

在model.py建立的類別繼承於models.Model,

TextField則是在描述此欄位的格式多行輸入的字串資料,



常見格式有:

BooleanField:

用以表示布林值True , False


CharField:

用以表示單行字串資料


IntegerField:

用以表示整數資料


其他還有不同的欄位格式,

在此就不詳述,


各欄位可針對其特性不同,

加入各式不同的屬性,

比如

unique:
設定此欄位為唯一值

primary_key:
設定此欄位為主鍵



定義好model之後,

執行上述所說的

python    manage.py   makemigrations


python   manage.py   migrate

關於資料庫的定義就完成,

就能根據網站各功能做開發











2019年6月3日 星期一

Open edX的中文化(localization)


Open   edX是功能強大的線上教學平台,

但是再強大的軟體,

如果沒有在地化,

始終就是不親民,

故今天要來教大家:

Open edX的中文化(localization)


以Ubuntu16.04為範例,

首先安裝transifex  的client客戶端,

Transifex為一個基於網路協作的翻譯平台,

Open edX也是其眾多的localization專案之一,

安裝指令為:

sudo   apt-get install   transifex-client



接著進到Open edX的虛擬環境中,

sudo -H -u edxapp bash

source /edx/app/edxapp/edxapp_env

cd /edx/app/edxapp/edx-platform


打開Open edX設定檔

conf/locale/config.yaml

找到zh-TW並將其前方的註解#號移除


執行

tx pull -l zh_TW

下載語言檔,

第一次進入系統會要求在home建立一個名為

.transifexrc的檔案,



在此範例應該為

/edx/app/edxapp/.transifexrc

內容應該為帳號登入資訊:


[https://www.transifex.com]
hostname = https://www.transifex.com
password = your_password
token =   your_token
username = your_username


接著執行

paver i18n_fastgenerate



python manage.py lms compilejsi18n   --settings=aws

產生翻譯檔案之後


再執行:

paver update_assets lms --settings=aws 

更新assets

完畢以後,

重啟系統 lms


最後再到 lms   的admin管理後台找到

dark    lang 模組,

加入

zh-TW

就能將系統中文化



如果第一次使用出現如圖示之time zone error

執行

mysql_tzinfo_to_sql /usr/share/zoneinfo | sed -e "s/Local time zone must be set--see zic manual page/local/" | mysql -u root mysql

就可修復MySQL的問題