2018年1月25日 星期四

ThinkPad X1C 檢查 Windows 無故自動喚醒

X1C 一直有發現莫名的無故從睡眠自動醒來, 然後自己在背包中就這樣的自己把電源耗光到再進入強制休眠 or 直接斷電狀態

就在今晚突然我的藍芽喇叭發出 "連接成功" 的聲音!!!
疑~我明明沒有剛好操作我任何裝置連上藍芽喇叭阿~~ 才想到難道是 X1C 又自動開機了..
打開背包把 NB 拿出~ 背蓋上的燈號恆亮~ 果然! 已經是開機狀態

開始找原因....
紀錄如下
PS C:\WINDOWS\system32> powercfg /lastwake
喚醒記錄計數 - 1
喚醒記錄 [0]
  喚醒來源計數 - 1
  喚醒來源 [0]
    類型: 不明 (4)

PS C:\WINDOWS\system32> powercfg /devicequery wake_armed

Intel(R) Ethernet Connection (4) I219-V


PS C:\WINDOWS\system32> powercfg /waketimers

系統沒有使用中的喚醒計時器。
參考 http://xyz.cinc.biz/2016/03/auto-wake-up-pc.html 說明指令
查出了東西似乎還是無解

再從 Windows 紀錄 -> 系統 中仔細翻看看到了
Power-Troubleshooter
系統已從低電源狀態回復。

睡眠時間: ‎2018‎-‎01‎-‎24T15:52:27.597730000Z
喚醒時間: ‎2018‎-‎01‎-‎24T15:52:27.596731000Z

喚醒來源: S4 進入休眠
問題似乎有解了!? 關閉休眠 只好再觀察看看了

X1C 似乎沒有 S4 所以根本無法休眠
PS C:\Users\star> powercfg /availablesleepstates

此系統有以下幾種睡眠狀態:

    待命 (S3)
    休眠
    快速啟動

此系統缺乏以下幾種睡眠狀態:

    待命 (S1)
        系統韌體不支援此待命狀態。

    待命 (S2)
        系統韌體不支援此待命狀態。

    待命 (S0 低電源閒置)
        系統韌體不支援此待命狀態。

    混合式睡眠
        Hypervisor 不支援此待命狀態。
檢查解決電腦在睡眠/休眠狀態下無故緩醒的狀況

列出目前電腦中的計畫任務? (會導致自動喚醒)
PS C:\Users\star> powercfg -waketimers
[PROCESS] \Device\HarddiskVolume2\Windows\SystemApps\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\StartMenuExperienceHost.exe 設定的計時器在 上午 12:00:00 的 倀ᕎ 到期。

C:\Users\star> Get-ScheduledTask | where {$_.settings.waketorun}

TaskPath                                       TaskName                          State
--------                                       --------                          -----
\Microsoft\Windows\.NET Framework\             .NET Framework NGEN v4.0.30319 6… Disabled
\Microsoft\Windows\.NET Framework\             .NET Framework NGEN v4.0.30319 C… Disabled
\Microsoft\Windows\InstallService\             WakeUpAndContinueUpdates          Disabled
\Microsoft\Windows\InstallService\             WakeUpAndScanForUpdates           Disabled
\Microsoft\Windows\SharedPC\                   Account Cleanup                   Disabled
\Microsoft\Windows\UpdateAssistant\            UpdateAssistantWakeupRun          Disabled
\Microsoft\Windows\UpdateOrchestrator\         AC Power Download                 Ready
\Microsoft\Windows\UpdateOrchestrator\         Reboot                            Ready
\Microsoft\Windows\UpdateOrchestrator\         Reboot_AC                         Disabled
State 下有哪些軟體、服務是 Running 和 Ready 的狀態。

2017年8月19日 星期六

FreeBSD 上安裝 golang & websocket 使用 Let’s Encrypt

FreeBSD 中文教學相對現在很冷門...正體中文幾乎已經沒有人在寫新文件資料了...
golang 請直接上 golang 官網找最新版本對應改一下喔!!
用套件管理工具 pkg 安裝的很可能不是最新版所以直接上官網抓會比較好...

wget https://storage.googleapis.com/golang/go1.8.3.freebsd-amd64.tar.gz
tar zxvf go1.8.3.freebsd-amd64.tar.gz
sudo mv go /usr/local/
mkdir gowork
vi .cshrc
ADD
setenv  GOROOT  /usr/local/go
setenv  GOPATH  $HOME/gowork
set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin $HOME/bin $GOROOT/bin)
source .cshrc

go

已經可以用了!!

golang 在各平台上幾乎都能簡易的解壓縮設定環境變數後就可以用了... 同一套 source code 搬過去直接 go build .... 就可以編出一個可執行檔... 某些應用上是蠻好用的


抓取安裝 websocket 程式庫
go get github.com/gorilla/websocket
cd `go list -f '{{.Dir}}' github.com/gorilla/websocket/examples/command`

command 光用這個範例就可以延伸想像做許多有趣 or 邪惡應用... XDD

但為了方便測試會用 echo 這 server client 的範例 code
cd `go list -f '{{.Dir}}' github.com/gorilla/websocket/examples/command` && cd ../echo

但現在應用上會碰到的問題就是 https 下跨接 ws 由 SSL 加密模式接 未加密的任何東西時瀏覽器會擋...當然可以設 header by pass 的規則但還是不完整的做法
所以必須要能使用 wss 也是相同加密模式的 websocket

由G大神找到 wss 也就是加密傳輸的 websocket 範例中都沒有完整的寫到 直接可以 run 起來的問題點
rootPEM
拼湊了幾個後得到

server_wss.go
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build ignore

package main

import (
 "flag"
 "html/template"
 "log"
 "net/http"

 "github.com/gorilla/websocket"
)

var addr = flag.String("addr", "localhost:8080", "http service address")

var upgrader = websocket.Upgrader{} // use default options

func echo(w http.ResponseWriter, r *http.Request) {
 c, err := upgrader.Upgrade(w, r, nil)
 if err != nil {
  log.Print("upgrade:", err)
  return
 }
 defer c.Close()
 for {
  mt, message, err := c.ReadMessage()
  if err != nil {
   log.Println("read:", err)
   break
  }
  log.Printf("recv: %s", message)
  err = c.WriteMessage(mt, message)
  if err != nil {
   log.Println("write:", err)
   break
  }
 }
}

func home(w http.ResponseWriter, r *http.Request) {
 homeTemplate.Execute(w, "wss://"+r.Host+"/echo")
}

func main() {
 flag.Parse()
 log.SetFlags(0)
 http.HandleFunc("/echo", echo)
 http.HandleFunc("/", home)
 //log.Fatal(http.ListenAndServe(*addr, nil))
 log.Fatal(http.ListenAndServeTLS(*addr, "cert.pem", "privkey.pem", nil))
}

var homeTemplate = template.Must(template.New("").Parse(`
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script>  
window.addEventListener("load", function(evt) {

    var output = document.getElementById("output");
    var input = document.getElementById("input");
    var ws;

    var print = function(message) {
        var d = document.createElement("div");
        d.innerHTML = message;
        output.appendChild(d);
    };

    document.getElementById("open").onclick = function(evt) {
        if (ws) {
            return false;
        }
        ws = new WebSocket("{{.}}");
        ws.onopen = function(evt) {
            print("OPEN");
        }
        ws.onclose = function(evt) {
            print("CLOSE");
            ws = null;
        }
        ws.onmessage = function(evt) {
            print("RESPONSE: " + evt.data);
        }
        ws.onerror = function(evt) {
            print("ERROR: " + evt.data);
        }
        return false;
    };

    document.getElementById("send").onclick = function(evt) {
        if (!ws) {
            return false;
        }
        print("SEND: " + input.value);
        ws.send(input.value);
        return false;
    };

    document.getElementById("close").onclick = function(evt) {
        if (!ws) {
            return false;
        }
        ws.close();
        return false;
    };

});
</script>
</head>
<body>
<table>
<tr><td valign="top" width="50%">
<p>Click "Open" to create a connection to the server, 
"Send" to send a message to the server and "Close" to close the connection. 
You can change the message and send multiple times.
<p>
<form>
<button id="open">Open</button>
<button id="close">Close</button>
<p><input id="input" type="text" value="Hello world!">
<button id="send">Send</button>
</form>
</td><td valign="top" width="50%">
<div id="output"></div>
</td></tr></table>
</body>
</html>
`))


client_wss.go
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build ignore

package main

import (
 "crypto/tls"
 "crypto/x509"
 "flag"
 "log"
 "net/url"
 "os"
 "os/signal"
 "time"
 "io/ioutil"

 "github.com/gorilla/websocket"
)

var addr = flag.String("addr", "localhost:8080", "http service address")

func main() {
 flag.Parse()
 log.SetFlags(0)

 interrupt := make(chan os.Signal, 1)
 signal.Notify(interrupt, os.Interrupt)

 u := url.URL{Scheme: "wss", Host: *addr, Path: "/echo"}
 log.Printf("connecting to %s", u.String())

 //c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
 rootPEM, err := ioutil.ReadFile("root.pem")
 if err != nil || rootPEM == nil {
  log.Fatal("dial:", err)
 }
 roots := x509.NewCertPool()
 ok := roots.AppendCertsFromPEM(rootPEM)
 if !ok {
  log.Fatal("failed to parse root certificate")
 }
 d := websocket.Dialer{TLSClientConfig: &tls.Config{RootCAs: roots}}
 c, _, err := d.Dial(u.String(), nil)
 if err != nil {
  log.Fatal("dial:", err)
 }
 defer c.Close()

 done := make(chan struct{})

 go func() {
  defer c.Close()
  defer close(done)
  for {
   _, message, err := c.ReadMessage()
   if err != nil {
    log.Println("read:", err)
    return
   }
   log.Printf("recv: %s", message)
  }
 }()

 ticker := time.NewTicker(time.Second)
 defer ticker.Stop()

 for {
  select {
  case t := <-ticker.C:
   err := c.WriteMessage(websocket.TextMessage, []byte(t.String()))
   if err != nil {
    log.Println("write:", err)
    return
   }
  case <-interrupt:
   log.Println("interrupt")
   // To cleanly close a connection, a client should send a close
   // frame and wait for the server to close the connection.
   err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
   if err != nil {
    log.Println("write close:", err)
    return
   }
   select {
   case <-done:
   case <-time.After(time.Second):
   }
   c.Close()
   return
  }
 }
}

server_wss 大概比較沒什麼問題 只需要記得改一下 localhost:8080 to 0.0.0.0:8080 這樣外部才連的到 or 只是區網內就改成你 Server 內部的虛擬 IP... 跟要使用的 Port
另外
log.Fatal(http.ListenAndServeTLS(*addr, "cert.pem", "privkey.pem", nil))
cert.pem 跟 privkey.pem 憑證的部分
我是直接

ln -s /etc/dehydrated/certs/cert.pem
ln -s /etc/dehydrated/certs/privkey.pem

此時 go run server_wss.go 需要 root 權限!! 否則憑證無法讀取
PS: 這就看你自己憑證路徑是什麼在哪嘍~ 我是用 dehydrated 來取得 Let’s Encrypt 憑證
其他還有相仿的官方的...路徑不盡相同嘍



client_wss 基本上同上 localhost:8080 記得改成你 Domain Name

主要會碰到的問題回到 rootPEM !!!
這到底要給什麼??

由於我是用 Let’s Encrypt
所以上 https://letsencrypt.org/certificates/ 找 Active
Let’s Encrypt Authority X3 (IdenTrust cross-signed)
將它存成 root.pem

至於用其他家產的憑證就必須自己去找看看對應的來試試看嘍

2017年7月3日 星期一

IE 雷!!! JavaScript Error SCRIPT1006

同事突然發現 IE 不能登入! 才將遺忘已久的 IE 打開來測試 F12 debug 模式中出現了

SCRIPT1006: 必須要有 ')'

 納悶的是我 CODE 有啊!! 明明有右括號...

function msg(vtext, vtype="warning", vlayout="topRight")
{

必須改

function msg(vtext, vtype, vlayout)
{
if (!vtype) vtype="warning";
if (!vlayout) vlayout="topRight";

好無言的雷 bug...


參考資料:
https://stackoverflow.com/questions/38429977/expected-js-error-in-ie-after-assigning-a-value-to-a-function-argument

2016年9月3日 星期六

cmder 命令提示字元 λ 改 $

1.3.0 版後 在 vendor\clink.lua 中

26 行
clink.prompt.value = string.gsub(new_value, "{lamb}", "λ")

clink.prompt.value = string.gsub(new_value, "{lamb}", "$")

這樣會發生殘留疊字的 bug 就消除了


參考:
http://www.jeffjade.com/2016/01/13/2016-01-13-windows-software-cmder/
https://www.v2ex.com/t/168951

2016年2月16日 星期二

HTTP Error 413 Request Entity Too Large

檔案上傳碰到了另一個雷

Q: HTTP Error 413
Request Entity Too Large

A:
除了 php.ini 內的
post_max_size = 8M
upload_max_filesize = 8M

外 nginx 內還有個有關的參數

在 "http{}" 內, 新增

client_max_body_size 8M;


2015年5月22日 星期五

ESXi 6.0 vSphere Client NTP service start failed, serviceSystem HostServiceSystem.Start failed

http://www.unix-power.net/vmware/esxi_ntp_55.html

ESXi 6.0 碰上跟這個一樣的問題 NTP 從 VMware vSphere Client 設定就是無法啟動噴 serviceSystem」 HostServiceSystem.Start 失敗...

ssh 進去手動改 /etc/ntp.conf 直接後面補 server xxx.xxxx.xxx.xxx
# vi /etc/ntp.conf
restrict 127.0.0.1
restrict default kod nomodify notrap
driftfile /etc/ntp.drift
server 59.124.196.85
server ntp.ntu.edu.tw
server time.stdtime.gov.tw


然後
# /etc/init.d/ntpd start
跑了!!!
再到 vSphere Client  按 啟動 就沒錯誤了


真是詭異的 bug

另外 ntp service 啟動後可以直接由 shell command 下 ntpq -p 觀察是否正常
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 59-124-196-85.H .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp.ntu.edu.tw  .INIT.          16 u    -   64    0    0.000    0.000   0.001
 118-163-81-61.H .INIT.          16 u    -   64    0    0.000    0.000   0.001

2015年3月27日 星期五

Red Hat CentOS -bash: whois: command not found


新裝的機器突然要用  whois 查一下自己的 Domain 才發現 !! 疑!!~ 怎麼沒內建 whois Orz!

# whois domain

-bash: whois: command not found

# yum -y install jwhois

相關資料:
http://blog.51osos.com/linux/centos-install-whois-command/

2014年5月19日 星期一

LG G2 D802 root 後有裝 recovery 用 OTA 更新會造成 TWRP bootloop 解法

又是在出國前搞這種飛機!!
睡醒看到手機有更新按下確定後!!! Orz!! 一直無限迴圈的跑進去 Team Win Recovery Project 呈現半磚狀態...

是的~ 你的 G2 尤其是國際板 不能插 mircoSD 卡! 一不小心就會變磚...
有 Recovery mode 大都還有救

首先 如果你 OS 已經是 Win8/8.1 會碰上 Driver 無法驅動的第一個障礙點
需進到 "進階啟動 7) 停用驅動程式強制簽章" 模式下把它驅動
再來就可以依照參考資料

adb shell
dd if=/dev/block/platform/msm_sdcc.1/by-name/fota of=/sdcard/fota-backup.img
dd if=/dev/zero of=/dev/block/platform/msm_sdcc.1/by-name/fota

這方式復原..


參考資料
http://forum.xda-developers.com/showthread.php?t=2451696


2014年3月21日 星期五

台灣崩壞的民主法治, 嚴重瀆職的立法院造就太陽花學運

標題為何這樣說呢!? 看到了參考資料 1 的內容後讓人這樣深深的覺得就是這樣

特別法 臺灣地區與大陸地區人民關係條例

只要這個特別法未修正之前 與 中國大陸所有協議 在法治上全都會有問題
而這法卻在 89 年 後就未再有修訂過

2014年3月6日 星期四

在 Nginx 使用 FreeBSD 的 kernel module httpready

FreeBSD 使用一個叫 accept_filter(9) 的機制能允許應用程式要求系統核心預先處理過連線。例如,accf_http(9) 接收過濾器會等到完整的HTTP request己經讀入緩衝區裡,accept(2)才會回傳值

listen 80 default accept_filter=httpready;

httpready 參數必須設定在有 default 的 listen 之上,而且必須在 default 之後,不然會回報設定錯誤。


2014年1月22日 星期三

小黑傳奇在時代的洪流 Lenovo 自以為是地認為是創新後正式走入殘念的歷史..

其實在 X240 確定後就已經走入殘念的歷史 但還是 補一下 blog .. 似乎有人還搞不懂 末代完整的 ThinkPad 是哪一台

X220 是末代 完整的 #ThinkPad
X230 半殘 鍵盤 從 七列經典 變 六列孤島式鍵帽
X240 全殘 鍵盤完整小紅點 三鍵消失了! 變平面觸控板上方的三個虛擬鍵

X240 這樣的改變已經徹底摧毀 所有死忠 ThinkPad  客戶群

另外補充據有使用過傳統 小紅點鍵盤的人表示現在 X230 小紅點被 島式鍵帽包圍後就變難用了!
目前 X220 已無新機!, 要從拍賣上找看看碰碰運氣
X230 台灣線上購物似乎還有些庫存! 美國官網也早已經停售

至於聽說 小紅點好用的人沒用過傳統 七列經典鍵盤的人 也不建議買 X240 來用! 因為已經不是以前大家所說好用的小紅點鍵盤了

2014年1月21日 星期二

IPv6 在台灣真的算很先進!? & HiNet IPv6 Gateway

這在 HiNet IPv6 Dual Stack 已經是正式服務 (但官方網站還是寫試用), 各級窗口仍不知道
側面詢問了一下 台中區 IPv6 派工裝設只有 1位... 大概 20幾戶有申裝, 都是因為 Youtube 才申請的
昨天來的派工人員給的 IP 資料居然沒寫 Gateway 是什麼 Orz! 害我還是沒辦法設定 打客服要他們派工在來一次
這次來了一位對 IPv6 完全不了的查修外包人員.. 還問我 我是有什麼設備需要用到嗎?! ....
很顯然的第一次接到這種派工!
打電話回去問轉到機房端 一開始也教說用 自動取得, 但我這條線我早測過並無 SLAAC Service 之類的!
再問手動設定要怎麼設... 機房端才問說你派工單上沒寫嗎?! 我也看了一下來查修的人員派工單
然後就看到 Gateway 2001:XXXX:XXXX:XXXX::FFFF (我心中 "" 的一聲! 那為什麼昨天給我的資料上沒 keyin 啊!!)
我設上去後就可以用了... 至於 #SLAAC 來的人完全不懂! 只好放他回去了 但他有留下 機房電話 跟 他上司電話給我
要上班了沒空問~ 明天在打機房問看看現在 IPv6 Dual Stack 是有無 SLAAC 的設置 難道固接制現在是 只有手動設定

現行 IPv6 的相關問題, 只有機房人員知道, 客服電話是沒用的他們也都不懂

2014年1月14日 星期二

申請個 IPv6 考倒營業窗口 & 企業客服

首先 http://www.ipv6.hinet.net/ HiNet IPv6 網站上資料尚未更新 下載表格尚未更新
現在 已無試用 直接申裝... 但還是用試用申請表格

當我換固接制時接到企業客服聯絡電話的時候就有順便問過 IPv6 我就說我有朋友現在就已經有申裝, 但當時他就跟我扯 說要中華電信員工, 我就在說他並不是中華電信員工, 又扯說會不會是當初她申請的時候剛好有員工不用的優惠碼給他用! Orz! 企客完全不知道 IPv6 已經開放成正式申裝服務

據說 IPv6 的網站上有更新過, 當初朋友申請的時候要自己把申請書寄到總公司的行銷科去申辦 (當時是申請試用戶), 而現在還是標示 申請試用 IPv6 但是是要到營業窗口申辦, 除 IPv6 TWIX Service 跟 GSN網路用戶 才是郵寄

IPv6 Dual Stack Service 直接到營業窗口申辦 (目前網站上的申請書第三頁的 中華電信HiNet IPV6試用作業要點 清楚寫道)


而我今天上班前順路先去了 文心營業窗口 的狀況如下

me: 直接問業務窗口 你知道 IPv6 申裝嗎?
窗口: 重複問什麼 IPv6 ??
me: 確定的回覆對 IPv6 試用申裝, 問看看你們有沒有人知道
窗口: 請稍等, 開始到處問人... 中間還回來跟我問 你是中華電信員工嗎? 還是接到誰通知 (他們連業務經理都還停留在 只有員工可以申辦的印象記憶)
me: 再次補述你們網站上有寫可以申請...  (窗口又開始到處問)
然後我拿出我網站上預先印好寫好的申請書給他看... 然後終於問到有一位申辦過的 資深姐姐, 直接給他內線找誰問
窗口: 內線直接回答說現在沒有試用直接申請就好
掛掉開始文件 keyin 作業!! 窗口又卡關了~ 表單送不出去(不知道怎麼填才能過), 再次撥電話
電話教學填表中...

終於~~申請完畢等候通知...
他們工務還要查申裝的地方是否可以裝 IPv6

顯然 IPv6 這個東西跟當年 ADSL 剛開放一般民眾可以申請一樣, 營業窗口客服 全都不知道
只有總公司才知道, 當年 ADSL 開放申請 中華電信總公司有發新聞稿

TWNIC 在堆動服務的時候可能還要盯一下下屬單位... 整個服務只有總公司才知道
網頁也都沒更新正確

2013年11月23日 星期六

昨晚跟早上換了五支T5燈座!

做一下紀錄五年壞了五支燈座, 比較常開關的客廳跟房間總共有 五支 T5 燈座~
順便拆了支好的燈座下來測試, 結果燈管全都沒壞!!!

現在是燈管比燈座耐用的時代嗎?!

有些已經壞了一陣子~ 只是一直沒買新的燈座來換
剛好廚房的一顆 23W白光省電 燈泡掛了~ 就一起買了新的
搜尋了一下才發現 威力盟 已經被 隆達電子 併購了!! 難怪現在 CCFL 燈泡跟燈管在零售市場拍賣都找不太到了

陰極管燈泡( CCFL ) 之前我的工作區的燈泡壞掉就換上 使用上我相當滿意! 以常開關的地方真的是比 省電燈泡耐用
照度上跟一般省電燈泡也有得拚
比 LED 燈泡亮 (整體擴散度)

拆了壞掉的燈座, 第一支奇蹟式的只是一條線掉了@@!? 放回去正常復活
其餘 4支有一支比較扯! 整個電阻已經燒焦成炭燒穿絕緣塑膠! 其餘部不管有無焦味! 眼睛觀看都無異樣 但就是不動



2013年9月29日 星期日

利用 ARM for Linux 的板子連接 RTL-SDR

for Raspberry Pi

簡單來說就是用 Raspberry Pi 做 SDR 伺服器

首先必須安裝必要工具跟 lib
cmake 跟 libusb-1.0-0-dev, 我用的版本已經有內建 git 若你使用的沒有也必須先安裝

sudo apt-get install cmake libusb-1.0-0-dev
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr/
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
sudo make install
sudo ldconfig

-DINSTALL_UDEV_RULES=ON
簡單來說有加這參數才能讓非 root user 可以直接執行掛載成 SDR Sever 否則就是得用 root 權限才能執行

啟動服務
rtl_tcp -a 0.0.0.0

for BeagleBone Black

opkg update
opkg install cmake
opkg install libusb-1.0-dev
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr/
mkdir build
cd build
cmake ../
make install

vi /etc/ld.so.conf
/usr/local/lib

ldconfig

基本上只要是 Linux base 的都可以以此列推裝上

2013年9月23日 星期一

fatal error: Python.h: No such file or directory

# python setup.py build
時出現

fatal error: Python.h: No such file or directory

Ubuntu 上的解法就是

sudo apt-get install python-dev


2013年2月18日 星期一

I/O 設備統計 (鍵盤&滑鼠)


聊到有多少滑鼠順便來做一下設備統計好了! 哈
軌跡球
羅技 金星; 無線; 好像是羅技軌跡球系列, 那顆球最大顆的, 拖手那塊 皮革漆全掉 (已拋光)
羅技 水星; 無線; 皮革漆全掉 (已拋光)
PCally QBall; x2; 有線; 夢幻逸品; 一隻公司現役 一隻已損壞 (殺肉機)
滑鼠 羅技 XXX; x2; 有線; 超過10年的 DB9 介面的老古董的人體工學鼠 一隻486時代的已經掛點 另一隻仍使用中~ 底下還是有顆球的那種目前不在身邊不知道型號 羅技 V400; 無線; 算外觀之一的防滑膠整個軟化變超黏後全部清除 (已脫皮)
微軟 4000 無線行動鼠; 無線; 軌輪有點不靈敏感..
羅技 MX518; 有線; 皮革漆全掉 現役 (已拋光)  羅技 G400; 有線; 新採購的~ 其實就是樓上二代款 現役
鍵盤滑鼠
羅技 EX100; 無線; ASUS Eee Box 附贈
Acer KG-0917; x2; 無線; 一組是 Acer Aspire Revo 3610 Atom ION 附贈 附贈這組接收器已壞
華碩 ASUS EK-C2; 無線; 多買的
IBM USB keyboard with UltraNav SK-8835 x2; 有線; 兩隻都有部分損壞, 一隻用超過 10年 S鍵 接觸不良, 一隻某牙醫報廢的一顆按鈕結構斷掉 (其實應該跟我那把似乎是同時期的團購買的)
ThinkPad USB Keyboard 55Y9003; 有線; 公司用現役
鍵盤
BTC-8120; x2; 有線; 骨董級 AT 5Pin 大頭介面, 左右可分離經典人體工學設計, 一把特定按鈕無效 一把雷擊打壞全掛 (我認為的最佳鍵盤) BTC 8110M; 有線; AT大5 pin 接頭, 經典人體工學設計, 按鈕配置基本上同比較新款但左右不可分離, 一樣左右邊都右方線鍵.. () BTC-8110W; 有線; 同上的新款鍵盤已是 PS/2 介面, 多了休眠跟電源紐 (部分按鈕已磨平凹陷外加 Enter 有點卡鍵)
BTC SK-6000; 有線; 人體工學設計, 這把其實已經開始 Cost Down 用料已經不像上述兩把經典好打耐用
KB 8666; 有線; 骨董級 AT 5Pin 大頭介面, 人體工學設計, OSSF 清出報廢品, 後面標籤文字都已經退色看不清楚是哪一牌~ 但手感跟上面 Cost Down 過得差不多
i-rocks KR-6260; 有線; 新採購P購多次換貨後留下的便宜品質還 ok 的 一般鍵盤
Topre Realforce 103U; 有線; 新採購現役主力, 無接點靜電容量式 手感極佳~但就是超貴一般配置鍵盤啊!! Acer KG-0917 跟 ASUS EK-C2 接收器可共用改頻率匹配

目前這樣有
15把鍵盤 10把良品
14隻滑鼠 12隻良品, 確定損壞不可用的有兩隻, 其餘部分有戰損仍可用


老家應該還有更早的 486時代的骨董

2012年12月13日 星期四

全國產業發展會議的真正衝突點, 這才是正確資訊


全國產業發展會議的真正衝突點

終於有清楚的知道這會議是幹嘛的了,
政府利用 環團 跟 學者 幫財團政策背書.. 但他們根本不同意! 所以抗議! 但因為媒體已經被 巨獸控制..
所以只有報導 爆發衝突 15K董事長.. 完全不說清楚講明白會影響 全台灣未來的政策

正確的資訊看來需要人民自己轉載 傳播...主流媒體已不能相信


抗議「血汗經濟」 產業會議閉幕爆衝突 完全同意這才是真正媒體該做的報導

再次的案例表示 媒體巨獸 的可怕... 真正該報導的沒報導出來.... 只有模糊焦點在 衝突 15K


2012年12月5日 星期三

Synology Only the 'root' and 'admin' users can login via ssh.

Synologyssh 真的是 只有 root 跟 admin 帳號限定!
看來是 Cross compiler 前 OpenSSH source 就被動手腳了...
想說已經過了這麼久了應該有解! 但所有解答搜出來嘗試結果全都槓龜..
任何修改 sshd_config 都是無效的..


看來要把內建的幹掉換自己的才能...

印象中在 DSM 3.x 之前是沒這樣限制的...

2012年12月3日 星期一

絕種的鍵盤 Layout (BTC-8120)

ZOWIE CELERITAS 紅軸

這種 layout 會打字錯@@! 又是把 \ | 按扭擺在 Shift 左邊的 Shift 縮小...

美版的 一字 Enter 把 \| 放 Enter 上面的我還能接受~





已經用了 十幾年的人體工學鍵盤~ 在用回 386/486 的 Layout 配置需要時間啊!
但下面這還是我最理想的的鍵盤 Layout 但找到的資料顯示~因為這把鍵盤的成本是 等於兩把鍵盤~
所以廠商決定停產!!
否則真的是一代的名鍵盤.... 有名到能找到有人詢問為什麼這把鍵盤不生產了!
BTC-8120


這種 Layout 絕版了!! 不然這種是我的最愛!!
Costdown 的結果就是, 好的鍵盤消失!! 只留下低成本的模具... 就是下面這種!!! 美版的 Layout