Lichee Pi Nano บอร์ดคอมพิวเตอร์จิ๋ว ขนาดเท่า SD card

บอร์ดคอมพิวเตอร์จิ๋วที่ชื่อเป็นผลไม้มาอีกบอร์ด คราวนี้เป็นลิ้นจี่ครับ ชื่อ Linchee Pi Nano ใช้ชิปประมวลผล Allwinner F1C100s ARM926EJ-S ซึ่งเป็นตระกูล ARM9 (ชุดคำสั่งรุ่น ARMv5) ความถี่สัญญาณนาฬิกา 900MHz มีแรมขนาด 32MB ในตัว

ตัวบอร์ดดูด้วยตาคร่าว ๆ แล้ว ใหญ่กว่า SD card เล็กน้อย มีช่องเสียบ micro SD card มีตัวถอดรหัสวิดีโอ H.264 / MPEG ได้ถึง 720p และหัวต่อจอ LCD มี USB-OTG มี 3 UART

ระบบปฏิบัติการมี Linux, RT-Thread (RTT) และ Xboot แต่จากขนาดแรม คงต้องรันเบา ๆ หรือ headless ดีๆแล้ว น่าเอาไปทำ IoT ที่ต้องการชิปมาช่วยเข้ารหัสข้อมูล หรือทำ signage จอโฆษณา

มีขายที่ Banggood อยู่สองรุ่น คือมีกับไม่มีหน่วยความจำ 8M SPI flash แต่ดูเหมือนรุ่นที่ไม่มี SPI ตอนนี้ของหมด จะต้อง back order ลงชื่อไปก่อน ราคาราว ๆ 9-10 ดอลลาร์ อาจต้องแข่งกับ Orange Pi หรือ Onion Omega กันหน่อย และเอกสารในเว็บของมันก็ดูเหมือนจะมีแต่ภาษาจีนด้วย

ผ่านทาง https://www.cnx-software.com/2018/08/17/licheepi-nano-cheap-sd-card-sized-linux-board/

ป.ล. เห็นแว๊บ ๆ ว่ามี LicheePi ZeroW แต่ราคาพอ ๆ กับ Raspberry Pi Zero W ที่บ้านเราเลย

Advertisements

Grapeboard บอร์ดองุ่น น่าจะเหมาะทำ NAS

บอร์ดคอมพิวเตอร์จิ๋วชื่อแนวๆ ผลไม้ มาอีกบอร์ดแล้วครับ คราวนี้เป็นองุ่น Grapeboard มีช่องต่อ 26-pin คล้าย Raspberry Pi รุ่นเก่า หน่วยประมวลผลเป็น NXP QorIQ LS1012A single core Cortex-A53 แรม 1GB มี Wi-Fi, Bluetooth แต่ทีเด็ดคือมี Gigabit Ethernet, USB 3.0 และช่องต่อ M.2 ที่เอาไปต่อขยายเพิ่ม SATA harddisk ได้ น่าจะเหมาะสำหรับทำ NAS

ถ้าจะทำ NAS ก็คงต้องหาระบบปฏิบัติการและ software ทางด้านนี้ ซึ่งยังไม่เห็นรายละเอียดนะครับ ซึ่งรวมถึงราคาและการวางจำหน่าย แต่ก่อนหน้านี้เคยมีบอร์ด Scalys-LS1012 ซึ่งใช้ชิปตัวเดียวกัน แรมถึง 8GB มีช่องต่อ HAT 40-pin

ผ่านทาง https://www.cnx-software.com/2017/12/30/grapeboard-raspberry-pi-lookalike-board-comes-with-dual-gigabit-ethernet-two-usb-3-0-ports/
https://www.scalys.com/modules/scalys-ls1012/

Banana Pi M2 Zero Board มาพิมพ์เดียวกับ Raspberry Pi Zero W

คอมพิวเตอร์จิ๋วอีกตัวครับ Banana Pi M2 Zero Board มาในขนาดและขาต่อในแผงวงจรพิมพ์เดียวกันกับ Raspberry Pi Zero W คือมีขาต่อบอร์ดขยายแบบ HAT 40-pin และยังมี serial port สำหรับใช้งาน debug UART เข้าใจว่าเพื่อไม่ปะปนกับ Bluetooth (ใครใช้ Raspberry Pi 3 อาจเคยเจอปัญหานี้) มี Wi-Fi ในตัว รวมทั้งมีพอร์ต HDMI, CSI สำหรับกล้อง และ USB มาให้

หน่วยประมวลผลเป็น Allwinner H2+ quad-core Cortex-A7 (เหมือน Orange Pi Zero) มาพร้อมกับแรม 512 MB DDR3 ต่อ micro SD card ได้สูงสุด 64GB สำหรับระบบปฏิบัติการก็มี Armbian และ Ubuntu

ราคาขายที่ Aliexpress อยู่ที่ 15 ดอลลาร์ แต่ค่าส่งมาไทยแพงกว่านั้นอีก ไม่รู้ว่าวันคนโสด 11.11 จะมีลดไหม หรือใช้ Orange Pi Zero (ซึ่งมีชุดสำหรับทำระบบลำโพงอัจฉริยะด้วย) แทนถ้าไม่กังวลเรื่อง HAT อีกตัวก็ NanoPi

ผ่านทาง https://www.cnx-software.com/2017/10/30/16-5-banana-pi-m2-zero-board-is-a-raspberry-pi-zero-w-clone-with-a-quad-core-processor/

ทดลองแบบแมวๆ ใช้ Magenta บน Docker ช่วยแต่งเพลง

Magenta เป็นโปรแกรมที่ผลิตงานศิลปะ แต่งเพลงได้ด้วย machine มันใช้งาน TensorFlow แต่ผมลงไม่สำเร็จ เลยใช้แบบเร็วๆ แบบแมวๆ ด้วยการใช้ Docker เสียเลย ซึ่งผมลง Docker ไว้แล้ว (ลืมไปแล้วว่าลงด้วยวิธีไหน) ก็สั่ง

docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta

จะเข้าสู่การใช้งานเชลล์บน Docker ก็จะใช้ Magenta แต่ต้องมีทวงทำนองนำร่องไปก่อน ลองเล่นเอง
C, D, E, C,
D, E, G, E
ก็เพราะดีนะครับ ใน Docker ก็สั่ง

# melody_rnn_generate \
   --config=lookback_rnn \
   --bundle_file=/magenta-models/lookback_rnn.mag \
   --output_dir=/magenta-data/lookback_rnn/generated \
   --num_outputs=10 \
   --num_steps=128 \
   --primer_melody="[60, -2, 62, -2, 64, -2, 60, -2, 62, -2, 64, -2, 67, -2, 64, -2]"

ผมใช้แบบ Melody RNN สร้างเพลงแบบเล่นโน้ตที่ละตัว แบบที่ violin หรือ flute เล่นได้ (นั้นคือเล่นคอร์ดไม่ได้ แต่ Magenta ก็มีให้เลือกหลายแบบนะครับ velocity ก็มี)
โดย –primer_melody ใส่เลขที่เป็นตัวโน้ต ตามรหัสของ MIDI โดย 60 คือ middle C แต่ละโน้ตตามด้วย โน้ตตัวอื่นก็บวกลบหนึ่ง เป็นการเพิ่มหรือลดที่ละ semitone ส่วน -2 คือ no event

ก็จะได้เพลงเป็น MIDI ไฟล์ อยู่ที่เครื่องตัวหลักของเรา (นอก Docker) ที่ path /tmp/magenta/lookback_rnn/generated/

ทางเลือกในการตัดคำภาษาไทย ด้วย Python

ประโยคในภาษาไทยไม่ได้มีการเว้นวรรคระหว่างคำ การจะตัดคำในประโยคจึงต้องใช้ algorithm มาหาว่าตรงไหนเป็นคำ แล้วจึงตัด ก็ไปเจออยากน้อยสองที่ซึ่งใช้ได้ กับภาษา Python คือ PyThaiNLP และ deepcut ท่าทาง machine learning ได้ประโยชน์ในงานนี้ล่ะครับ

PyThaiNLP
https://python3.wannaphong.com/2017/05/pythainlp-%e0%b9%82%e0%b8%a1%e0%b8%94%e0%b8%b9%e0%b8%a5-nlp-%e0%b8%a0%e0%b8%b2%e0%b8%a9%e0%b8%b2%e0%b9%84%e0%b8%97%e0%b8%a2%e0%b9%83%e0%b8%99-python.html
https://github.com/wannaphongcom/pythainlp

ผมใช้กับ Python 3 นะครับ ติดตั้งโดยสั่ง

pip3 install pythainlp

ทดลองสคริป Python (จริงๆ ก็ทำคล้ายๆ ของเจ้าของผลงานครับ)

from pythainlp.segment import segment
s=segment('ฉันรักภาษาไทยเพราะฉันเป็นคนไทย')
print(s)

ได้ออกมาว่า

['ฉัน', 'รัก', 'ภาษา', 'ไทย', 'เพราะ', 'ฉัน', 'เป็น', 'คน', 'ไทย']

ถ้าเป็น Python 2 ก็ใช้ได้เหมือนกันครับ แต่ต้องระบุสตริงเป็น Unicode ด้วย ใส่ u ข้างหน้าสตริง (u’ฉันรักภาษาไทยเพราะฉันเป็นคนไทย’) ส่วนผลลัพธ์เมื่อพิมพ์อาจจะออกมาเป็นโค้ดนะครับ เช่น u’\u0e09\u0e31\u0e19′ คือ ‘ฉัน’

deepcut
https://www.facebook.com/groups/988867541235062/permalink/1258831837571963/
https://github.com/rkcosmos/deepcut

ติดตั้งบน Python 3 บ้าง

pip3 install deepcut

ซึ่งรอนานเอาเรื่องเลยครับ จากนั้นก็ทดลองใช้งาน

from deepcut import tokenize 
tokenize('ฉันรักภาษาไทยเพราะฉันเป็นคนไทย')

ก็ได้ผลลัพธ์เหมือนกัน เลยลองใช้ทั้งสอบแบบในสคริปเดียวกันดู
(พึ่งเห็นว่ายังไม่ได้คอมไพล์ TensorFlow ให้ไปใช้ความสามารถของชุดคำสั่ง SSE 4.1, SSE 4.2 และ AVX อันที่จริง GPU ค่ายเขียวในเครื่องก็มีนะครับ แต่ต้องสมัครลงทะเบียน cuDNN)

แล้วก็ รวมตัวเลือก https://github.com/kobkrit/nlp_thai_resources/blob/master/README.md

ใช้ยีสต์และรหัสพันธุกรรมเป็น Logic Gate

ไปอ่านเจองานวิจัยจาก University of Washington มาครับ ดัดแปลงรหัสพันธุ์กรรมในยีสต์ ให้ทำงานเหมือน NOR gate ในวงจรดิจิทัล โดยใช้เทคนิค CRISPR ซึ่งมักมีข่าวฮือฮาว่าใช้ตัดต่อรหัสพันธุกรรมเพื่อรักษาโรคได้

เท่าที่เห็นในวงจรดิจิทัล NOR gate จะถูกสร้างออกมาเหมือนๆ กันหมด แล้วใช้สายสัญญาณเชื่อมต่อ input หรือ output ของพวกมันเข้าด้วยกันเพื่อทำเป็นวงจรแบบ combinational logic แต่งานนี้เท่าที่อ่านดู NOR gate แต่ละตัวจะไม่เหมือนกัน โดยจะประกอบขึ้นมาจากจากทางเลือก input ได้ 400 แบบ และ output ได้ 20 แบบ ๖๗คือกำหนดการเชื่อมสัญญาณตั้งแต่ตัวเกตเลย ไม่ใช่มาร้อยสายทีหลัง

ถ้าสร้าง NOR gate มากกว่าหนึ่งตัวที่เอามาต่อทำงานเหมือนในวงจรดิจิทัลได้ ซึ่งก็คือเรามี NOT และ OR gate อยู่ในมือ ก็สามารถสร้าง logic gate แบบอื่นๆ เช่น AND, NAND, XOR gate ได้ (ใช้พีชคณิตแบบบูลมาช่วย) แต่จะว่าไปสงสัยต้องอ่านตำราชีวะเพิ่มเสียแล้วเรา

ที่มา https://www.nature.com/articles/ncomms15459 รหัสวัตถุดิจิทัล DOI: 10.1038/NCOMMS15459
ผ่านทาง https://www.sciencedaily.com/releases/2017/05/170525085123.htm

ลองภาษา R แบบขำๆ เร็วๆ

ขอเขียนแบบตีหัวเข้าบ้านเลยนะครับ ใช้แนวทางจาก https://stats.idre.ucla.edu/r/dae/logit-regression/ ทดลองทำ Logistic Regression โดยติดตั้ง R ด้วยวิธีจาก https://www.r-bloggers.com/how-to-install-r-on-linux-ubuntu-16-04-xenial-xerus/

ก็สั่ง

$ wget https://stats.idre.ucla.edu/stat/data/binary.csv
$ Rscript -e " mydata <- read.csv(\"binary.csv\");  mylogit <- glm(admit ~ gre + gpa , data = mydata, family = \"binomial\"); summary(mylogit)"

ได้ผลลัพธ์ออกมาเป็น

Call:
glm(formula = admit ~ gre + gpa, family = "binomial", data = mydata)

Deviance Residuals:
Min       1Q   Median       3Q      Max
-1.2730  -0.8988  -0.7206   1.3013   2.0620

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.949378   1.075093  -4.604 4.15e-06 ***
gre          0.002691   0.001057   2.544   0.0109 *
gpa          0.754687   0.319586   2.361   0.0182 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 499.98  on 399  degrees of freedom
Residual deviance: 480.34  on 397  degrees of freedom
AIC: 486.34

Number of Fisher Scoring iterations: 4

แถม pandas กับภาษา Python ซะหน่อย ไปเจอมาจาก http://blog.yhat.com/posts/logistic-regression-and-python.html ดูเหมือนจะใช้ csv file เดียวกัน แต่อยู่คนละ path

ติดตั้ง pandas ก่อน ผมลง pip ไปแล้ว ก็

$ sudo pip install pandas

จากนั้น Python ใส่สคริป

import pandas as pd

df = pd.read_csv("binary.csv")
print df.head()

ได้ผลเหมือนตัวอย่าง

   admit  gre   gpa  rank
0      0  380  3.61     3
1      1  660  3.67     3
2      1  800  4.00     1
3      1  640  3.19     4
4      0  520  2.93     4