跳到主要內容

發表文章

Git Instroduction

關於版本控制 要把檔案恢復到編輯前的狀態,大家都是怎麼做的呢? 我在大學的時候做報告時, 最簡單的方法就是先複製編輯前的檔案, 使用這個方法時通常都會在檔案名稱或目錄名稱上添加編輯的日期 ,這就是所謂的本地端的版本控制 。但是,每次編輯檔案都要複製非常的麻煩,也很容易出錯。 上面的例子是我以前做報告時的命名方式,如果沒有察看詳細資料,就沒有辦法區別那一個檔案是最新的。此外,如果是共享的檔案要區分不同編輯者,要具體區分更改了什麼也不容易知道。 此外,如果有兩個人要對同檔案進行編輯,先進行編輯的人的修改內容會被覆蓋,導致資料流失,相信大家都有這樣的經歷。 為了解決這個問題,便有開發者產生了版本控制系統,早期大多都是採用簡單的資料庫來紀錄文件的歷次更新差異,這種版本控制又稱為本地端版本控制系统 ,其中最流行的叫 RCS ,現在的 Mac OS X 系统上安装了開發者工具後,也可以使用 rcs 命令。 它的工作原理是保存不同檔案的每一個版本, 透過比較不同的版本,可以計算出各個版本的文件内容中有那些差異 。 集中式版本控制系统 接下來有開發者遇到一个问题,如何讓在不同系统上的開發者協同作業? 於是,集中式版本控制系统(Centralized Version Control Systems,簡稱 CVCS)誕生了。 像是 CVS 、 Subversion 以及 Perforce 等,都有一個單一的集中管理的伺服器,保存所有文件的修訂版本,而偕同作業的開發者都透過客户端軟體連到這台伺服器,取出最新的文件或者提交更新,這已成為版本控制系统的標準做法。 相對於舊式的本地端VCS來說,集中式版本控制有許多優點,例如: 1. 每個人都可以在一定程度上看到項目中的其他人正在做些什麼 2. 管理員也可以輕鬆掌控每個開發者的權限 3. 並且管理一個CVCS要遠比在各個客戶端上維該端的資料庫來得輕鬆容易 然而,這種類型的系統仍有缺點: 1. 中央服務器的單點故障 。如果宕機一小時,那麼在這一小時內,誰都無法提交更新,也就無法協同工作。 2. 如果中心數據庫所在的磁盤發生損壞,又沒有做備份,毫無疑問你將遺失所有資料 - 包括項目的整個更變歷史...
最近的文章

軟技能 代碼之外的生存指南 讀後感

一、職業 1.職涯目標訂定: (1)思考自己希望從職業生涯中獲得什麼? (2) 希望自己 5 年或 10 年後在哪裡? (3)制定通往大目標的小目標(可按年/月/周/日分解),也可以反推如何從大目標到你現在的狀況。 (4)定期追蹤目標,並適時調整。 2.與他人交流時,最重要的概念是:每個人都希望自己很重要。多思考對他而言,什麼才是最重要的、什麼才是他需要的。 3.獎勵積極行為比懲罰消極行為有效得多。 4.當因為「該怎麼做事」與他人的意見有衝突時,你最好先確定彼此的分歧點是否值得你拼命維護,特別是在你知道它已捲入他人時。 5.如何讓自己承擔更多責任: (1)有一個不受重視的專案,你能去負責它嗎? (2)你能幫助團隊裡的新人快速成長嗎? (3)你能負責文件的製作流程,並保證及時更新這些文件嗎? (4)哪項工作是沒有人願意去做,你願意承擔起來,並將其簡化或自動化? 6.要強迫自己學習新東西,最好的方法是讓自己在其他人面前做展示。 二、自我營銷 1.自我營銷的關鍵在於:能為他人提供價值。 2.建立自我品牌的四大關鍵: (1)品牌所要傳達的訊息 (2)品牌的一致性 (3)品牌的視覺符號 (4)品牌的曝光率 3.打造成功部落格的秘訣: (1)持續寫文章,至少每周一篇。 (2)在與你類似性質的部落格中留言回覆有價值的內容,並與對方建立關係。 (3)將覺得自己寫得不錯的文章或富爭議性的文章分享到具高流量的網站。 (4)你提供的內容應該直接瞄準你所選定的研究領域,並為該領域帶來價值。 三、 學習 1.如何自我教育 (1) 如果我告訴你怎麼做你會忘掉,但是你如果自己動手做一次,你可能就記住了。 (2) 如果你將自己所學的東西交給別人,你不僅能記住,還能理解得更深刻 (3) 教育的首要目標,並不在於 " 知 " 而在於行 2.如何掌握技術 (1) 學會如何學習 (2) 訂定學科範圍 (3) 掌握基礎知識 3.自學關鍵點 (1) 學習 Learning (2) 實踐 Doing (3) 掌握 Learning (4) 教授 Teching ...

T470p 藍芽失效

今天在用 T470p 突然發現藍芽滑鼠會連不上去,我有嘗試手動把它關掉,但關掉後在裝置管理員遇到以下的訊息 我是不記得我有更新什麼驅動程式,於是我在網路上找。發現 黑大 也遇到了這個問題,但是 … 我的驅動程式明明就是寫我是去年年初以後就沒在更新啦,於是乎我手動更新了以下的兩個驅動程式 1. Intel 8265 Wireless Bluetooth Driver 2.  Intel Management Engine Firmware  https://pcsupport.lenovo.com/tw/zh/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t470p/20j7/downloads 灌完以後,重開機,問題就解決囉。

Get、Post比較

最近同事在問我說,你知道 Get 跟 Post 的區別是什麼嗎 ? 恩 … 其實我通常都只用 Post ,很少用 Get ,但是我相信到現在還是有很多的開發者對於這個基本的Http Module指令還是不知道要怎麼區別。我們可以用簡單的寄信來比喻。 假定信封的撰寫格式就是 HTTP。我們將信封外的內容稱為 http-header,信封內的書信稱為 message-body,那麼 HTTP Method 就是你要告訴郵差的寄信規則。 Get 就好比是明信片 ,你可以把要傳遞的資訊寫在信封(http-header)上,直接將要傳送的資料以 Query String(一種Key/Vaule的編碼方式)加在我們要寄送的地址(URL)後面,然後交給郵差傳送。 Post 就好比是信封內有裝信件的寄送方式 (信封有內容物),不但信封可以寫東西,信封內 (message-body) 還可以置入你想要寄送的資料或檔案,我們將寄送地址(URL)寫在信封上,另外將要傳送的資料寫在另一張信紙後,將信紙放到信封裡面,交給郵差傳送。 接著我來介紹一下實際的運作情況: 我們先來看看 GET 怎麼傳送資料的 ,我們透過下面的 Form 表單送出 Get ,結果如下: ( 你可以開啟 Chrome 或是 Firefox 的開發者工具來檢視結果,這裡使用 Firefox) 我們將要送出去的資訊(userId=1)放在url,也就是說這樣要送給server端的資訊透過url就可以輕易看出, 如果是傳送密碼,絕對不要使用Get 。 再來是 Post 一樣的,下面有一個簡單的 Post Form 表單 一樣的使用Firefox的開發者工具,查看送出的資訊 可以看到 Post 的 Url 沒有夾帶送出的資訊,我們切換到參數的 Tab 查看一下 看出個所以然了嗎?原來 POST 是將表單資料放在 message-body 進行傳送,在不偷看封包的情況下似乎安全些。此外在傳送檔案的時候會使用到 multi-part 編碼,將檔案與其他的表單欄位一併放在 message-body 中進行傳送。這就是 GET 與 POST 發送表單的...

Git Merge(合併分支)

在 學習 使用 Git 作為版控時,常回遇到不同分支版本分歧的問題,而 git 的 merge 和 git rebase 提供了不同分支合併時的方法,這兩個選項都有 其 優缺點,在下文中,我們 先 討論如何使用 git merge 來處理分支合併的問題。 讓我們來看一個你在實際工作中,有可能會用到的merge工作流程的簡單範例, 你做了以下動作: 你與其他 member 共同 開發一個網站。 你建立一個分支 (Feature) 以實現一個新 的 user story 。 其他的 member 原本的分支 (master) 分支上進行開發。

AngularJS TodoList

再來的第二個教學就是很多人熟知的Todo List,因為Todo List 包含了CRUD這幾個主要功能 • 讀取:   列出todos所有項目、查看總筆數與Todo 項目、搜尋某筆項目 • 新增:新增一個todo項目。 • 修改:修改特定todo項目。 • 刪除:刪除特定項目、刪除已完成的todo項目。 資料結構 將todo list存在陣列中,每個todo項目有欄位text、done • text:內文。 • done:是否完成。 印出所有項目 在<li>元素上加入了AngularJS的迭代器ng-repeat,然後用"todo in todos"的語法,從todos這個陣列清單中,取出一個個的物件,指派給todo ,然後在span裡列印出item.text 並且當點選的時候,可以將該項目加上刪除線。 html <li ng-repeat="todo in todos > <input type="checkbox" ng-model="todo.done" /> <span class="done-{{todo.done}}" ng-dblclick="edit(todo)">{{todo.text}}</span> </li> css .done-true{ text-decoration: line-through; color:grey } Ng-repeat 官方說明 除此之外,使用了function getTotalTodos 計算每次新增刪除後的todo總數 html <h2>Total todos: {{getTotalTodos()}}</h2> js $scope.getTotalTodos = function () { return $scope.todos.length; }; 搜尋 在搜尋列中,我們利用 ng-model="searchInput" 綁定 <input>,然後將每個會被重複的todo item...

AngularJS HelloWorld

由於參與了維護的專案,使用的是早期 AngularJS 的版本,所以便開始複習官網提供的教學,因為 已經3年沒用了阿,所以等級完全變成了初學者,而官網提供這一個教學最主要在比較 jQuery 與 AngularJS Two-way bidning 的實作方式,教學影片如下 以下是教學中的程式碼 一、 jQuery 的 Two-Way Binding jQuery 最主要就用 keyup 的function去監聽 input 鍵入值時改變的狀態 二、 AngularJS 的 Two-Way Binding 而AngularJS則是使用ng-model Binding 去監聽目前該值改變的狀態 由上述的程式碼比較起來, AngularJS 要實作 Two Way Binding 是容易許多,並且當一個畫面有好幾個地方要做 Two Way Binding 的時候, jQuery 常會因為大量的命名變數而難以維護,這也是 AngularJS 最主要要強調的特色之一 官方網站在此  https://angularjs.org/ 裡面有些學習資源可以方便學習