一些覺得不錯的投影片、教學和工具。
寫給大家的 Git 教學 by 小 B
Git Tutorial by ihower
Github 推出了互動教學 tryGit,可以邊看說明邊操作。
http://try.github.com
軟體開發、伺服器和生活瑣事
一些覺得不錯的投影片、教學和工具。
寫給大家的 Git 教學 by 小 B
Git Tutorial by ihower
Github 推出了互動教學 tryGit,可以邊看說明邊操作。
http://try.github.com
因為連續幾次 FreeBSD 上的系統時鐘停擺,連續幾次 date 秒數都不會變,機器上不少服務都爛掉,核心重編後問題還是會發生。
後來在 FreeBSD 論壇上一討論串上看到不少人有遇到相同問題,原因是 VMware 上的一個 bug 導致 timecounter HPET 發生錯誤:
ESX 已經有釋出 patch。我用的是 workstation,似乎是還沒有發佈更新。
暫時換一下 timecounter 看看問題會不會發生。
先看看系統上有哪些 timecounter 可以使用:
~$ dmesg | grep counter
Timecounter "i8254" frequency 1193182 Hz quality 0
Timecounter "HPET" frequency 14318180 Hz quality 900
Timecounter "ACPI-safe" frequency 3579545 Hz quality 850
Timecounters tick every 10.000 msec
sysctl 檢查目前 timecounter:
$ sysctl kern.timecounter.hardware
kern.timecounter.hardware: HPET
換成 ACPI-safe:
$ sysctl kern.timecounter.hardware=ACPI-safe
kern.timecounter.hardware: HPET -> ACPI-safe
開機自動設定,開啟 /etc/sysctl.conf 並加入:
kern.timecounter.hardware=ACPI-safe
之前提到用 jQuery 的 clone() 複製一列表格,再用 text() 修改該列的文字內容,但這個方法會經過多次 DOM 處理,效率不高。
經過阿育推薦後,發現 jQuery.tmpl() 樣板引擎還不賴,用起來不難且程式碼看起來會乾淨很多。
先定義表格一列的樣板:
<table id="target-table"> </table>
<script type="text/x-jquery-tmpl" id="row-template">
<tr>
<td>${name}</td>
<td>${comment}</td>
</tr>
</script>
在樣板中文字內容的位置使用 ${VARIABLE} 取代,tmpl() 會解析樣板內容並將資料填入。
接著透過 tmpl() 處理新增一列至表格最後方:
var data = {
name: 'zeroplex',
comment: 'some text'
};
$.tmpl( $('#row-template').html(), data)
.insertAfter('#target-table > tbody > tr:last');
tmpl() 會自動將第二個傳入的參數對應到樣板變數,data.name 會被帶入 ${name}、data..comment 被帶入 ${comment},最後將處理完畢的資料放入原始頁面中。
無意間發現透過 printf 輸出資料時,程式會將資料放在 buffer 中,過一段時間後再一起印出。
int main(){
while(1){
printf(".");
sleep(1);
}
return 0;
}
可以透過 fflush() 強制將 buffer 中的資料輸出:
while(1){
printf(".");
fflush(stdout);
sleep(1);
}
學 javascript 沒多久,剛開始只是很簡單的置換文字、為元素加上類別,短短幾行沒什麼感覺。到了開始動態新增表格資料時,javascript 程式碼裡面參雜 HTML 就越看越噁心。
function addRow( data ){
$('#user-list > tbody ').append(
'<tr> ' +
'<td>' + id + '</td>' +
'<td>' + username + '</td>' +
'<td>' + email + '</td>' +
'</tr>'
);
}
這樣的寫法除了可讀性很低以外,之後若修改表格結構以及 CSS 樣式時,必須同時修改樣板以及 javascript 內容,不容易維護。
今天翻了翻 jQuery docs,發現幾個方法拿出來用可以把 HTML 和 javascript 切割的頗乾淨。
先定義一列當作表格樣板,可以在 CSS 將這一列隱藏:
<table border="1">
<tbody>
<tr id="template" style="display: none;">
<td class="id some-other-class"> </td>
<td class="username"> </td>
<td class="email"> </td>
</tr>
</tbody>
</table>
新增一列時,將 template 複製一份出來,再依照 class 名稱將資料填入不同欄位:
function addRow(){
$('tr:last').after( $('#template').clone().removeAttr('id') );
$('tr:last > td.id').text( id );
$('tr:last > td.username').text( username );
$('tr:last > td.email').text( email );
}