拾荒者的垃圾場。
這兒有點荒蕪,而我繼續在生命中拾荒。

目前分類:試的 (50)

瀏覽方式: 標題列表 簡短摘要

最近要學 Ocaml,發現他的 interative mode 不是很友善,要掛上 rlwrap 時發現沒有。

安裝後 readline.so 檔版本出錯(有 7.0 有 8.0 不一致),來個大系統更新,更新失敗,結果就掛了。

本來只有 rlwrap 不能用,現在一堆東西都不能用,shell 也怪怪的了。

遇到坑就是要把他踩過啊...之後如過跳 NixOS 成功的話,應該就沒這問題了。

第一個遇到的坑:

arch linux - pacman "exists on filesystem" error

包有重複,那就看那些包有沒有依賴:

sudo pacman -Qo /usr/lib/python3.7/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-37.pyc
沒有的話,就砍了吧:
sudo rm -rf /usr/lib/python3.7/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-37.pyc

然後

pacman -Syu
之後遇到的是:
signature from "lilac (build machine) <lilac@build.archlinuxcn.org>" is unknown trust

把 key signature 之類的都砍了,重新下載。

sudo rm -rf /etc/pacman.d/gnupg
pacman -Syy
pacman -S archlinux-keyring antergos-keyring archlinuxcn-keyring
sudo pacman-key --refresh-keys

之後再來個。

sudo pacman -Syu

成功!

EOF

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

pacman -Syy  hdf5 vtk base-devel opencv opencv-samples
 

然後可以到 /usr/share/opencv/samples 編譯 samples

cmake . && make && cd cpp

有一堆執行檔可以進行測試

EOF



 

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

cataclysm 是一款古意濃厚(?)的遊戲。
最大的賣點是移植性高,語言支持強,
能充分發揮玩家想像力(逃
聽說作者到現在還很活躍的進行改版呢。

(本來是想玩 nethack ... 然後就不小心看到 cataclysm ><)

有鑑於從 pacman, yaourt 下來的版本都有些問題,
我直接從 GitHub 下載進行編譯。

由於是 Arch based 的系統,
先裝好環境:sudo pacman -S base-devel

make !

然後發現我要 astyle

sudo pacman -S astyle

make !

然後編很久~
結果遇到了:

CommandLine Error: Option 'asm-instrumentation' registered more than once!
LLVM ERROR: inconsistency in registered CommandLine options

$ sudo pacman -Rdd llvm-libs

編譯成功!



ref : manjaro forum (玩 antergos 找解答竟然跑到 manjaro 去 ><)once/54862

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

到裝好發音工具為止,
這環境總算是比較完整一點了。

紀錄一下我的工具們吧 :)

最一開始是使用 ici - 一個 python 線上查詢工具,要網路。

用起來嘛,速度不夠快,然後受限於連網環境。
那還不如直接開瀏覽器,使用 google translater 的插件,
綁定個 ctrl + q 直接查還比較快,還可以查整句翻譯。
缺點是沒有例句,也沒有音標(可是能發音就夠了)

很早就景仰星際譯王(StarDict)的大名,
可是一直找不到適合的字典檔。
最後發現在 arch wiki 上就有提供下載連結
使用了 StarDict 的 terminal 板 - sdcv 後,就把 ici 淘汰了。

離線環境,如果有發音工具那自然是墜吼的。
我找到了 espeaker,但發音太機械。

然後 pacman 下來的 festival 又遇到 segmentation fault
(查過,好像是 c++ compiler 把 null pointer 優化所致)

最後上 github 抓 festival 的 source code 下來 compiler,
在搭配上 pacman 下來的 voices files 才運行成功 ^^

# get source from github
git clone git@github.com:festvox/festival.git
git clone git@github.com:festvox/speech_tools.git
git clone git@github.com:festvox/festvox.git
cd speech_tools && ./configure && make install && make all && cd ..
cd festvox && ./configure && make all && cd ..
cd festival && ./configure && make install && make all && cd ..

# get festival voices files, dicts... from archlinux festival repositories 
sudo pacman -S festival festival-english
ln -s /usr/share/festival/voices/ ./festival/lib
ln -s /usr/share/festival/dicts ./festival/lib

# 也可以透過 festival/bin/default_voices 來取得 voices files, dicts...
cd festival && ./bin/default_voices # 路徑要在 festival 的 top directory

# 測試

echo "hello" | ./festival/bin/festival --tts

然後在 ~/.vimrc 下:
let mapleader = "\<Space>"
nmap <Leader>t :!echo --- <C-R><C-w> ---\\n ;sdcv -c<C-R><C-W><CR>
nmap <Leader>s :!echo --- <C-R><C-w> ---\\n ;echo <C-R><C-W> \| festival --tts<CR>

在 noraml mode 下用
空白鍵 + t 翻譯,
空白鍵 + s 發音。

 

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

裝了 antergos ( based on archlinux ) 後,
由於嚮往同學使用的 Xmonad 視窗管理,
所以我裝了 i3wm (欸?)

筆電調整亮度的按鍵,
每按一次,亮度就調很多,
也沒辦法調得很暗(沒按幾下就全黑了)。

記得在寫 i3config 時有寫到 audio 的綁定,
但是就是沒有 brightness 的部份。

想說可能綁一下,就可以調整 interval,
上網查了一下,but xbacklight not works,
最後找到這篇,使用 GNU 開發的 light 小工具,才終於解決。

剛好 archlinux 上有安裝包,
所以不用載下來自行編譯。

sudo pacman -S light 就好,
然後在 ~/.config/i3/config 加上

bindsym XF86MonBrightnessUp exec light -A 5 # increase screen brightness
bindsym XF86MonBrightnessDown exec light -U 5 # decrease screen brightness

果然,取了 5 之後, interval 就小很多了。

文章標籤

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

軟工要用到 Astah,幸虧此軟體有提供 Linux 版本。

在下是使用 Antergos,Archlinux 的派生版,直接在 AUR 就可以載得到。

yaourt -S astah-professional

運行 astah

然後發生了 A exception has occurred when launching astah*

原因是 java 版本可能不適用

> superbia commented on 2017-11-01 11:19

> Installed the latest version and it crashes.
> An exception has occured when launching astah*.

> EDIT: Removing the old jdk, and installing the latest one manually fixed the issue.

 

查了一下,其實設定 java 還蠻簡單的。

當初下載的時候,提供了很多不同的版本,而載了之後,他其實有提供一個簡單的工具進行切換。

archlinux-java

使用 archlinux-java status 赫然發現目前只有 jre only,然後之前載的 open jdk 並未被選起來。

(如果你 stats 只有一項,那就去下在最新的 java 再使用此工具做切換)

sudo archlinux-java set java-9-openjdk

# 我的是 java-9-openjdk,也可以試試其他版本,不過 default java-9-jre/jre 不能用

切換之後就可以使用 Astah 了。

eof

 

 

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

此篇文章為救資料,並無法解決輪迴問題。

遇到這種情況,大概就是把資料拷出來然後重灌了吧。

其實一切都有先兆了,寒假回家後,

我的 Defender 一直要更新,

結果每次開機都跳還原,我還嘗試關更新,結果應該是沒關成功。

每次關機就跳更新,開機跳還原,我就擺爛,

結果就陷入重開還原失敗輪迴。

上網 google 到這篇 

解法就是在另一槽灌 windows 然後去抓爆掉的那槽。

好麻煩,還要灌 windows,手邊只有 win7,我也沒灌過 ==

折騰半天,決定請專業的,他說要幫我抓出來。

結果去,他說是 Bios 版本太舊要更新,

然後插了裝 win7 live CD 的 USB,讓我抓資料出來。

就直接開檔案總管抓檔案。

我抓了幾 Mb 的資料,主要是前幾天的 code 沒 commit 上去。

抓的同時,他又說了雜七雜八的東西,硬體與礦機之類的 ==

這幾個檔案值三百塊。

回到家後,我才想到我最重要的私鑰沒抓出來……

更新了 Bios ,依然輪迴,果然要重灌。

自己做了 win7 的 live CD USB ,

(用的是家裡桌機某神秘資料夾裡的 ISO )

結果我的筆電抓不到 = =

打電話回去,問說可不可以再請他幫忙,

順便請教一下重灌的事情 ( 主要是要問 USB 抓不到)

他說可以幫忙再抓(可是不知道要再收多少)

一聽到要請教,就說這邊沒有在教人重灌,況且今天教的已經夠多了。

雖然能理解,因為他是靠這行維生的,但是我心態就不太平衡了,

彷彿重灌像是什麼很高深的學問一樣,不就下一步下一步嗎?

當我沒灌過 OS,我灌過的OS 也不少,

Ubuntu , Mint , Arch , Kali , Antergos , Cent , FreeBSD 都裝過了,

就是不爽裝 windows  ==#

有種被看扁的感覺啊~唸了三年 CS,結果 ==

限於手邊資源太貧乏(兩塊行動硬碟和隨身碟都放在宿舍)

又不想載其他 windows ISO,

想了很久最後想到 Linux 的 Mount 說不定也可以讀 NTFS。

那就簡單了,我的主場。

向家人借了兩支 USB,然後一支灌了 Antergos,

Antergos root 不用密碼,

開了之後直接

mkdir ~/gg

sudo mount -t ntfs-3g -o ro /dev/sda1 ~/gg

[ mount command ref ]

值得注意的是 /dev/sda1,因為我不只有 sda1,所以將 1-6 都全 mount 過一遍

當初 win10 切兩槽,所以沒意外的話其中有兩槽是你要的。

mount 一下,cd gg 看一下是不是,不是的話 cd 回來再往下 mount

我拷了快 1G 到另一支隨身碟哈哈哈。

最後重灌也直接灌 Antergos 了。

我終於從 windows 中解脫了。

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

八練一文提到和總務翻譜,感覺還要想音有點麻煩,不會想的就更麻煩,

於是這個 App 就做出乃啦!花了三天的閒暇時間 :3

人參第一支 App 然鵝我還是不會寫 Java

 

主要就國樂各種調性的笛子遇到各種五線譜,你不知道怎麼按的時候,

就照這個 App 給你的表就可以翻拉!

再來可能會加一堆有 fancy 功能的節拍器拉,調音器拉,甚至是神器級的 (?) 翻譜功能。

但要等我活過這學期 ( 逃
 

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

因為作業需要 PDF,由於不喜歡開 Word,而漸漸用 Markdown 繳作業的我,

開始去找 Markdown 轉 PDF 的方法。( 會學 Markdown 是因為寫部落格也會用到 )

別問我為什麼不用 LaTex,因為我還沒學 ( 懶得學 )。

於是我就找到了 Atom。GitHub 上開源的一款編輯器。

Atom 的宗旨就是不要讓你花精力在調教上。

所以囉,小小 try 了一下,就裝起來了。

不過比較麻煩的事可能要開 cmd 到 Atom 資料夾下的 bin,下 cmd。

因為插件需要 compile,所以他需要知道各種編譯器的位置。

cd C:\Users\你的使用者名字\AppData\Local\atom\bin

apm install --check

如果需要 python 就裝 python , node 就裝 nodejs,c/c++ 應該會教你裝 vs 的 compiler 吧。

反正我下完 check 後就什麼都找到了,我原本就什麼都有裝了。

點開 package 頁面,我是下載 Markdown-PDF 這個插件。

安裝完後,直接開一個 Markdown 檔案,

快捷鍵 ctrl + shift + c 直接在 Markdown 檔案相同位置產生 pdf 檔。

不然就是點視窗上面有 package 的 menu,到裡面去找那個插件。

我把 Atom 當成轉檔用的軟體,主要編輯還是在 Vim 。

這樣上比較習慣啦~

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

恩。。。chrome 的刪除僅支援時間。。。嗎?

不,他也提供了關鍵字搜尋功能,搜完紀錄都出來了。

但怎麼沒看到全選鍵勒。。太難用了吧。。

我還找到了用 js 全選的文章,結果我一直寫不好(可能是改版了緣故吧)

我上上下下摸了幾十分鐘結果發現...

首先 ctrl + h 叫出歷史頁面。輸入關鍵字。

點了第一個框框,然後按住 shift,點最後一個就批量選起來啦!

太 windows 了吧。。還好有還有一些 sence。。要不連按都按不出來了。。

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

唉,之前折騰過,然後又忘了怎麼裝。

搜到的都很麻煩,要下壓縮檔,改檔案的,因為之前折騰過,

所以我很清楚不用這麼複雜。

可惜天下文章一大抄,中文資源都是這種麻煩的方法。

那我來抄一下英文的吧 ( 被打

當然有加一下東西 。

ref : so , cygwin 下的包就有提供這個 man page,不過要再裝。

所以!

請愛用 apt-cyg

apt-cyg install  man-pages-posix

以上。下個 man 3 printf 試試吧。

順手找了 c++ 的,除了 linux 一些發行版有 doc,

github 上也有個工具,不過第一次瀏覽應該需要網路,他會用 urlopen 開,

之後應該會快取起來。

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

紀錄一下別人踩的坑。

同學在用 C++ 的 thread 時,一直編譯不過,

最後發現是 thread 傳入的 function poiter 的 member 的緣故。

和一般的 function pointer ,

member function pointer 要再傳 this pointer 進去

( 因為 thread 才會知道要拿哪個物件執行 function  )

所以要這樣傳:

animal :: walk(){ this->pos++; }

...

animal(){

  thread(&animal::walk , this);

}

...

其實啊,稍微有一點物件導向的常識應該都會知道,member function 其實都只是個 pointer,

在許多物件導向語言都把 this 的傳入省略掉了,

他的原型應該是 animal_inst.walk(animal_inst);  要把物件本身傳進去。

感覺已經不會寫 cpp 了。。

應該要找時間把那篇醜醜的 C 聊天室,改成物件導向風格了,

因為一堆 global 好醜。。

ref : so.

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

內網連線應該是沒問題的,如果知道正確的內網 IP 的話。

家裡有申請靜態 IP 就是為了方便連線,樹梅派就可以簡單做一台伺服器常駐在家。

(當然動態也是可以啦 = =) -> 點 看一下你的 IP

恩,可是遇到了點小問題,在檢查防火牆 ( router 沒有設,archlinux arm 預設也是沒有滴 ) 後,

還是連不上。

兩小時過後。。。

爸:應該是沒有設 gateway 吧。linux 和 win 不同,應該都要手動。

我:o_o"

>  route add default gw 192.168.10.1 # 這是 router 的內網 IP   , linux 的 route 好像不用加 -p 永久設置 ? 

done. 開學後連得回來惹,GOOD!

文章標籤

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

Five programming problems every Software Engineer should be able to solve in less than 1 hour

第一題: 給一 List,用 for , while , recursion 加總。

第二題: merge 兩個 List 使其從 [a , b , c] -> [1 , 2 , 3] -> [a , 1 , b , 2 , c , 3]。

第三題: 求斐波那契前一百個數。

第四題: 給定元素,組出最大的一個整數。

第五題: 123456789 其數字間可加上 + , - 或不加,求所有運算結果為 100 的式子。

嘛,儘管如此的水,我還是會卡在無聊的地方,太 naive 了,順帶一提 python 的 functional 還不錯用。

再次拜倒在函數式的優雅下。

 

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

表哥給了我一台樹梅派,還有一塊 arduino 的板子。以及......整盒子的 (ノ>ω<)ノ 元件!

太感謝啦,才剛上完數位系統,暑假馬上就有板子可以玩,太棒啦 XDD

開始挑各種 arm linux 最後決定裝 arch , 因為之前一直裝不起 PC 版的,只能裝 antergos,這次 arm 的決定再來試試。

arch 以詳細的 wiki 而聞名,要在樹梅派上裝 arch arm 也有說明。由於我拿到的是 pi2,所以參考了 pi2 的安裝頁面

剛開始沒看到這頁,直接到了 Arch Download 的頁面下了檔案,是 tar.gz,直覺怪怪的,不應該是光碟嗎,解開是完整的 linux 檔案樹。

後來找到了 安裝頁面 又查了些資料,才了解到,好像只有 2013 有提供映像檔,所以 fully updated version 需要用指令直接拷到 SD 卡中。

所以 windows 可能沒辦法照著 Arch wiki 的方法做。除非是裝 2013 的映像檔。

儘管有安裝 gnu cygwin ,但由於沒有 mkfs.vfat 這指令,所以還是要用 linux 才有辦法做。

(mkfs.vfat,好像依賴於 linux kernel 的 header )

總之 @cygwin ~ $ mkfs* 沒有 mkfs.vfat。
mkfs.bfs.exe     mkfs.exe         mkfs.ext3        mkfs.ext4dev
mkfs.cramfs.exe  mkfs.ext2        mkfs.ext4        mkfs.minix.exe

重新整備好了 antergos,發現他的 fdisk 好像怪怪的,於是就用了 cygwin 上的 fdisk ( 以系統管理員身分執行 ) ,接著一步一步照著 wiki 就裝好了(以下截自 wiki)。

Replace sdX in the following instructions with the device name for the SD card as it appears on your computer.
# 在我的 windows cygwin 上的 sdX 是 sdb

  1. Start fdisk to partition the SD card:
    fdisk /dev/sdX
    # fdisk /dev/sdb
  2. At the fdisk prompt, delete old partitions and create a new one:
    1. Type o. This will clear out any partitions on the drive.
    2. Type p to list partitions. There should be no partitions left.
    3. Type n, then p for primary, 1 for the first partition on the drive, press ENTER to accept the default first sector, then type +100M for the last sector.
    4. Type t, then c to set the first partition to type W95 FAT32 (LBA).
    5. Type n, then p for primary, 2 for the second partition on the drive, and then press ENTER twice to accept the default first and last sector.
    6. Write the partition table and exit by typing w.
  3. Create and mount the FAT filesystem:
    mkfs.vfat /dev/sdX1
    # mkfs.vfat /dev/mmcblk0p1
    # 在 antergos 上它顯示的是上面這名子,ls 比對一下 sd 插入前後即可得知。
    mkdir boot
    # mkdir boot
    mount /dev/sdX1 boot
    # mount /dev/mmcblk0p1 boot
    
  4. Create and mount the ext4 filesystem:
    mkfs.ext4 /dev/sdX2
    # mkfs.ext4 /dev/mmcblk0p2
    mkdir root
    mount /dev/sdX2 root
    # mount /dev/mmcblk0p2 root
    
  5. Download and extract the root filesystem (as root, not via sudo):
    wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz
    bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C root
    sync
  6. Move boot files to the first partition:
    mv root/boot/* boot
  7. Unmount the two partitions:
    umount boot root
  8. Insert the SD card into the Raspberry Pi, connect ethernet, and apply 5V power.
  9. Use the serial console or SSH to the IP address given to the board by your router.
    • Login as the default user alarm with the password alarm.
    • The default root password is root.

插 SD 卡,接 micro usb 上電源,接網路線。

上 router 的網頁,查看 ip,ssh 進去。例如我是連到 192.168.10.10

$ ssh alarm@192.168.10.10

alarm@192.168.10.10's password: alarm
# 如 wiki 所說。

先下編輯器再說。

好像沒有 sudo ,直接 su。

[alarm@alarmpi ~]$ su

Password: root

[root@alarmpi alarm]# pacman -S vim

failed retrieving file 'vim-runtime-8.0.0722-1-armv7h.pkg.tar.xz' from mirror.archlinuxarm.org : The requested URL returned error: 404

參考了這篇

pacman -Syu

然後再下一遍就 Ok 了。

( 老實說那位老兄說 >  Update your system.  我完全沒 got 到點啊 XDD )

文章標籤

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

最近重構 Minesweeper Solver,卻因為 win10 update,造成之前的遊戲版本無法運行,只好自幹遊戲。

但是自己寫的 GUI 感覺很麻煩,於是就找到 minesweeper online 的 js code,但又不想用瀏覽器玩。
(因為螢幕分析會因為瀏覽器不同而不好做)

我必須把這東西轉成有自己視窗的 exe。

js 怎轉 exe ? 有這麼神奇的東西嗎 ? 我在想 node js 都出來了 ( js 能活在後端 ),

js 的 GUI 應該也不遙遠了。

果不其然,在幾年前就有 node webkit 這咚咚。


(GitHub 上最早的 Release tag Ver)

on 15 Mar 2012 

 

 

還蠻容易的,第一次用就上手。

將 index.html 放進去,再加個 package.json 就可以運行。

但我想要的是獨立於 node js 和 node webkit 的獨立 exe 檔。

依照 node webkit 官方的說法,可以用工具或 DIY。

當然要先 DIY 看看啦。

先 zip 成 .nw 檔,然後將 nw.exe 在 cmd 下 copy 到 .nw 後面。

copy /b nw.exe+app.nw app.exe

恩,本機 (laptop) 可以 run,試試看移植。

desktop 說他不能 Run ...

那來試試看工具吧。

nodebob 看起來最簡單,因為是 bat 和 shell script 寫的。

然後就掉坑了。

C:\Users\dici8\Desktop\nodebob>build.bat
nodebob v0.1
---


Creating app package
7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18


Error:
7-Zip cannot find the code that works with archives.

Creating executable
複製了         1 個檔案。
C:\Users\dici8\Desktop\nodebob\release\nw.exe
複製了         1 個檔案。

Copying files

Deleting temporary files
找不到 C:\Users\dici8\Desktop\nodebob\release\app.nw

Done

 

恩 ... 看起來 7z 有點問題,結果發現是他 buildTools 裡的 7z 不能 Run ...

(就算加了 x 權限也不能用)

那就 載個 7z 來用吧。

我載的是 .exe 64-bit x64    7-Zip for 64-bit Windows x64 (Intel 64 or AMD64)

恩,沒毛病。

然後是將 7z 加到環境變數。
搜 檢視進階系統工具 -> 環境變數 -> 挑 Path 點 新增 -> 挑 7z 資料夾
(我的是在 "C:\Program Files\7-Zip")

cmd 測一下 7z 。

將 nodebob\buildTools 的 7z 資料夾重命名(名字不要是7z就好),然後創一個空的 7z 資料夾。

目的是為了讓 7z 指令直接用到環境變數的 7z 程式。

C:\Users\dici8\Desktop\nodebob>build.bat
nodebob v0.1
---


Creating app package
7-Zip 17.00 beta (x64) : Copyright (c) 1999-2017 Igor Pavlov : 2017-04-29

Scanning the drive:
1 folder, 9 files, 1606807 bytes (1570 KiB)

Creating archive: C:\Users\dici8\Desktop\nodebob\release\app.nw

Add new data to archive: 1 folder, 9 files, 1606807 bytes (1570 KiB)


Files read from disk: 9
Archive size: 670780 bytes (656 KiB)
Everything is Ok

Creating executable
複製了         1 個檔案。
C:\Users\dici8\Desktop\nodebob\release\nw.exe
C:\Users\dici8\Desktop\nodebob\release\app.nw
複製了         1 個檔案。

Copying files

Deleting temporary files

Done

nobodyzxc 發表在 痞客邦 留言(1) 人氣()

夢中想到一題。

化簡含有零的式子,

input:

2 * 2 + 0 + 3 * (0  * 5)

output:

2 * 2

 

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

系統程式的作業是要將之前寫的 C/C++ Program 轉成 JavaScript 放在網頁上面 Run,
聽起來還滿簡單的,不過卻甚是折騰,因為 Emscripten 就是個鍋。

對,沒錯,大鍋。

大到還不如直接重新寫份 JavaScript 還比較快。 _(:з」∠)_
當然啦,我的意思是假設你的 C/C++ Program 只有幾百行的話。

因為即使有 Emscripten,要做 Web Page Input 的接口,也是挺折騰的。
(如果有現成可以調的話,也是不難啦)

進入正題,來談談為什麼折騰吧,

Emscripten 安裝


首先是環境,
要選用 Linux 還是 Windows。
(我是窮學生,用不起 Mac,所以不用考慮 OSX) XD

LINUX 支線 =============================BAD END1=

Linux 我用的是之前裝在虛擬機的 Mint,
clang 和 llvm 裝好後,然後下載 Emscripten,我從官網下 portable。
編譯, 然後 clang 的動態連結庫就失效了,WTF。

這是一個剛買榔頭 (clang),開始作傢俱(Emscripten),敲第一下,榔頭就爆了的概念。

當時我的表情是這樣的。

也不是不想解決,但就是找不太到可用的 solution...

我試了第二遍,結果一樣,於是就換到 Windows 上。

畢竟不想再為難我的另一套 Linux (Antergos)。

WINDOWS 支線 ==========================GOOD END=

Windows 上要準備那些東西呢?

PythonNodeJS 還有 Emscripten Windows 的包。

Python , NodeJS 我是都剛好都有裝,所以 Emscripten 裝的還蠻順利的。

雖然安裝跑的有久,還幫你裝一些 VS 的東西,不過至少還可以用。

切到 C:\Program Files\Emscripten\emscripten\1.35.0 『版本號 1.35.0] 下可以測試。

emcc tests\hello_world.c

會跑出 a.out.js ,可以用

node a.out.js

測試。

hello, world!

LINUX 支線 =============================BAD END2=

我不死心的又回到 Mint 上搞,把 portable 刪了,改下 GitHub 的版本。

發現我忘了裝 Node,但就算少 Node , clang 照理說也不會爆才對,

( 所以 clang 爆掉應該是 portable 的鍋 )

剛開始找不到 clang 路徑,結果發現是之前裝的刪不乾淨,

在家目錄留著之前的配置文件 .emscripten ,刪了,重裝,

我折騰了一番,裝好 Node 再來一次,這次好了, clang 沒爆,換噴 llvm 版本太舊,

至少要 3.9 版,我又折騰了一番, apt-get 上 3.9 好像升不太上去,於是我無所不用其極,

找了一些旁門左道,最後還是以失敗告終。

結論,Ubuntu 除非裝比較舊的 Emscripten,不然沒辦法用,因為 llvm 升不上去。

我 Antergos 也試了,我發現 Pacman 有 Emscripten 的包,直接下載下來,clang 也順便下了,

然後我 Pacman 就爆了,WTF,就爆了 ,

是啥 openssl 的問題,我在折騰時確實有不小心升了一個 openssl 的包。

還能說甚麼呢,我 Antergos 也可能要再找個時間重裝了,因為感覺 Pacman 爛掉了,怎麼弄都弄不好

。。

Emscripten 提供輸入(stdin)

 

接下來是折騰網頁的部分,

如果直接用 Browser run,他會用 prompt() 吃 Input,

重點是如果不按 ESC(按f12好像也會) 讓 prompt() 回傳 null,他會停不下來,

不過結果是吃到資料算完會馬上輸出到 console...

這部分他主要應該是模擬 console 比較底層的架構(用 prompt 模擬 buffer 吶)。

接下來要做的是用 textarea 吃 input,並直接 output 到網頁上。

一樣在 textarea 吃到沒有時,return null。

我在 stackoverflow 的 question edit 上得到了方法,並和@46號同學 trace 八萬行大 code 生出了以下 js 。

把結果丟到 stackoverflow 上成功釣到(目前三位)同學,結果沒人知道是我寫的。QQ

  • comment run(); in the end of emscripten
// in my emscript

// shouldRunNow refers to calling main(), not run().
var shouldRunNow = true;
if (Module['noInitialRun']) {
    shouldRunNow = false;
}
//run(); // << here
// {{POST_RUN_ADDITIONS}}
  • change windows.prompt() to self def function
//result = window.prompt('Input: ');
result = areaInput();
  • add the code below in your html file to activate run() in emscripten
<script>
var message;
var point = -1;
function getArea(){
    message = document.getElementById('input').value.split('\n');
}
function areaInput(){
    if(point >= message.length - 1){
        return null;
    }
    point += 1;
    return message[point];
}
function execEmscript(){
    window.console = {
        log: function(str){
            document.getElementById("output").value += "\n" + str;
        }
    }
    getArea();
    run();
}
</script>
  • remember io textareas in your html
<textarea id="input" cols="80" rows="30"></textarea>
<textarea id="output" cols="80" rows="30"></textarea>
  • and a button
<button onclick="execEmscript();">run</button>

 

Emscripten 重新載入 js

 

Emscripten run 過第一次後有些變數會改變,

不能再 run 第二次,這時就要 reload file,讓他重新宣告/設定變數。

但有個變數 reload 也不會被重設到,那就是 Module['calledRun']。

手動重新設定 Module['calledRun'] = undefined;

然後 reload js file

這些在我的作業裡都做好了,詳情可參照 SP HW4

會不會有同學看到這篇啊(笑

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

廢廢的好久沒發文了,發一下剛剛的新折騰成果。

本來是在知乎看到 MOC 很心動,想在 cygwin 上裝,

但 windows 不支援,官方說得很明白了,所以我也就不去鑽了 (彷彿看到 linuxer 在笑我)。

不行啊,我從久以前就很想在 terminal 放音樂了,不能隨便放棄啊,然後就去 GitHub 踅了一圈。

music terminal 一打,最多 star 的點一下,就有了。

原來是播放 youtube 啊,雖然跟我想的不一樣,不過好的,mpsyt 也好的

隨便看一下 readme ,發現 python 竟然有模塊專門在下載 youtube(好像吧),

然後它的播放器其實還是要外嵌,用 mplayer 或 mpv,我就載了 mpv 用 ln -s mpv.* /usr/bin,塞好位置。

然後就開始愉悅地聽 youtube 囉~

用 terminal  操作的感覺真不錯呢,mpv 的視窗品質也不賴~愉悅 (〃∀〃)

[ 更多操作內容請詳閱官方 README.md 或在軟體內指令行鍵入 h 取得更多訊息 ]

 

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

該是說一種嚮往吧,我對黑窗。

自幼看老爸操作黑窗,便能感受他到獨特的魅力,儘管 cmd 現在在我眼裡是如此軟弱。

(等到你會寫 bat 再來說嘴)

直到大學碰 linux,我才真正踏入其中。

一些基本指令, cd , mkdir 外,來談談其他東西吧。

vim

對它的認識是越來越深,但你不摸索他,他永遠只會停留在那。

我拖了一年,才開始用 vundle 裝插件, vimscript 不知甚麼時候會再碰。

scp

走 ssh 協定的 cp , 你就把他當 cp 用,比 ftp 好用。(我覺得)

是教授安利的。

tmux

學校教授一開始的裝 口畢 利器,有了他,可以切螢幕,很好裝 口畢

他過了一學期(印象中)才 (在同學逼問之下) 介紹我們這個東西。

asciinema

教授介紹的終端錄影小程式,很潮喔。

bc

書上看來的終端計算機,高精度的。

zip

成天混 TCL 難免嫌滑鼠慢,所以 zip 不錯。

rar

同 zip,還有 winrar 都在跳試用期很煩 

git

這也是不碰,永遠不會碰的東西。

試著 push 一些東西在 github 後,你會覺得網頁版上傳麻煩。

接著你就會使用他,然後 愛上他

hexo

這是可以讓你跟 github 加深感情 的東西,他可以利用你的 markdown 檔案快速生成網站,

然後 push 到 github 上成為你的一個小地盤。愛上 用 vim 寫 blog 吧。

ici

python 寫成的英文辭典,讓你連瀏覽器都不用打開。

搭配 vim 用 leader 鍵服用更佳,透過 pip 安裝。

看文檔一路通暢( 我還沒體驗到 )。

abbrev

敝人用 python 寫的縮寫參考器,用簡單的爬蟲給你縮寫單字建議,自我感覺良好,在命名變數時 * 格直升。

各種 compiler & interpreter - python , node , perl , ghc , ruby ,  racket(scheme) , gcc , g++ , java 等

程序猿玩耍必備玩具,集齊可獲得 toy collection master 稱號。

gdb

中低階程序猿配備,當你成為 master 便不再有 bug,不用 debug (口夷 ? ) 。

autojump

快速 cd,我之前試圖寫了類似的東西,後來發現這個便跪了。

之前還被吐槽說寫這個沒用,還不是有人寫了

fuck?

據說是個憤怒程序猿寫成的小程序,能訂正你打錯的指令,朋友介紹的。

fortune & cowsay

mint 的 game 資料夾底下的兩隻小程式。

起初我是不知道兩者 [的關聯 | 可以幹嘛 ],後來突然去找,發現可以組合成一隻說幹話的牛(或其他動物)。

wget & crul

兩大下載利器,在學 python 爬蟲前,都是用這個來小爬 漫畫  學習編程的資料,w3c 爬最多。

搭配 shell 批量下載,狂刷黑屏斷點續傳就是爽快。

( 你問我為何不下壓縮 ? 你以為每個網站都有提供嗎 被打 )

-- 不定期續更。

nobodyzxc 發表在 痞客邦 留言(0) 人氣()

1 23

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼