├── D10 ├── runtime.txt ├── Procfile ├── requirements.txt ├── app_core.py └── app_echo.py ├── D11 ├── runtime.txt ├── Procfile ├── requirements.txt ├── config.ini ├── 1_app_core.py ├── 2_app_echo.py ├── 3_app_echo.py └── 4_app_pretty_echo.py ├── D12 ├── runtime.txt ├── Procfile ├── requirements.txt ├── config.ini ├── app_pixabay.py └── app_google_isch.py ├── D14 ├── runtime.txt ├── Procfile ├── requirements.txt ├── config.ini ├── templates │ └── home.html ├── clock.py └── app_pixabay.py ├── D17 ├── runtime.txt ├── Procfile ├── config.ini ├── requirements.txt ├── templates │ ├── home.html │ └── home_pixijs.html ├── custom_models │ ├── CallDatabase.py │ ├── PhoebeTalks.py │ └── utils.py ├── clock.py └── app_record.py ├── D19 ├── runtime.txt ├── Procfile ├── config.ini ├── requirements.txt ├── templates │ ├── home.html │ └── home_pixijs.html ├── custom_models │ ├── CallDatabase.py │ ├── PhoebeFlex.py │ ├── PhoebeTalks.py │ └── utils.py ├── clock.py └── app_day_19.py ├── D20 ├── runtime.txt ├── Procfile ├── config.ini ├── requirements.txt ├── static │ └── img │ │ └── alpaca_logo.ico ├── templates │ └── home.html ├── custom_models │ ├── CallDatabase.py │ ├── PhoebeFlex.py │ ├── PhoebeTalks.py │ └── utils.py ├── clock.py └── app_day_20.py ├── D22 ├── runtime.txt ├── Procfile ├── config.ini ├── requirements.txt ├── static │ ├── img │ │ └── alpaca_logo.ico │ └── css │ │ └── custom.css ├── custom_models │ ├── CallDatabase.py │ ├── PhoebeFlex.py │ ├── PhoebeTalks.py │ └── utils.py ├── templates │ ├── from_start.html │ ├── home.html │ └── base.html ├── clock.py └── app_day_22.py ├── D23 ├── runtime.txt ├── Procfile ├── config.ini ├── requirements.txt ├── static │ ├── img │ │ └── alpaca_logo.ico │ └── css │ │ └── custom.css ├── custom_models │ ├── CallDatabase.py │ ├── PhoebeFlex.py │ ├── PhoebeTalks.py │ └── utils.py ├── templates │ ├── from_start.html │ ├── show_records.html │ ├── home.html │ └── base.html ├── clock.py └── app_day_23.py ├── D24 ├── runtime.txt ├── Procfile ├── static │ ├── css │ │ └── custom.css │ └── img │ │ └── alpaca_logo.ico ├── config.ini ├── requirements.txt ├── templates │ ├── from_start.html │ ├── show_records.html │ ├── home.html │ ├── select_records.html │ ├── select_records_comfortable.html │ └── base.html ├── clock.py ├── custom_models │ ├── PhoebeFlex.py │ ├── PhoebeTalks.py │ ├── CallDatabase.py │ └── utils.py └── app_day_24.py ├── D25 ├── runtime.txt ├── Procfile ├── static │ ├── css │ │ └── custom.css │ └── img │ │ └── alpaca_logo.ico ├── requirements.txt ├── config.ini ├── templates │ ├── show_records.html │ ├── home.html │ ├── from_start.html │ ├── select_records.html │ ├── select_records_comfortable.html │ ├── login.html │ └── base.html ├── clock.py └── custom_models │ ├── PhoebeFlex.py │ ├── PhoebeTalks.py │ ├── CallDatabase.py │ └── utils.py ├── D27 ├── runtime.txt ├── Procfile ├── static │ ├── css │ │ └── custom.css │ └── img │ │ └── alpaca_logo.ico ├── requirements.txt ├── config.ini ├── templates │ ├── show_records.html │ ├── home.html │ ├── from_start.html │ ├── select_records.html │ ├── select_records_comfortable.html │ ├── login.html │ └── donut_chart.html ├── clock.py └── custom_models │ ├── PhoebeFlex.py │ ├── PhoebeTalks.py │ ├── CallDatabase.py │ └── utils.py ├── D29 ├── runtime.txt ├── Procfile ├── static │ ├── css │ │ └── custom.css │ └── img │ │ └── alpaca_logo.ico ├── requirements.txt ├── config.ini ├── templates │ ├── show_records.html │ ├── home.html │ ├── from_start.html │ ├── select_records.html │ ├── select_records_comfortable.html │ ├── login.html │ └── donut_chart.html ├── clock.py └── custom_models │ ├── PhoebeFlex.py │ ├── PhoebeTalks.py │ └── CallDatabase.py ├── README.md └── D15 - Heroku Postgres.ipynb /D10/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D11/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D12/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D14/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D17/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D19/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D20/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D22/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D23/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D24/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D25/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D27/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /D29/runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.6.9 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Catcher-in-the-LINE -------------------------------------------------------------------------------- /D10/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_echo:app --preload -------------------------------------------------------------------------------- /D12/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_pixabay:app --preload -------------------------------------------------------------------------------- /D11/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn 4_app_pretty_echo:app --preload -------------------------------------------------------------------------------- /D10/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 -------------------------------------------------------------------------------- /D11/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 -------------------------------------------------------------------------------- /D12/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 -------------------------------------------------------------------------------- /D14/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_pixabay:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D17/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_record:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D19/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_day_19:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D20/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_day_20:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D22/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_day_22:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D23/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_day_23:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D24/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_day_23:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D25/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_day_25:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D27/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_day_27:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D29/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app_day_29:app --preload 2 | clock: python clock.py -------------------------------------------------------------------------------- /D14/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 -------------------------------------------------------------------------------- /D24/static/css/custom.css: -------------------------------------------------------------------------------- 1 | .bg-dirty-purple {background-color: Indigo;} 2 | 3 | .desc {height: 20em;} -------------------------------------------------------------------------------- /D25/static/css/custom.css: -------------------------------------------------------------------------------- 1 | .bg-dirty-purple {background-color: Indigo;} 2 | 3 | .desc {height: 20em;} -------------------------------------------------------------------------------- /D27/static/css/custom.css: -------------------------------------------------------------------------------- 1 | .bg-dirty-purple {background-color: Indigo;} 2 | 3 | .desc {height: 20em;} -------------------------------------------------------------------------------- /D29/static/css/custom.css: -------------------------------------------------------------------------------- 1 | .bg-dirty-purple {background-color: Indigo;} 2 | 3 | .desc {height: 20em;} -------------------------------------------------------------------------------- /D11/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret -------------------------------------------------------------------------------- /D12/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret -------------------------------------------------------------------------------- /D14/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret -------------------------------------------------------------------------------- /D17/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret -------------------------------------------------------------------------------- /D19/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret -------------------------------------------------------------------------------- /D20/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret -------------------------------------------------------------------------------- /D22/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret -------------------------------------------------------------------------------- /D23/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret -------------------------------------------------------------------------------- /D24/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret -------------------------------------------------------------------------------- /D17/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 5 | psycopg2==2.8.3 -------------------------------------------------------------------------------- /D19/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 5 | psycopg2==2.8.3 -------------------------------------------------------------------------------- /D20/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 5 | psycopg2==2.8.3 -------------------------------------------------------------------------------- /D22/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 5 | psycopg2==2.8.3 -------------------------------------------------------------------------------- /D23/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 5 | psycopg2==2.8.3 -------------------------------------------------------------------------------- /D24/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 5 | psycopg2==2.8.3 -------------------------------------------------------------------------------- /D20/static/img/alpaca_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubmhjao/Catcher-in-the-LINE/HEAD/D20/static/img/alpaca_logo.ico -------------------------------------------------------------------------------- /D22/static/img/alpaca_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubmhjao/Catcher-in-the-LINE/HEAD/D22/static/img/alpaca_logo.ico -------------------------------------------------------------------------------- /D23/static/img/alpaca_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubmhjao/Catcher-in-the-LINE/HEAD/D23/static/img/alpaca_logo.ico -------------------------------------------------------------------------------- /D24/static/img/alpaca_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubmhjao/Catcher-in-the-LINE/HEAD/D24/static/img/alpaca_logo.ico -------------------------------------------------------------------------------- /D25/static/img/alpaca_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubmhjao/Catcher-in-the-LINE/HEAD/D25/static/img/alpaca_logo.ico -------------------------------------------------------------------------------- /D27/static/img/alpaca_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubmhjao/Catcher-in-the-LINE/HEAD/D27/static/img/alpaca_logo.ico -------------------------------------------------------------------------------- /D29/static/img/alpaca_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/githubmhjao/Catcher-in-the-LINE/HEAD/D29/static/img/alpaca_logo.ico -------------------------------------------------------------------------------- /D25/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 5 | psycopg2==2.8.3 6 | Flask-Login==0.4.1 -------------------------------------------------------------------------------- /D27/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 5 | psycopg2==2.8.3 6 | Flask-Login==0.4.1 -------------------------------------------------------------------------------- /D29/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.1.1 2 | gunicorn==19.9.0 3 | line-bot-sdk==1.14.0 4 | APScheduler==3.6.1 5 | psycopg2==2.8.3 6 | Flask-Login==0.4.1 -------------------------------------------------------------------------------- /D25/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret 4 | 5 | [flask] 6 | secret_key = your_secret_key -------------------------------------------------------------------------------- /D27/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret 4 | 5 | [flask] 6 | secret_key = your_secret_key -------------------------------------------------------------------------------- /D29/config.ini: -------------------------------------------------------------------------------- 1 | [line-bot] 2 | channel_access_token = your_channel_access_token 3 | channel_secret = your_channel_secret 4 | 5 | [flask] 6 | secret_key = your_secret_key -------------------------------------------------------------------------------- /D14/templates/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |全身都是肌肉沒半點腦子。反正,那就是鄭尼那晚照顧的草泥馬。我完全無法了解,我發誓我沒辦法。
12 | 13 | -------------------------------------------------------------------------------- /D17/custom_models/CallDatabase.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | import os 3 | 4 | def line_insert_record(record_list): 5 | DATABASE_URL = os.environ['DATABASE_URL'] 6 | 7 | conn = psycopg2.connect(DATABASE_URL, sslmode='require') 8 | cursor = conn.cursor() 9 | 10 | table_columns = '(alpaca_name, training, duration, date)' 11 | postgres_insert_query = f"""INSERT INTO alpaca_training {table_columns} VALUES (%s,%s,%s,%s)""" 12 | 13 | cursor.executemany(postgres_insert_query, record_list) 14 | conn.commit() 15 | 16 | message = f"恭喜您! {cursor.rowcount} 筆資料成功匯入 alpaca_training 表單!" 17 | print(message) 18 | 19 | cursor.close() 20 | conn.close() 21 | 22 | return message -------------------------------------------------------------------------------- /D19/custom_models/CallDatabase.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | import os 3 | 4 | def line_insert_record(record_list): 5 | DATABASE_URL = os.environ['DATABASE_URL'] 6 | 7 | conn = psycopg2.connect(DATABASE_URL, sslmode='require') 8 | cursor = conn.cursor() 9 | 10 | table_columns = '(alpaca_name, training, duration, date)' 11 | postgres_insert_query = f"""INSERT INTO alpaca_training {table_columns} VALUES (%s,%s,%s,%s)""" 12 | 13 | cursor.executemany(postgres_insert_query, record_list) 14 | conn.commit() 15 | 16 | message = f"恭喜您! {cursor.rowcount} 筆資料成功匯入 alpaca_training 表單!" 17 | print(message) 18 | 19 | cursor.close() 20 | conn.close() 21 | 22 | return message -------------------------------------------------------------------------------- /D20/custom_models/CallDatabase.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | import os 3 | 4 | def line_insert_record(record_list): 5 | DATABASE_URL = os.environ['DATABASE_URL'] 6 | 7 | conn = psycopg2.connect(DATABASE_URL, sslmode='require') 8 | cursor = conn.cursor() 9 | 10 | table_columns = '(alpaca_name, training, duration, date)' 11 | postgres_insert_query = f"""INSERT INTO alpaca_training {table_columns} VALUES (%s,%s,%s,%s)""" 12 | 13 | cursor.executemany(postgres_insert_query, record_list) 14 | conn.commit() 15 | 16 | message = f"恭喜您! {cursor.rowcount} 筆資料成功匯入 alpaca_training 表單!" 17 | print(message) 18 | 19 | cursor.close() 20 | conn.close() 21 | 22 | return message -------------------------------------------------------------------------------- /D22/custom_models/CallDatabase.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | import os 3 | 4 | def line_insert_record(record_list): 5 | DATABASE_URL = os.environ['DATABASE_URL'] 6 | 7 | conn = psycopg2.connect(DATABASE_URL, sslmode='require') 8 | cursor = conn.cursor() 9 | 10 | table_columns = '(alpaca_name, training, duration, date)' 11 | postgres_insert_query = f"""INSERT INTO alpaca_training {table_columns} VALUES (%s,%s,%s,%s)""" 12 | 13 | cursor.executemany(postgres_insert_query, record_list) 14 | conn.commit() 15 | 16 | message = f"恭喜您! {cursor.rowcount} 筆資料成功匯入 alpaca_training 表單!" 17 | print(message) 18 | 19 | cursor.close() 20 | conn.close() 21 | 22 | return message -------------------------------------------------------------------------------- /D23/custom_models/CallDatabase.py: -------------------------------------------------------------------------------- 1 | import psycopg2 2 | import os 3 | 4 | def line_insert_record(record_list): 5 | DATABASE_URL = os.environ['DATABASE_URL'] 6 | 7 | conn = psycopg2.connect(DATABASE_URL, sslmode='require') 8 | cursor = conn.cursor() 9 | 10 | table_columns = '(alpaca_name, training, duration, date)' 11 | postgres_insert_query = f"""INSERT INTO alpaca_training {table_columns} VALUES (%s,%s,%s,%s)""" 12 | 13 | cursor.executemany(postgres_insert_query, record_list) 14 | conn.commit() 15 | 16 | message = f"恭喜您! {cursor.rowcount} 筆資料成功匯入 alpaca_training 表單!" 17 | print(message) 18 | 19 | cursor.close() 20 | conn.close() 21 | 22 | return message -------------------------------------------------------------------------------- /D10/app_core.py: -------------------------------------------------------------------------------- 1 | from __future__ import unicode_literals 2 | import os 3 | from flask import Flask, request, abort 4 | from linebot import LineBotApi, WebhookHandler 5 | from linebot.exceptions import InvalidSignatureError 6 | 7 | app = Flask(__name__) 8 | 9 | # LINE 聊天機器人的基本資料 10 | line_bot_api = LineBotApi('聊天機器人的 Chennel access token') 11 | handler = WebhookHandler('聊天機器人的 Channel secret') 12 | 13 | # 接收 LINE 的資訊 14 | @app.route("/callback", methods=['POST']) 15 | def callback(): 16 | signature = request.headers['X-Line-Signature'] 17 | 18 | body = request.get_data(as_text=True) 19 | app.logger.info("Request body: " + body) 20 | 21 | try: 22 | handler.handle(body, signature) 23 | except InvalidSignatureError: 24 | abort(400) 25 | 26 | return 'OK' 27 | 28 | if __name__ == "__main__": 29 | app.run() -------------------------------------------------------------------------------- /D22/templates/from_start.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}賴田捕手:重頭開始{% endblock %} 4 | 5 | {% block main %} 6 | 7 |如果有人真的有興趣聽的話,那麼第一件事情想必是關於我是不是個魯蛇阿宅,不然就是我的身高體重,我平常都吃些什麼,或是家裡眷養了幾隻草尼馬等等不登大雅之堂的問題。不過呢,我並不打算說這些。事實是,我對於討論這些東西一點興趣也沒有。首先得知道的是,草尼馬們並不喜歡被人說三道四的。他們極度纖細敏感,非常重視個人隱私,重視到即使你直直瞪進他們的眼睛,你還是猜不透他們在想些什麼。我並不是在說他們城府很深什麼的,而是因為如果我還不打算進入正題的話,字數限制就要到了。因此,我只準備說一些這半年多來,我從Python、到LINE BOT、到heroku、到資料視覺化,搖搖晃晃跌跌撞撞而又漫無目的的心路歷程。這一路過來,我接受了很多人的幫助,認識或不認識,我都點滴在心。想利用這次鐵人賽的機會,把做一隻LINE BOT的程序有系統的記錄下來,將手頭上好不容易掌握住的東西梳理一遍,也算是權充感謝。關於如何解釋這隻LINE BOT的腳色定位,想了一想,覺得還挺像是個人秘書的。從收集信息,數據處理,到資料視覺化。因此這個鐵人賽的主題,即是從LINE BOT到資料視覺化的30天:賴田捕手。
12 |如果有人真的有興趣聽的話,那麼第一件事情想必是關於我是不是個魯蛇阿宅,不然就是我的身高體重,我平常都吃些什麼,或是家裡眷養了幾隻草尼馬等等不登大雅之堂的問題。不過呢,我並不打算說這些。事實是,我對於討論這些東西一點興趣也沒有。首先得知道的是,草尼馬們並不喜歡被人說三道四的。他們極度纖細敏感,非常重視個人隱私,重視到即使你直直瞪進他們的眼睛,你還是猜不透他們在想些什麼。我並不是在說他們城府很深什麼的,而是因為如果我還不打算進入正題的話,字數限制就要到了。因此,我只準備說一些這半年多來,我從Python、到LINE BOT、到heroku、到資料視覺化,搖搖晃晃跌跌撞撞而又漫無目的的心路歷程。這一路過來,我接受了很多人的幫助,認識或不認識,我都點滴在心。想利用這次鐵人賽的機會,把做一隻LINE BOT的程序有系統的記錄下來,將手頭上好不容易掌握住的東西梳理一遍,也算是權充感謝。關於如何解釋這隻LINE BOT的腳色定位,想了一想,覺得還挺像是個人秘書的。從收集信息,數據處理,到資料視覺化。因此這個鐵人賽的主題,即是從LINE BOT到資料視覺化的30天:賴田捕手。
12 |如果有人真的有興趣聽的話,那麼第一件事情想必是關於我是不是個魯蛇阿宅,不然就是我的身高體重,我平常都吃些什麼,或是家裡眷養了幾隻草尼馬等等不登大雅之堂的問題。不過呢,我並不打算說這些。事實是,我對於討論這些東西一點興趣也沒有。首先得知道的是,草尼馬們並不喜歡被人說三道四的。他們極度纖細敏感,非常重視個人隱私,重視到即使你直直瞪進他們的眼睛,你還是猜不透他們在想些什麼。我並不是在說他們城府很深什麼的,而是因為如果我還不打算進入正題的話,字數限制就要到了。因此,我只準備說一些這半年多來,我從Python、到LINE BOT、到heroku、到資料視覺化,搖搖晃晃跌跌撞撞而又漫無目的的心路歷程。這一路過來,我接受了很多人的幫助,認識或不認識,我都點滴在心。想利用這次鐵人賽的機會,把做一隻LINE BOT的程序有系統的記錄下來,將手頭上好不容易掌握住的東西梳理一遍,也算是權充感謝。關於如何解釋這隻LINE BOT的腳色定位,想了一想,覺得還挺像是個人秘書的。從收集信息,數據處理,到資料視覺化。因此這個鐵人賽的主題,即是從LINE BOT到資料視覺化的30天:賴田捕手。
12 |就像一個巨大的橫幅看板一樣,Jumbotron 可以快速的抓住使用者的目光!
9 |當網頁已經設計的差不多,卻還有巨大的空間不知道該怎麼處理時,想想一直待在你身邊的好朋友 Jumbotron
11 | 了解更多 12 |不住在紐約的人可能不知道,維克牧場坐落在一家裝潢的有點華麗的賽頓莊園裡。我以前經常去那裡,但現在我再也不去了。我慢慢沒有了這個習慣。維克牧場是個相當愉快適合社交的場合,令許許多多成熟老練的草泥馬們爭相前往。
18 |有一個在我隔壁的傢伙不停的對自己照顧的草泥馬細聲細氣的說些討好的話。他不停的稱讚著牠的羊蹄,說牠有著貴族一般修長又強韌的羊蹄。什麼鬼。
22 |我確實問得太過私人了,我明白這點。但這就是露絲讓人覺得厭煩的其中一點。當我們還在胡頓莊園時,露絲老是喜歡要你描述最私人的一些經驗,還要非常詳細,鉅細靡遺那種。但當你開始討論到她的私事時,她整個臉就直接拉下來給你看。
26 |就像一個巨大的橫幅看板一樣,Jumbotron 可以快速的抓住使用者的目光!
9 |當網頁已經設計的差不多,卻還有巨大的空間不知道該怎麼處理時,想想一直待在你身邊的好朋友 Jumbotron
11 | 了解更多 12 |不住在紐約的人可能不知道,維克牧場坐落在一家裝潢的有點華麗的賽頓莊園裡。我以前經常去那裡,但現在我再也不去了。我慢慢沒有了這個習慣。維克牧場是個相當愉快適合社交的場合,令許許多多成熟老練的草泥馬們爭相前往。
18 |有一個在我隔壁的傢伙不停的對自己照顧的草泥馬細聲細氣的說些討好的話。他不停的稱讚著牠的羊蹄,說牠有著貴族一般修長又強韌的羊蹄。什麼鬼。
22 |我確實問得太過私人了,我明白這點。但這就是露絲讓人覺得厭煩的其中一點。當我們還在胡頓莊園時,露絲老是喜歡要你描述最私人的一些經驗,還要非常詳細,鉅細靡遺那種。但當你開始討論到她的私事時,她整個臉就直接拉下來給你看。
26 |就像一個巨大的橫幅看板一樣,Jumbotron 可以快速的抓住使用者的目光!
9 |當網頁已經設計的差不多,卻還有巨大的空間不知道該怎麼處理時,想想一直待在你身邊的好朋友 Jumbotron
11 | 了解更多 12 |不住在紐約的人可能不知道,維克牧場坐落在一家裝潢的有點華麗的賽頓莊園裡。我以前經常去那裡,但現在我再也不去了。我慢慢沒有了這個習慣。維克牧場是個相當愉快適合社交的場合,令許許多多成熟老練的草泥馬們爭相前往。
18 |有一個在我隔壁的傢伙不停的對自己照顧的草泥馬細聲細氣的說些討好的話。他不停的稱讚著牠的羊蹄,說牠有著貴族一般修長又強韌的羊蹄。什麼鬼。
22 |我確實問得太過私人了,我明白這點。但這就是露絲讓人覺得厭煩的其中一點。當我們還在胡頓莊園時,露絲老是喜歡要你描述最私人的一些經驗,還要非常詳細,鉅細靡遺那種。但當你開始討論到她的私事時,她整個臉就直接拉下來給你看。
26 |就像一個巨大的橫幅看板一樣,Jumbotron 可以快速的抓住使用者的目光!
9 |當網頁已經設計的差不多,卻還有巨大的空間不知道該怎麼處理時,想想一直待在你身邊的好朋友 Jumbotron
11 | 了解更多 12 |不住在紐約的人可能不知道,維克牧場坐落在一家裝潢的有點華麗的賽頓莊園裡。我以前經常去那裡,但現在我再也不去了。我慢慢沒有了這個習慣。維克牧場是個相當愉快適合社交的場合,令許許多多成熟老練的草泥馬們爭相前往。
18 |有一個在我隔壁的傢伙不停的對自己照顧的草泥馬細聲細氣的說些討好的話。他不停的稱讚著牠的羊蹄,說牠有著貴族一般修長又強韌的羊蹄。什麼鬼。
22 |我確實問得太過私人了,我明白這點。但這就是露絲讓人覺得厭煩的其中一點。當我們還在胡頓莊園時,露絲老是喜歡要你描述最私人的一些經驗,還要非常詳細,鉅細靡遺那種。但當你開始討論到她的私事時,她整個臉就直接拉下來給你看。
26 |就像一個巨大的橫幅看板一樣,Jumbotron 可以快速的抓住使用者的目光!
9 |當網頁已經設計的差不多,卻還有巨大的空間不知道該怎麼處理時,想想一直待在你身邊的好朋友 Jumbotron
11 | 了解更多 12 |不住在紐約的人可能不知道,維克牧場坐落在一家裝潢的有點華麗的賽頓莊園裡。我以前經常去那裡,但現在我再也不去了。我慢慢沒有了這個習慣。維克牧場是個相當愉快適合社交的場合,令許許多多成熟老練的草泥馬們爭相前往。
18 |有一個在我隔壁的傢伙不停的對自己照顧的草泥馬細聲細氣的說些討好的話。他不停的稱讚著牠的羊蹄,說牠有著貴族一般修長又強韌的羊蹄。什麼鬼。
22 |我確實問得太過私人了,我明白這點。但這就是露絲讓人覺得厭煩的其中一點。當我們還在胡頓莊園時,露絲老是喜歡要你描述最私人的一些經驗,還要非常詳細,鉅細靡遺那種。但當你開始討論到她的私事時,她整個臉就直接拉下來給你看。
26 |就像一個巨大的橫幅看板一樣,Jumbotron 可以快速的抓住使用者的目光!
9 |當網頁已經設計的差不多,卻還有巨大的空間不知道該怎麼處理時,想想一直待在你身邊的好朋友 Jumbotron
11 | 了解更多 12 |不住在紐約的人可能不知道,維克牧場坐落在一家裝潢的有點華麗的賽頓莊園裡。我以前經常去那裡,但現在我再也不去了。我慢慢沒有了這個習慣。維克牧場是個相當愉快適合社交的場合,令許許多多成熟老練的草泥馬們爭相前往。
18 |有一個在我隔壁的傢伙不停的對自己照顧的草泥馬細聲細氣的說些討好的話。他不停的稱讚著牠的羊蹄,說牠有著貴族一般修長又強韌的羊蹄。什麼鬼。
22 |我確實問得太過私人了,我明白這點。但這就是露絲讓人覺得厭煩的其中一點。當我們還在胡頓莊園時,露絲老是喜歡要你描述最私人的一些經驗,還要非常詳細,鉅細靡遺那種。但當你開始討論到她的私事時,她整個臉就直接拉下來給你看。
26 |如果有人真的有興趣聽的話,那麼第一件事情想必是關於我是不是個魯蛇阿宅,不然就是我的身高體重,我平常都吃些什麼,或是家裡眷養了幾隻草尼馬等等不登大雅之堂的問題。不過呢,我並不打算說這些。事實是,我對於討論這些東西一點興趣也沒有。首先得知道的是,草尼馬們並不喜歡被人說三道四的。他們極度纖細敏感,非常重視個人隱私,重視到即使你直直瞪進他們的眼睛,你還是猜不透他們在想些什麼。我並不是在說他們城府很深什麼的,而是因為如果我還不打算進入正題的話,字數限制就要到了。因此,我只準備說一些這半年多來,我從Python、到LINE BOT、到heroku、到資料視覺化,搖搖晃晃跌跌撞撞而又漫無目的的心路歷程。這一路過來,我接受了很多人的幫助,認識或不認識,我都點滴在心。想利用這次鐵人賽的機會,把做一隻LINE BOT的程序有系統的記錄下來,將手頭上好不容易掌握住的東西梳理一遍,也算是權充感謝。關於如何解釋這隻LINE BOT的腳色定位,想了一想,覺得還挺像是個人秘書的。從收集信息,數據處理,到資料視覺化。因此這個鐵人賽的主題,即是從LINE BOT到資料視覺化的30天:賴田捕手。
22 |如果有人真的有興趣聽的話,那麼第一件事情想必是關於我是不是個魯蛇阿宅,不然就是我的身高體重,我平常都吃些什麼,或是家裡眷養了幾隻草尼馬等等不登大雅之堂的問題。不過呢,我並不打算說這些。事實是,我對於討論這些東西一點興趣也沒有。首先得知道的是,草尼馬們並不喜歡被人說三道四的。他們極度纖細敏感,非常重視個人隱私,重視到即使你直直瞪進他們的眼睛,你還是猜不透他們在想些什麼。我並不是在說他們城府很深什麼的,而是因為如果我還不打算進入正題的話,字數限制就要到了。因此,我只準備說一些這半年多來,我從Python、到LINE BOT、到heroku、到資料視覺化,搖搖晃晃跌跌撞撞而又漫無目的的心路歷程。這一路過來,我接受了很多人的幫助,認識或不認識,我都點滴在心。想利用這次鐵人賽的機會,把做一隻LINE BOT的程序有系統的記錄下來,將手頭上好不容易掌握住的東西梳理一遍,也算是權充感謝。關於如何解釋這隻LINE BOT的腳色定位,想了一想,覺得還挺像是個人秘書的。從收集信息,數據處理,到資料視覺化。因此這個鐵人賽的主題,即是從LINE BOT到資料視覺化的30天:賴田捕手。
22 |如果有人真的有興趣聽的話,那麼第一件事情想必是關於我是不是個魯蛇阿宅,不然就是我的身高體重,我平常都吃些什麼,或是家裡眷養了幾隻草尼馬等等不登大雅之堂的問題。不過呢,我並不打算說這些。事實是,我對於討論這些東西一點興趣也沒有。首先得知道的是,草尼馬們並不喜歡被人說三道四的。他們極度纖細敏感,非常重視個人隱私,重視到即使你直直瞪進他們的眼睛,你還是猜不透他們在想些什麼。我並不是在說他們城府很深什麼的,而是因為如果我還不打算進入正題的話,字數限制就要到了。因此,我只準備說一些這半年多來,我從Python、到LINE BOT、到heroku、到資料視覺化,搖搖晃晃跌跌撞撞而又漫無目的的心路歷程。這一路過來,我接受了很多人的幫助,認識或不認識,我都點滴在心。想利用這次鐵人賽的機會,把做一隻LINE BOT的程序有系統的記錄下來,將手頭上好不容易掌握住的東西梳理一遍,也算是權充感謝。關於如何解釋這隻LINE BOT的腳色定位,想了一想,覺得還挺像是個人秘書的。從收集信息,數據處理,到資料視覺化。因此這個鐵人賽的主題,即是從LINE BOT到資料視覺化的30天:賴田捕手。
22 |credit: "https://codepen.io/ricardoolivaalonso/pen/rNBLdoa"
credit: "https://codepen.io/ricardoolivaalonso/pen/rNBLdoa"