lamp

philips 天秤座 立燈 PLL36206 $2290 保固一年 已經用了四年有了吧

燈管 philips PLL36W840 規格PL-L 36w 4P 緊密型燈管
燈管價格看到120元,最小110元。36瓦,效率80%,約2900流明。
拆開來看,它的原廠安定器是二線輸出的瞬亮式。
有點奇怪,它的安定器是直連插頭的,開關是接在安定器和燈管端之間。這樣會讓安定器的壽命比較長嗎?

燈管表定使用壽命10k小時,實際用8k小時還在使用中,燈絲已經有點開始黑了。

但電子安定器已經先壞了。先是茲茲聲,再來燈管也開始閃了。
找網拍pll36w用安定器160元。規格110v用,膠殼,無安規。四線輸出,但實測不像有是四線預熱式,應該也是瞬亮式的便宜貨。
看它可以撐多久吧。

同時有看到有人推薦 奇異 GE 愛迪生 銀河系T5雙臂檯燈 TF-3136 $3290 貴1k

使用t5 14w燈管 效率較高有1200流明 (看照片感覺很亮,但數據還不及PLL36206的一半
燈管表定使用壽命12k小時
優點應該是雙臂加上燈頭好像可以三向轉動比較好橋不刺眼的角度。

ubuntu16.04

使用universal usb installer制作usb開機碟

注意插入abit an-m2後要開後機看到usb磁碟,然後把usb-hdd的開機順序移到最前面。
Advanced BIOS Features > Hard Disk Boot priority > 選USB-HDD?
若看不到就試著重開機讓機器能抓到USB-HDD。也可能是USB碟沒建好,機器認不出來。

script

1
2
3
4
5
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install htop iftop iotop
sudo apt-get install unzip p7zip p7zip-full p7zip-rar rar unrar
sudo apt-get install openssh-server openssh-client

apt-get update 或 apt-get upgrade 時會去找cdrom…

nano /etc/apt/sources.list #移除cdrom部份

hostname

nano /etc/hostname #內容改為自己要的名字
nano /etc/hosts #這邊最好也要改,免得有些 service 會出錯
/etc/init.d/hostname.sh #重新啟動
hostname #驗證是否已經修改完畢。

Software & Updates>Additional Drivers

預設的driver怪怪的,畫面lag;有時會黑畫面。abit an-m2(C68 GeForce7025/nForce 630a)選一下nvidia的driver後就比較順了。

ctrl-alt-f1~f6可以切換到console的tty1~6。xwindow使用tty7。

ssh

這一版的ssh比較嚴格 ,使用pietty去連會得到 Couldn’t agree a client-to-server cipher 的error。
使用較新版0.6以上的putty就ok。

在abit an-m2上xwindow還是跟14.04一樣有跑久當掉連累整個網路停止的問題

stop/start xwindow

1
2
sudo service lightdm stop
sudo service lightdm start

memory info

1
2
3
4
cat /proc/meminfo
grep MemTotal /proc/meminfo
free -m
vmstat

memory test

sudo apt-get install memtester
sudo memtester 1024 5 #allocate 1024MB of memory, and repeat the test 5 times.

vi的方向鍵失常問題

~/.vimrc內容加入
set nocompatible
set backspace=2

ftp

1
2
3
4
5
sudo apt-get install vsftpd
sudo vi /etc/vsftpd.conf
write_enable=YES #防寫要uncomment掉
sudo service vsftpd restart
sudo service vsftpd status

other

gnome-session-fallback不管用了。據說july會有能支援的gnome desktop出來。let’s see

harddisk smart information

1
2
3
4
sudo apt-get install smartmontools
sudo smartctl -a /dev/sda #print all info
sudo smartctl -i /dev/sda #print info
sudo smartctl -H /dev/sda #check health

hardware information

1
2
3
lshw|less
dmidecode|less
dmidecode | grep -A4 '^Base Board Information'

upload file in command line with scp

scp 052b1cebf73e0b31c502341e0e3cc916a3da2a25.png leon:asdfasdfiloveada@10.0.0.102:~

ftp upload in command line with curl

curl -T localfile -u name:passwd ftp://upload_site:port/path/

History Size

vi ~/.bashrc #HISTSIZE ,HISTFILESIZE

enable ssh

sudo apt-get install ssh
sudo apt-get install openssh-server
sudo service ssh status
sudo service ssh restart

adjust timezone

date
sudo vi /etc/default/rcS
UTC=no
sudo tzselect
sudo cp /usr/share/zoneinfo/Aisa/Taipei /etc/localtime
sudo vi /etc/timezone
Asia/Taipei

ntp

sudo apt-get isntall ntpdate
sudo ntpdate time.stdtime.gov.tw
sudo hwclock -w
date
sudo crontab -e
@daily /usr/sbin/ntpdate -u time.stdtime.gov.tw > /dev/null

sudo apt-get install ntp
service ntp status

vi /etc/ntp.conf
server tock.stdtime.gov.tw prefer
server tick.stdtime.gov.tw
server time.stdtime.gov.tw
restrict tock.stdtime.gov.tw
restrict tick.stdtime.gov.tw
restrict time.stdtime.gov.tw

service ntp restart

sudo apt-get install ntpstat
ntpstat
synchronised to NTP server (211.22.103.157) at stratum 3
time correct to within 104 ms
polling server every 64 s

food

糖醋
椒麻
三杯
宮保
魚香
京醬
照燒
塔香
橙汁

花鵰
燒酒

蒜泥
醬爆
打拋
蔥爆
酸菜
黑胡椒
辣子
橙醋
酸辣
桔醬
沙茶
紅燒
蔥油
紹子
豆豉
金沙
蜜汁
咖哩
鹽水
酥炸
鐵板
蒲燒
香烤
香酥
脆皮
咔啦
乾煎
乾燒
清蒸
醋溜
麻婆
蝦皮
薑絲
醬滷
滑蛋
椒鹽
紹興
孜然
花雕
香菇
茄汁
蠔油
紅糟
蕃茄
芝麻
薑汁
紅油
腐乳
蝦醬
紅醬
綠醬
白醬
菜脯
烏龍
梅菜
檸香
迷迭香烤
啤酒
紅酒
皮蛋
椰香
怪味
味噌
雪菜
泡菜
蝦仁
蟹肉
蔭豉
蒜蓉
銀芽炒
鳳梨
黃酒
可樂
涼拌
梅漬
葱油
五香
洋蔥
韭香
香椿

brownie
chocolate butter walnut
重起司cheese cake
king cake
西班牙海鮮飯 spanish seafood risotto
香菇雞
烤pizza
toast
椒麻
烤小羊排
沙茶羊肉/牛肉/空心菜
宮保雞丁
歐式免揉麵包

魯肉
紅酒燉牛肉 beef stew with red wine

windows batch

批次檔中迴圈的錯誤偵測及跳出

1
2
3
4
5
setlocal enabledelayedexpansion
for %%f in (C:\Windows\*) do (
runsomeapplication.exe /with "parameters"
if !errorlevel! neq 0 exit /b !errorlevel!
)

改檔名串接日期時間格式

1
2
3
4
5
6
7
echo %date%
echo %date:~0,4%%date:~5,2%%date:~8,2%
echo %time%
echo %time:~0,5%
echo %time:~0,2%%time:~2,2%
echo %time:~0,2%%time:~3,2%
ren snapshot.csv snapshot.%date:~0,4%%date:~5,2%%date:~8,2%.csv

cassandra on ubuntu

cssandra 3.4 on ubuntu 14.04 with oracle java8

install oracle java8 virtual machine

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-set-default
java -version

install cassandra 34x

echo “deb http://www.apache.org/dist/cassandra/debian 34x main” | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
echo “deb-src http://www.apache.org/dist/cassandra/debian 34x main” | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list

add 3 public keys from the Apache Software Foundation associated withe the package repositories

gpg —keyserver pgp.mit.edu —recv-keys F758CE318D77295D
gpg —export —armor F758CE318D77295D | sudo apt-key add -

gpg —keyserver pgp.mit.edu —recv-keys 2B5C1B00
gpg —export —armor 2B5C1B00 | sudo apt-key add -

gpg —keyserver pgp.mit.edu —recv-keys 0353B12C
gpg —export —armor 0353B12C | sudo apt-key add -

update package database again

sudo apt-get update

install cassandra

sudo apt-get install cassandra

now cassandra is installed and running

sudo service cassandra status
nodetool status
nodetool info
cqlsh

tune jvm options

sudo vi /usr/bin/cassandra

adjust timezone of log

sudo vi /etc/cassandra/logback.xml
,Asia/Taipei

allow bulk insert via cqlsh

sudo vi /etc/cassandra/cassandra.yaml
batch_size_warn_threshold_in_kb: 5000
batch_size_fail_threshold_in_kb: 50000

allowing others connect cassandra

sudo vi /etc/cassandra/cassandra.yaml
listen_address
rpc_address:
broadcast_address:

- seeds: "127.0.0.1,<ip>"

where is the log

tail -f /var/log/cassandra/system.log

where is the data

/var/lib/cassandra

spark

download and install spark 1.6.1 with hadoop

spark-1.6.1-bin-hadoop2.6.tgz

run

%SPARK_HOME%\bin\spark-shell

error on windows7 x64

@see https://blogs.msdn.microsoft.com/arsen/2016/02/09/resolving-spark-1-6-0-java-lang-nullpointerexception-not-found-value-sqlcontext-error-when-running-spark-shell-on-windows-10-64-bit/
java.lang.RuntimeException: java.lang.NullPointerException
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522)
at org.apache.spark.sql.hive.client.ClientWrapper. (ClientWrapper.scala:171)

winutils.exe support

download link https://github.com/steveloughran/winutils/raw/master/hadoop-2.6.0/bin/winutils.exe to %HADOOP_HOME%\bin\winutils.exe
download link https://github.com/steveloughran/winutils/raw/master/hadoop-2.6.0/bin/hadoop.dll to %HADOOP_HOME%\bin\hadoop.dll

無法啟動此程序,因為計算機中丟失 MSVCR100.dll

delete c:\windows\system32\msvcr100.dll
delete c:\windows\system32\msvcr100_clr0400.dll
delete c:\windows\sysWOW64\msvcr100.dll
delete c:\windows\sysWOW64\msvcr100_clr0400.dll

應用程序無法正常啟動(0xc000007b)

windows7 x64要使用這個喔
https://www.microsoft.com/en-us/download/confirmation.aspx?id=14632
vcredist_x64.exe

https://www.microsoft.com/en-us/download/confirmation.aspx?id=5555
vcredist_x86.exe

check msvcr100.dll exists

dir c:\windows\system32\msvcr100.dll

java.lang.RuntimeException: java.lang.RuntimeException: Error while running command to get file permissions : ExitCodeException exitCode=-1073741701:

e:
cd\
cd spark-1.6.1-bin-hadoop2.6
set
set HADOOP_HOME=e:\hadoop
set tmp=e:\tmp
mkdir %tmp%
dir %tmp%
%HADOOP_HOME%\bin\winutils.exe ls \tmp\hive
%HADOOP_HOME%\bin\winutils.exe chmod 777 \tmp\hive
%HADOOP_HOME%\bin\winutils.exe chmod 777 \tmp
%HADOOP_HOME%\bin\winutils.exe ls \tmp\hive
bin\spark-shell

……
scala> sc.parallelize(1 to 1000).count()
……
res0: Long = 1000

scala> val textFile = sc.textFile(“README.md”)
……
scala> textFile.count() // Number of items in this RDD
res1: Long = 98

#

scala> val textFile5 = sc.textFile(“file:///e:/spark-1.6.1-bin-hadoop2.6/README.md”);textFile5.count
textFile5: org.apache.spark.rdd.RDD[String] = file:///e:/spark-1.6.1-bin-hadoop2.6/README.md MapPartitionsRDD[10] at textFile at :21
res5: Long = 95

on docker

docker run -i -t -h sandbox sequenceiq/spark:1.6.0 bash
#bash-4.1# spark-shell —master yarn-client —driver-memory 1g —executor-memory 1g —executor-cores 1
bash-4.1# spark-shell
……
scala> sc.parallelize(1 to 1000).count()
……
res0: Long = 1000

#這裡會產生找不到README.md。
scala> val textFile = sc.textFile(“README.md”)
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://sandbox:9000/user/root/README.md

指定使用localstorage上的README.md

scala> val textFile = sc.textFile(“file:///usr/local/spark/README.md”)
textFile: org.apache.spark.rdd.RDD[String] = file:///usr/local/spark/README.md MapPartitionsRDD[3] at textFile at :21
scala> textFile.count()
res1: Long = 98

把README.md放到hadoop上

bash-4.1# hadoop fs -put /usr/local/spark/README.md README.md
bash-4.1# spark-shell

scala> val textFile = sc.textFile(“README.md”)
textFile: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[1] at textFile at :21
scala> textFile.count()
res0: Long = 98

taskkill

有時eclipse跑久了,就出error的白色dialog自殺了。
但這時用它帶起的java process倒還是繼續在跑。
一個一個手動砍比較慢,可以用taskkill整組砍掉。

1
taskkill /f /im java*

git puttykeyfile 兩三事

在windows下使用git,通常是安裝tortoiseGit和msysGit。
前者提供了GUI介面透過自帶的putty以plink介面帶出pageant提供ssh授權。
後者提供了command line介面讓你能以下指令方式操作git。

產生ssh需要的private/public key有兩種方式。

  1. 使用puttygen產生private/public ppk檔案,使用時需要pageant工具作為authentication agent。
  2. 在command line下使用ssh-keygen產生~/ .ssh/id_rsa 和 ~/.ssh/id_rsa.pub。
    ssh-keygen產生的格式跟ppk不一樣,但可以透過puttygen載入再另存成ppk格式。

兩種方式設定git需要的ssl

一般而言使用puttygen產生的ppk檔配合pageant就能正常使用了。

  1. tortoiseGit: 只要使用GUI介面裡的 setting > Git > Remote - choose origin > Putty Key: 選擇要使用的 private ppk 檔。
    這時在.git/config裡[remote “origin”]區會增加一筆puttykeyfile = c:\git.privatekey.ppk記錄
    當然也能透過 git config —local remote.origin.puttykeyfile c:\git.privatekey.ppk 來加入。
    這筆記錄能在使用tortoiseGit做remote push/pull時,若”Autoload Putty Key”有被勾選,則透過plink自動帶出載入指定ppk的pageant。

    然而若你使用tortoiseGit時不勾選”Autoload Putty Key”,也不手動啟動pageant並載入適當的ppk。在對remote進行操作時就會發生error。

    類似的情況在command line裡下git指令對remote做push操作也一樣;必需先手動啟動pageant並載入適當的ppk。

  2. 使用 ssh-keygen會產生~/.ssh目錄,並在目錄內放ssh相關的資訊和產生的key。
    使用ssh-keygen產生private/public key pair供免密碼ssh安全登入很常見。
    如前面所提,~/.ssh/id_rsa是可以透過puttygen轉成ppk格式供putty/tortoiseGit使用的。

    特別的是若使用ssh-keygen的方式產生了~/.ssh裡的private/public key pair,接下來就可以不需要pageant這類的authentication agent了。
    此時直接使用tortoiseGit或command line下使用git指令,都會直接使用~/.ssh/id_rsa。
    就像在unix下使用ssh的方式,方便很多。

    值得一提的是,這時啟動pageant載入ppk還是有效果的。
    remote.origin.puttykeyfile c:\git.privatekey.ppk在使用tortoiseGit時勾選”Autoload Putty Key”自動帶出載入指定ppk的pageant時一樣有用。手動啟動pageant並載入適合的ppk也一樣有效。

用bat檔寫好script來啟動pageant帶上ppk檔,是比操作視窗加ppk檔方便得多的方式。

1
start /d "c:\Program Files\TortoiseGit\bin" pageant.exe c:\git.privatekey.ppk c:\git.privatekey.repo2.ppk

utf8mb4 in mysql

🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱🐱

在爬一些比較潮的網頁時難免會抓到emoji字元。
這在寫入mysql時會發生問題,因為mysql預設是使用utf8,必須改成utf8mb4才能避免寫入emoji時的錯誤。

1
java.sql.SQLException: Incorrect string value: '\xF0\x9F\x91\xBD\xF0\x9F…

mysql.ini

1
2
3
4
5
6
7
8
9
10
11
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

restart mysql後,沒意外可以看到相關的character-set都變成utf8mb4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> select version();
+------------+
| version() |
+------------+
| 5.6.19-log |
+------------+
1 row in set (0.00 sec)

mysql> show variables where variable_name like 'character%' or variable_name like 'collation%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.6\share\charsets\ |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+---------------------------------------------------------+
11 rows in set (0.00 sec)

database/table schema

舊的schema可以繼續保持CHARACTER SET=utf8,而針對需要寫入emoji的庫/表/欄alter成CHARACTER SET=utf8mb4。

1
2
3
ALTER DATABASE database_name CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

java JDBC connector

  1. 使用mysql提供的JDBC driver,要確保mysql connector的版本高於5.1.13才支援utf8mb4。
  2. 以往在jdbc.uri裡加入的characterEncoding=utf8,一定要去除※重要※