現場掛號篇:
以自己現場掛號的經歷來寫,當初朋友跟我說他父親為了替母親掛號,一大早五點就到台大醫院門口排隊等現場掛號,好不容易排到最後一個當日掛號的名額。所以我也只好戰戰兢兢的更早出發去排隊。
1. 由於熱門的名醫每日看診病患都早就掛號滿了,所以當天要現場掛號的名額有限,很多人都搶破頭,雖然現場掛號開放領取號碼牌的時間為05:40。但最號提早約一個小時的時間抵達較為保險。記得當初為了當日看診,我是一早04:45分左右抵達台大醫院,門口已經開始排了一條準備領號碼牌的人潮。
2. 到了05:40,醫院正式開放領取號碼牌時,會由警衛先生井然有序的將隊伍根據要看的科別分成三排,這時候請仔細聽指揮分隊,因為有一路隊伍要帶到二樓去領號碼牌,兩路到一樓不同位置領取號碼牌。領完就沒嘍!
3. 跟著隊伍進去領去號碼牌後,警衛先生會說明,如果領到1~10號的民眾,麻煩請坐在掛號批價大廳的座位區等候,其實應該也是要繼續等到07:45才開始掛號。
4. 由於我領到的是13號,時間也才快早上6點,所以先跑回京站辦公室休息吃個早餐,等著7點半左右再出發去掛號。
5. 請提早或準時在07:45抵達掛號處,等待叫號,如果是初診民眾,可能還有些資料、看診同意書之類的東西要填寫,所以提早到先寫一寫,可以加快等等掛號的手續。
6. 根據看診的科別,每天可以現場加掛的人數有限,所以即使你領到的號碼是10號,要是前面的人都跟你看同一位醫生,也有可能因為醫生可以加掛的人數已滿,而廣播說該名醫生今日額度已滿,下回請早。
所以現場掛號真的是個苦力活,加上需要點運氣,如果不想碰運氣,就是得非常早就去排隊,另外還得先確認當天想看的醫生是否有請假,免得白跑一趟。
網路掛號篇:
已經有三天早上爬起來幫我媽掛號的經驗了,實在是很累很辛苦,但是不用一早跑去台大醫院排隊,怎麼也算是輕鬆了。因為第一次掛號後,看診當天遇到颱風取消看診,只好在掛第二次,第二次一早爬起來發現醫生兩週後請假,我傻!一直到的第三次,也就是今天才掛號成功。網路掛號名額也是有限,所以速度仍然很重要,雖然還是比搶熱門演唱會門票輕鬆啦!
1. 網路掛號是每天凌晨00:00開始,而一般可以掛到兩週後的時間,比如今天10/5(三)凌晨00:00,如果是熱門的醫生,大概只能掛到10/19(三)的診
2. 所以半夜請提早在00:00之前,打開電腦,連上台大醫院網路掛號頁面,個人是推薦用醫生名稱掛號啦!如果你確定要找哪位醫生的話,可能可以快一點。
3. 先把醫生名字打好,然後三不五時丟去查詢一下,看看頁面刷新的情況,以確保00:00一開始可以順利更新。
4. 順利的話,00:00一到,14天後的掛號就可以進去掛號了,這邊還是以初診來舉例。
5. 儘快的點下「掛號」後,下方會出現要輸入身份證字號、出生年月日的欄位,這邊都是能越快完成越好。
6. 初診的民眾,接下來會在出現更多資料需要填寫,包含原本的「身份證字號」、「出生年月日」、「姓名」、「性別」、「戶籍地址」、「通訊地址」、「聯絡電話」、「手機號碼」以及「聯絡信箱」,東西很多,所以請提早準備好這些資料,以加速填寫過程。
7. 填寫完成後,應該就可以順利掛號完成,取得看診序號,接下來就是看診當天記得要去看醫生
8. 看診當天的初診病患,還是得先去掛號櫃台完成報到手續,才能去看診喔!
以上,希望可以幫助到日後有需要的民眾。
]]>
{
"name": "sample",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"dependencies": {
"jsx-loader": "^0.13.2",
"webpack": "^1.12.14"
},
"devDependencies": {
"babel-core": "^6.7.4",
"babel-loader": "^6.2.4",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"eslint": "^2.7.0",
"eslint-loader": "^1.3.0",
"eslint-plugin-react": "^4.2.3",
"react": "^0.14.8",
"react-dom": "^0.14.8"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
module.exports = {
entry: ['./assets/jsx/app'],
output: {
path: 'public/js/',
filename: 'bundle.js'
},
resolve: {
extensions: ['', '.js', '.jsx']
},
module: {
preLoaders: [
{
test: /\.jsx$/,
exclude: /node_modules/,
loader: 'eslint-loader'
}
],
loaders: [
{
test: /\.js|jsx$/,
exclude: /node_modules/,
loader: 'babel-loader',
query:{
"presets": ["es2015", "react"]
}
}
]
}
}
sudo npm install -g eslint
eslint --init
,可參考下面回答
? How would you like to configure ESLint? Answer questions about your style
? Are you using ECMAScript 6 features? Yes
? Are you using ES6 modules? Yes
? Where will your code run? Browser
? Do you use CommonJS? Yes
? Do you use JSX? Yes
? Do you use React Yes
? What style of indentation do you use? Spaces
? What quotes do you use for strings? Single
? What line endings do you use? Unix
? Do you require semicolons? Yes
? What format do you want your config file to be in? JSON
npm install --save-dev eslint-plugin-react
{
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"jquery": true
},
"extends": ["eslint:recommended", "plugin:react/recommended"],
"parserOptions": {
"ecmaFeatures": {
"experimentalObjectRestSpread": true,
"jsx": true
},
"sourceType": "module"
},
"plugins": [
"react"
],
"rules": {
"indent": [
"error",
4
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"single"
],
"semi": [
"error",
"always"
],
"react/no-danger": 0,
"no-console": ["error", { "allow": ["log", "warn", "error"] }]
},
"globals": {
"socket": true,
"eventEmitter": true
}
}
上圖是為了我奮戰了九年多的螢幕,現在已經拆下來被棄置於一旁,想想這台螢幕也是我研究所畢業,要正式進入中研院國防役之前買的,隨著在中研院工作的期間,搬家了幾次,一開始箱子都有留著,到後來搬回家,想說不會在用到了,連同喇叭的箱子一起都丟了。
今年的新年年假特別長,放了九天,不過年假前一週,已經跟家人提早到嘉義遊玩了兩三天,所以過年這幾天放到有點無聊,韓劇也追到沒意思了,改看一些JS的教學影片。誰知道剛收假要開工的第一天,一早起床正準備打開電腦看動畫配早餐,結果螢幕就立刻關機,不管我怎麼開機,螢幕的畫面都一閃即逝,彷彿那瞬間劃過星空的流星。
早上只好很克難的先用NB頂著先,看動畫配完早餐後,馬上開啟線上購物來挑新螢幕,雖然有想過舊的螢幕是不是能修好,感覺只是電源裡頭接觸不良之類的吧!不過都用了九年多,也很夠本了,乾脆買一台新的螢幕吧!以後看影片也比較方便,不然現在的影片大多是寬螢幕,舊的這台還是1280x1024(5:4)的螢幕。
挑了很久從22吋挑到27吋,從三、四千的預算挑到八九千,後來到想想這個月已經刷了一台 acer 14吋的筆電給家人用,該省著點花,最後選了台跟 Tim 與育修目前工作外接螢幕同款的 LG 22MP57HQ-P 22型 AH-IPS 螢幕,價格 $3699 還算ok,就趕快刷下去,免得一猶豫又要挑很久。
下午回馬偕胸腔內科回診,確定當初花了三天早上收集的痰裡面沒有結核菌,可是照完X光,醫生說還是感覺有什麼細支氣管炎,又讓我去照 CT 跟抽血檢查,下週一再回診,希望可以慢慢改善,雖然日常作息感覺不出有啥毛病,不過既然醫生都覺得有問題,還是趕緊治療好比較好。看完醫生正在回程搭捷運路上,快遞就打電話來說螢幕即將送到,爽啦~一回家趕緊裝起來測試。
本來還想說這台有HDMI接頭,又有個耳機輸出孔,感覺應該有內建喇叭吧!雖然我耳朵只比木耳好一些,但也覺得看影片有聲音就好了,想把有點佔空間的喇叭收起來,才發現這台螢幕沒有內建喇叭...Orz...所以原本的喇叭只好繼續留著使用,運氣不錯的是,在重新接線的過程中,喇叭的音量控制似乎恢復正常了,之前喇叭整組不能用,後來發現似乎是線路接觸不良,簡單處理一下恢復了可以發聲卻無法調整音量的囧況,至少軟體本身還可以調整音量,現在連音量控制都回來,實在太幸運了!
新的螢幕變成寬螢幕,接上主機一進入windows,感覺整個世界都不同了,眼前的世界整個寬廣了起來,以前網頁的 tab 開幾個就已經到頭了,現在可以多開好幾個...XD。接下來希望這台螢幕可以陪我再戰個好幾年。
]]>
整個作法其實不算很複雜,但是必須先理解滿多服務如何使用,這裡大致上會使用到的 AWS 服務項目有:S3, Elastic Transcoder, Lambda。
● S3 : 儲存空間 ● Elastic Transcoder : 轉檔服務,可將 S3 上的影音檔轉成各種格式 ● Lambda : 類似可自行撰寫的 API,來完成一些制式的工作項目
首先,需自行花點時間了解 Elastic Transcoder 的操作與使用,這部份可自行上網找尋相關資訊,或參考 這篇 。
如果 Elastic Transcoder 都已經了解怎麼操作,就算是已經理解這像轉檔服務的使用方式,接著就是透過 Lambda 的方式將這些工作自動化,所以接下來的重頭戲就是如何撰寫 Lambda 的 function 了,沒記錯的話,目前提供三種語法來撰寫,有 Python、Node.js、Java 三種,就請大家找個自己最熟悉或擅長的程式語言吧!底下我會以 Node.js 的語法來當範例,因為 Python 跟 Java 都很不熟,node.js 至少算是 javascript 的好親戚,平時多少有再寫。
先附上個人參考文獻,其實能力好的,看完這兩篇,大概也不用我多廢話了
Using AWS Lambda for Web Video Transcoding
Automating Transcoding using AWS service (Elastic Transcoder , Lambda, S3 notifications)
底下先來看圖說故事,先到 AWS Lambda 內去建立一個 function,內容是由 S3 bucket 內特定資料夾(video/)內,建立(新增/上傳)了一個 mp4 檔案時,所觸發的條件。
Step 1. Create Lambda function
Step 2. 有範例程式就選來用吧!不然就得自己從頭寫,挺麻煩的
Step 3. 確定好觸發 Lambda 的條件設定
Step 4. 命名以及設定執行 Lambda 的角色權限
在此提供該角色權限的 Policy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "Stmt1441234334958", "Action": [ "elastictranscoder:CreateJob" ], "Effect": "Allow", "Resource": "*" } ] }
Step 5. 檢查一下所有的設定,沒問題就繼續了!
測試檔的用法,左上角的 Action -> Configure test event,然後選澤 S3 Put 的範例來修改,進行測試
請到 S3 上找個檔案來比對修改測試檔範例,改好後測試的結果應該如上一張圖。
再熟悉 lambda 的使用方式後,就可以開始撰寫轉檔的部份了,其實就是再 S3 上傳 mp4 檔後,建立一個 Elastic Transcoder 的工作來進行轉檔
console.log('Loading function'); var AWS = require('aws-sdk'); var s3 = new AWS.S3({ apiVersion: '2006-03-01' }); var eltr = new AWS.ElasticTranscoder({ apiVersion: '2012-09-25', region: 'ap-northeast-1' }); var pipelineId = '1453215075XXX-XXXXXX'; // please use your pipeline id // System preset: HLS 1.5M var preset_HLS_15M = '1351620000001-200020'; // return basename without extension function basename(path) { return path.split('/').reverse()[0].split('.')[0]; } exports.handler = function(event, context) { var bucket = event.Records[0].s3.bucket.name; var key = event.Records[0].s3.object.key; var params = { Bucket: bucket, Key: key }; s3.getObject(params, function(err, data) { if (err) { console.log(err); var message = "Error getting object " + key + " from bucket " + bucket + ". Make sure they exist and your bucket is in the same region as this function."; console.log(message); context.fail(message); } else { /* Below section can be used if you want to put any check based on metadata */ if (data.ContentType == 'video/mp4') { console.log('Found new video: ' + key + ', sending to ET'); sendVideoToET(key, context); } else { console.log('Upload ' + key + 'was not video'); console.log(JSON.stringify(data.Metadata)); context.fail(); } } }); }; function sendVideoToET(key, context) { var params = { PipelineId: pipelineId, OutputKeyPrefix: null, Input: { Key: key, FrameRate: 'auto', Resolution: 'auto', AspectRatio: 'auto', Interlaced: 'auto', Container: 'auto' }, Output: { Key: 'stream/' + basename(key), ThumbnailPattern: 'stream-thumb/' + basename(key) + '-thumb-{count}', PresetId: preset_HLS_15M, Rotate: 'auto', SegmentDuration: "10" } }; eltr.createJob(params, function(err, data) { if (err) { console.log(err, err.stack); // an error occurred context.fail(); }else { console.log("Create Job Success"); context.succeed(); } }); }
先到自己 S3 bucket 上建立 video 目錄,然後傳個 mp4 擋上去,接著修改一下 test configure 的內容,使用剛剛傳上去的 mp4 檔來測試,當測試成功後,再回到 S3 bucket 內,應該就可以看到轉出來的檔案在 stream 目錄下,以及縮圖在 stream-thumb 下
]]>{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*" } ] }
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*" }, { "Sid": "2", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E3UTXKOK3ZE5H" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*" } ] }
https://s3-ap-northeast-1.amazonaws.com/your-bucket-name/object-key
這時 git 帳號的 $HOME(家目錄)下,會產生
repo ios_test
RW = alex
R = john
|
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 423 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: creating ios_test...
remote: Initialized empty Git repository in /home/git/repositories/ios_test.git/
remote:
To git@localhost:gitolite-admin.git
a37d282..62dffa9 master -> master
|
第三步,安裝 Gitweb 並整合 Gitolite
|
Alias /gitweb /usr/share/gitweb
<Directory /usr/share/gitweb>
Options +FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
</Directory>
|
$projectroot = "/home/git/repositories";
# Syntax highlighting
$feature{'highlight'}{'default'} = [1];
# 提供系統 loadavg check,若系統繁忙,逛 gitweb 只會看到 503 - The load average on the server is too high 訊息
$masload = 500;
$projects_list = $projectroot; # unmark this line
|
$REPO_UMASK = 0027; # change this value
$WEB_INTERFACE = "gitweb”; # unmark this line
$GL_GITCONFIG_KEYS = "gitweb.owner gitweb.description .*”; # change this value
|
加入部分
repo @all
R = gitweb daemon
專案描述部份
repo testing
RW+ = @all
config gitweb.owner = "Project Owner Name"
config gitweb.description = "Project brief description"
config gitweb.url = git@<IP or 網址>:testing.git
|
]]>
$ sudo apt-get install unison
# Two root directories to sync.
# You can use ssh:// to sync over SSH
root = /home/alice/sync_folder
root = ssh://dev@192.168.1.10//home/alice/sync_folder
# If you want one-way mirroring from one replica to the other, specify the source replica using "force" as follows.
# force = /home/alice/sync_folder
# If you want Unison to run without any user input, try "batch" mode.
batch = true
# If you don't want to be prompted, and just accept Unison's recommendation:
auto = true
# Optionally, you can sync specific sub directories only (under the root).
# path = dir1
# Optionally, you can ignore specific files or directories that are matched with regular expressions.
# ignore = Name *.o
# ignore = Path */temp/archive_*
# If you want to ignore difference in file props:
perms = 0
$ unison sync
Contacting server...
Connected [//local//home/alice/sync_folder -> //remote_host//home/alice/sync_folder]
Looking for changes
Waiting for changes from server
Reconciling changes
new file --> document1.pdf
<-- new file my.jpg
Propagating updates
UNISON 2.40.63 started propagating changes at 21:19:13.65 on 20 Sep 2013
[BGN] Copying document1.pdf from /home/alice/sync_folder to //remote_host//home/alice/sync_folder
[BGN] Copying my.jpg from //remote_host//home/alice/sync_folder to /home/alice/sync_folder
[END] Copying my.jpg
[END] Copying document1.pdf
UNISON 2.40.63 finished propagating changes at 21:19:13.68 on 20 Sep 2013
Saving synchronizer state
Synchronization complete at 21:19:13 (2 items transferred, 0 skipped, 0 failed)
$ crontab -e
*/15 * * * * /usr/bin/unison sync
$ sudo apt-get install inotify-tools
$ vim watch.sh
#!/bin/bash
while true; do inotifywait -e create -e moved_to -r 監測目錄 && /usr/bin/unison sync; done
$ chmod a+x watch.sh
$ ./watch.sh &
$ ps aux | grep watch.sh
ubuntu 29247 0.0 0.2 11028 1384 pts/0 S 10:13 0:00 /bin/bash ./watch.sh
$ kill 29247
$ ps aux | grep inotifywait
ubuntu 29466 0.0 0.1 6596 704 pts/0 S 10:15 0:00 inotifywait -e crea…
$ kill 29466
]]>(function(){
var app = angular.module('store', [ ]);
app.controller('StoreController', function(){....});
app.directive('productTitle', function(){...});
app.directive('productGallery', function(){...});
app.directive('productPanels', function(){...});
....
})();
(function(){
var app = angular.module('store-products', [ ]);
app.directive('productTitle', function(){...});
app.directive('productGallery', function(){...});
app.directive('productPanels', function(){...});
})();
var app = angular.module('store', [ ]);
變為
var app = angular.module('store', ['store-products']);
<!DOCTYPE html>
<html ng-app="store">
<head> . . . </head>
<body ng-controller="StoreController as store">
. . .
<script src="angular.js"></script>
<script src="app.js"></script>
<script src="products.js"></script>
</body>
</html>
(function(){
var app = angular.module('store', ['store-products']);
app.controller('StoreController', function(){
this.products = [
{name: '...', price: 1.99, ...},
{name: '...', price: 1.99, ...},
{name: '...', price: 1.99, ...},
....
];
. . .
});
})();
(function(){
var app = angular.module('store', ['store-products']);
app.controller('StoreController', ['$http', function($http)]{
//this.products = ???;
var store = this;
store.products = []; //initizalize to an empty array
$http.get('/products.json').success(function(data){
//??? = data;
store.products = data;
});
});
})();
<ul class="list-group">
<li class="list-group-item" ng-repeat="product in store.products">
<h3>
{{product.name}}
<em class="pull-right">{{product.price | currency}}</em>
</h3>
<section ng-controller="PanelController as panel">
.....
抽出中間兩段到 product-title.html 裡,在 h3 的 tag 中加入 ng-include="'product-title.html'",注意在雙引號中間引用 html 頁面時需要再加上單引號
<ul class="list-group">
<li class="list-group-item" ng-repeat="product in store.products">
<h3 ng-include="'product-title.html'">
</h3>
<section ng-controller="PanelController as panel">
.....
真正在頁面產生出來的文件會包含 angulajs 的一些語法跟 css style
<h3 ng-include="'product-title.html'" class="ng-scope">
<span class="ng-scope ng-binding">Awesome Multi-touch Keyboard</span>
<em class="pull-right ng-scope ng-binding">$250.00</em>
</h3>
來取代 ng-include
<h3 ng-include="'product-title.html'"></h3>
變成
<product-title></product-title>
由此可以知道,若是前端頁面區分的比較詳細後,HTML 裡的 Tag 都用 AngularJS Directive 的方式來撰寫,可以將頁面簡化為可讀性高的頁面,如下所示
<aside class="col-sm-3">
<book-cover></book-cover>
<h4><book-rating></book-rating></h4>
</aside>
<div class="col-sm-9">
<h3><book-title></book-title></h3>
<book-authors></book-authors>
<book-review-text></book-review-text>
<book-genres></book-genres>
</div>
建立客製化 Directives 的方式,在 JavaScript 裡使用 app.directive('名稱', function(){...});
而這邊的名稱需要注意,寫在 HTML 裡面的名詞中間採用 - 連接時,在 js 中需要以駝峰式的方法命名
<product-title></product-title>
對應成
app.directive('productTitle', function(){
return {
restrict: 'E', // E for Element (another way, 'A' for Attribute)
templateUrl: 'product-title.html' // template 的 url
};
});
上面介紹得為 Element Directives的方法,另一種 Attribute Directives 的方式,是將 Directives 寫在 HTML Tag 中的屬性
e.g.
<h3 product-title></h3>
app.directive('productTitle', function(){
return {
restrict: 'A',
templateUrl: 'product-title.html'
};
};
兩種寫法最後都會產生相同的 HTML 結構
<h3>
{{product.name}}
<em class="pull-right">${{product.price}}</em>
</h3>
範例:
<section ng-controller="PanelController as panel">
<ul class="nav nav-pills"> ... </ul>
<div class="panel" ng-show="panels.isSelected(1)"> ... </div>
<div class="panel" ng-show="panels.isSelected(2)"> ... </div>
<div class="panel" ng-show="panels.isSelected(3)"> ... </div>
</section>
將 section 裡的內容抽出,命名為product-panels,這時會變成
<product-panels ng-controller="PanelController as panel">
. . .
</product-panels>
與 JavaScript 內容
app.directives('productPanels', function(){
return {
restrict: 'E',
templateUrl: 'product-panels.html'
}
});
這時候需要來處理 Controller 的部分,首先將 JS 中的 Controller,搬到 app.directives 裡,然後再給一個別名
而原本 HTML 語法可以再精簡到沒有 ng-controller 在裡面
<product-panels>]]>
. . .
</product-panels>
app.directives('productPanels', function(){
return {
restrict: 'E',
templateUrl: 'product-panels.html'
contorller: function(){ // Controller搬進來
. . .
},
controllerAs: 'panels' // 給別名
}
});
<li><a href ng-click="tab = 1">Description</a></li>
<div class="panel" ng-show="tab === 1">
<h4>Description</h4>
<p>{{product.description}}</p>
</div>
ng-init="tab = 1"
<li ng-class="{ active:tab === 1 }">
<a href ng-click="tab = 1">Description</a>
</li>
改寫成 Controller 來控制 Panel
JS Bin
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
ng-app 宣告這個 DOM 都是讓 AngularJS 來管控
常見寫法…指定 module名稱…對應 var app = angular.module('store', [ ]);
使用兩個大括號來 print value {{ }}
ng-controller="StoreController as store" (使用StoreController且命名別名為 store 使用)
{{ store.product.name}}
app.controller('StoreController', function(){
this.product = {
name: 'John',
age: 33,
gender: male
};
});
ng-controller 使用範圍僅限於所包含的 DOM 元素
Tag 中加入 ng-show=“store.product.canPurchase" 其中 canPurchase 為布林植,當 canPurchase = true 時則顯示,若 canPurchase = false 時則不顯示
而 ng-hide 的使用方式與 no-show 類似,只是當判斷的布林值 true 時隱藏,flase 時顯示
app.controller('StoreController', function(){
this.products = [
{
name: 'John',
age: 33,
gender: male
},
{
name: 'Mary',
age: 28,
gender: female
}
];
});
在 HTML 中用陣列取值 {{ store.products[0].name }}
ng-repeat
在需要以回圈顯示資料的地方(ex. DOM, Tag…) 加上 ng-repeat="product in store.products",使用方式類似javascript 的迴圈 for(var key in Array) 用法
ng-app - attach the Application Module to the page
<html ng-app="store">
ng-controller - attach a Controller function to the page
<body ng-controller="StoreController as store">
no-show / mg-hide - display a section based on an Expression
<h1 ng-show="name"> Hello, {{name}}!</h1>
ng-repeat - repeat a section for each item in an Array
<ul>
<li ng-repeat="product in store.products">{{product.name}}</li>
</ul>
{{ data | filter:options }}]]>
11/19(二)
住院的第二天,從凌晨就一直反反覆覆的被傷口痛醒,然後又再度伴隨著另一床阿北的哀呼聲or打鼾聲再度入睡,到了六點出頭,就隱約聽到有點殺氣騰騰的聲音往我這床過來了,沒想到才一早6點8分左右,主治醫生就已經來巡房檢視病情了,心想這醫生雖然對待我這病人態度很冷淡,可是網路上對於他在這門外科上評價還不錯,並且對於肛門瘻管這手術所開的傷口也比較小,手術過程也快!
主治醫生一來就說,趕緊把褲頭鬆開,翻側身!接著就是褲子被拉下,塞在屁股的棒球紗布被撕下,然後醫生對著菊花翻翻看看說,傷口復原的還不錯,可以開始坐浴了,說完就準備走人了,臨走前還不忘問說:有沒有需要開診斷證明?要幾份?我想到要申請保險理賠,趕緊趁醫生還沒離開病房回答他,這醫師早上巡房的時間實在有夠早的,而且來去一陣風,揮揮衣袖,僅帶走一坨紗布....XD。
既然都醒了,紗布也被拆了,那就來坐浴吧!昨天準備要住院前,醫院不管你要不要,就直接拿一個坐浴盆給你,當然健保有負擔,但是個人也需要負擔,只是後來發現我還是不喜歡用這配給的坐浴盆。不過在病房連個臉盆都沒帶,也只好將就著用這來坐浴,不過病房廁所的熱水很不給力,感覺水溫一直沒有達到40度,可是手冊上寫說坐浴的溫度盡量保持在41~46度左右,而醫院的熱水卻...囧。
坐浴後,進來一個護理師說:到了九點半要去櫃台領去病歷,然後在帶著藥膏、紗布等道具去塗藥,可是現在才剛要七點,那這段時間我的傷口怎麼辦,放著讓他透透氣嗎?似乎也只能這樣,而早餐還沒來,只好在爬回床上躺著等早餐來,等到七點半就響起早餐送來的廣播,忍著屁股的疼痛,慢慢的走去領難吃的高纖早餐回來。
醫院的配餐都是經過配膳人員根據不同病人的營養需求來製作而成,但是我想說的是,為什麼連基本的鹽巴都捨不得放,什麼東西吃起來都沒味道,昨天晚上的紫菜蛋花湯,根本就是紫菜"淡水"湯,似乎在喝開水又有點油油的混著一些蛋花紫菜渣,而早餐的菠菜也是沒味道,大概就洋蔥末碎肉有點洋蔥味,以及另一個充滿了薑味的豆類製品,但是病人就還是該乖乖認命的吃這些食物,尤其我目前需要高纖的膳食來幫助排便。
早餐吃了一半,有點便意就跑去廁所等待,不過在傷口疼痛的情況下,真的很難順利排便,最後就放了幾個屁,接著在清洗坐浴一次。之後老媽也出現了,順便把那難吃的早餐解決掉,吃完還不忘說:怎麼早餐也這麼難吃,因為他昨天晚上也品嚐過晚餐,得到的評價是,新光醫院的伙食樂勝,而她之前住的榮總跟我這次住的馬偕都不好吃,而且還不便宜。
後來九點半乖乖的去領病歷準備去擦藥,沒想到這次擦藥又得擺出另一個害羞的姿勢,好在這些護理師應該也都見慣這些場面了,一邊清洗傷口,一邊告知傷口位置以及自己塗藥的方式,接著就回到病房等出院了,看來我這手術應該可以今天就出院,等到了10點半,老媽一馬當先衝去櫃台要辦理出院,好在手腳夠俐落,因為後來看到等著要辦理出院的人,已經排了一串,看來今天真是個出院的好日子。
後來看了下收據,第一次感受到繳了那多年的全民健保總算有它的價值了,除了伙食費$125、診斷證明書$150以及大部分的材料費$370(坐浴盆、藥膏、紗布、膠帶等)外,全部的醫療費用$16047,我只需要負擔1/10的金額$1605就好,所以這次的手術與住院所花費的費用才$2250,之後就後看後保險能夠理賠多少了,唉~保險這東西阿!常常繳得很無奈,但是又不想真的去領那理賠金,不過真的遇上了,還是得努力爭取自己的權益,後來聽我爸說,遇過有業務員拿了理賠金,自己拿去花掉,以為神不知鬼不覺,後來還是被抓包的!真是有夠沒良心。
到了晚上,感謝政宏夫妻倆來探病,還買了一堆水果來,最近家裡的水果超多,因為除了我這病號,還有另一位孕婦目前還在醫院安胎中,預計安胎到下週三,嬰兒滿三十六週,真的想出來就讓他出來吧!另外也要很感謝這段時間照顧我的家人,不論是爸爸或媽媽,除了要照顧孕婦,還趕上了我這病號需要照顧,不過目前也出院能夠在家修養,比較沒什麼問題了。
另外也要感謝同事的體諒,這段時間常常請病假,這周也整週都請假了,希望公司這周要報名的金驗獎可以順利完成,今天下午本來要去上的課程也沒辦法去了,最近還是安分守己的當個宅宅,沒事別亂跑,雖然傷口沒那麼快恢復,我想下週應該可以正常進公司工作了。
]]>