跳到主要內容

發表文章

輸入及轉換 Unicode 編碼

如何輸入羅馬數字?不管大寫的數字 ,或者小寫的數字,不知道 Unicode 編碼的人總是會以輸入英文字母 i or I 來替代,即輸入 i, ii, iii, or I, II, III,或許他們不會面臨要輸入 4 以上的羅馬數字,這樣的做法就可以在人類的視覺誤差中暫時瞞騙過關,然而,這樣的作法卻帶來資訊系統不可見的人為問題。這篇文章將描述如何輸入正確的羅馬數字?如何搜尋 Unicode 編碼?以及如何輸入 Unicode 編碼。關於 Unicode 編碼輸入與顯示是一個相當複雜的議題,這篇文章僅針對在 Windows 作業系統中的應用程式如何輸入與搜尋 Unicode 編碼?如何在 Unicode 編碼與對應字元之間做轉換?不會涉及其他的議題;若依照下面描述的輸入方式輸入 Unicode 編碼,不保證能完全符合你/妳所使用個人電腦系統的環境,請再參考相關的文章來解決輸入與顯示 Unicode 編碼的問題。 Unicode 編碼的輸入方式 在 Wiki 的文件 中說明如何在不同環境下輸入特殊字元的 Unicode 編碼,在 Windows 作業系統中輸入 Unicode 編碼的方式如下: Microsoft Word or Wordpad:先輸入 unicode 的編碼,再按下 Alt + x,例如,在 word 中輸入 1f370,然後按下 Alt+x,就會顯示 🍰( &#x1f370)的字元 其他 Microsoft 所有應用程式:應用程式包括 Microsoft PowerPoint, Excel, VS Code 等程式,且要支援 Unicode 編碼的版本,都可以使用注音輸入法來輸入 Unicode 編碼;首先切換到注音輸入法的中文輸入模式,然後按下~鍵(Esc 下方的鍵) + u + Unicode 編碼,特別要注意輸入的數字是鍵盤上方的數字鍵,不可以使用 Number Pad 的數字鍵。 查詢 Unicode 編碼 Unicode編碼的對應字元可以連結到 The Unicode Consortium 的 Code Charts 網站,在網站中輸入你/妳想要字元的 Unicode 編碼,如此就可以找到這個 Unicode 編碼的字元,問題是:我們通常是心中有字元的圖像,或者是要先看到字元的樣子,才知道我們要使用...

PDB Debug Info on Windows and DragonEgg

最近一期的 LLVM Weekly 的文章內容提到2則新聞,一則是 LLVM on Windows now supports PDB debug info ,另一則是 DragonEgg has been updated to work with GCC 8.x and LLVM 6.x 。 第一則所提到 PDB 的這個專有名詞, LLVM 的 The PDB File Format 這一篇文章有詳細的介紹, llvm-pdbutil 的指令 如下: Have clang-cl invoke lld automatically clang-cl -fuse-ld=lld -Z7 -MTd hello.cpp Invoke clang-cl and lld separately. clang-cl -c -Z7 -MTd -o hello.obj hello.cpp lld-link -debug hello.obj 在 LLVM Blog 寫道: And to leave you with something to get you even more excited for the future, it's worth reiterating that all of this is done without a dependency on any windows specific api, dll, or library.  It's 100% portable.  Do I hear cross-compilation?   對於在 Windows 系統開發的一些程式碼,可以獨立出來,達到真正跨平台的目標。 第二則是 大陸武漢科大 Leslie Zhai 將 DragonEgg 移植 到 GCC 8.x and LLVM 6.x 版本,他說: I am migrating DragonEgg to GCC v8.x and LLVM v6.x just for fun and learn . Clang 已經相當成熟, 而且對於 Fortran language 支援 LLVM 已經有前端的 flang 專案 可以使用,有人就質疑:為何還需要維護 D...

Buck - a new build system

各種程式語言有不同 支持 的 build tools,例如 Javascript 的 glup, grunt, ..., etc. Java 的 ant, maven, gradle, ..., etc. C/C++ 常用的 make, cmake, ..., etc. 而 Buck 是一個新的 build tools ,主要提供一些主流的語言,包括 C/C++, Python, Java, D, React Native, Android, OCaml,特別的它採用的幾個重要的技術: Hashing: 版本控制時,使用 Hashing 來處理,在專案開發階段,不斷地測試是必然的,而僅有少部分需要再度 rebuild,使用 Hashing 來處理差異是很聰明的作法 Parallel: 在 multi-core 的架構下的軟體,支援 Parallel 可以加快 build 的處理速度 Buck 是 facebook 所開發的,是 open source code 的 project,支援不同的作業系統,目前正在開發大型專案的程式設計師,不妨可以一試,看看是否有加快 build 的速度。

發生在 C++ Standard Library 的恐怖事件

在 Twitter 上看到一則 " The Horror in the Standard Library " 這麼聳動的標題,不改好奇的個性,當然要讀他到底在說些什麼?摘錄文章幾個要點: We tried valgrind , dmalloc , the Microsoft Visual Studio memory profiler (yes we tried running it in Windows via an elaborate shim just to use this), and glibc's built-in memory tracing . Nothing worked. It's leaking but it's not. It's leaking but the debugger says no memory was lost.  The default allocator in the standard C library is designed for an acceptable trade-off between memory use and performance under ordinary work loads, but it doesn't always perform ideally in aggressively multithreaded or very high throughput applications. Luckily there are very highly regarded drop-in replacements like jemalloc . Trembling with anticipation that maybe... just maybe... I'd found the answer... I dropped in jemalloc and ran the test. We now have code in production (in ZeroTier Central) that force disables libstdc++ allocation pools via the above environm...

CppCast 的 News

在 CppCast News 當中有兩則訊息: The C++ Annotations, a free up-to-date learners book/reference manual Choosing "Some C++" Over C 第一則是一本古老以前就發表在網路上的 C++ 書籍,內容隨著 C++ 標準不斷的更新,不會尚失新語法的一本C++書籍。 第二則內容簡略、快速的瀏覽以後,如同作者的第一段話:maybe I should have called this “C++ for Lovers of C,”,內容利用 curl, one of the most popular HTTP client libraries 當作例子,說明 C 語言在處理複雜問題時的困境,如果可以把 C 當作底層,當作 subset ,而對 C++ 作些許的限制,是這一篇文章所討論的問題。

推動資訊教育的省思

最近國內教育單位積極想要推動所謂資訊教育,特別提到國、中學的學生希望能學習程式設計的邏輯思考能力,報紙說,資訊的師資是足夠可以應付國、中學課綱的轉變,或許有人力可以上台教導國、中學的學生,也當然要有人力上台教程式設計,重要的是:能夠提升多少學生程式設計的能力呢? C++ father: B Stroustrup 於 January 201 在 CACM 發表 What should we teach software developers? Why? 的這篇文章中,指出學界與工業界之間脫鉤的問題;國外對於程式設計邏輯思考能力的推動,很早以前就已經開始實施,且從小學就教育學生,一系列的紮實訓練,造就許多實務型的大學生,反觀國內,資訊相關科系畢業的大學生,有多少人會寫程式?曾經遇到一位國立科技大學資訊相關科系的畢業生,就連 簡單的HTML 語法都不會,僅會寫 Microsoft 內建的 Macro,又學校內僅會惡鬥,只管誰是谁的人?哪有人會管學生學習的成效,教出僅會寫 Microsoft Macro 就洋洋得意、趾高氣揚的這樣學生,是正常的結果。諸不知一山還有一山高,想想 Eric Niebler 在他自己的網站寫著:Judge me by my C++, not my WordPress 這句話吧。 唉,感嘆! 這篇文章值得國內教育單位深思。

Visual Studio 對於 C++ 的 Debugging and Diagnostics

Visual C++ Team Blog 發表  C++ Debugging and Diagnostics 文章,內容包括: Breakpoints and control flow Data inspection and visualization Diagnostic tools and performance profiling Debugging processes and devices Multi-threaded debugging Edit and continue Other resources Visual studio 最迷人的地方就是 Debugging 的功能,最近隨著 C++ 標準的更新,以及 C++ 標準協會的 Chairman -- Herb Sutter任職在 Microsoft,Visual Studio 對於 C++ 的支援新標準的程度相當高,是在 Windows OS 平台開發 C++14 or C++17 程式碼可選擇的一種 IDE。  

kotlin:一個跨平台的程式語言

從 LLVM Weekly 中的 [1] 得知 JetBrains 的 kotlin-nativ e 這個專案,主要在致力於不需要 VM 的跨平台程式,它是以 LLVM 作為背後基礎,可以轉換成不同平台[1]: Kotlin/Native uses the LLVM compiler infrastructure to generate machine code. In this preview, we support the following target platforms : Mac OS X 10.10 and later (x86-64) x86-64 Ubuntu Linux (14.04, 16.04 and later), other Linux flavours may work as well Apple iOS (arm64), cross-compiled on MacOS X host Raspberry Pi, cross-compiled on Linux host Kotlin/Native 專案是新的專案,許多程式碼都尚未完成,不過是一個可以期待的專案。 kotlin 是什麼呢?在 kotlin 官方網站 標題寫著: Statically typed programming language for the JVM, Android and the browser kotlin 這個語言是由 JetBrains 這家公司已 Open Source 的方式所開發的專案,這家公司對自己本身而言,並不陌生,只是 kotlin 這個語言,卻是今天才知道,結合 OO 與 functional 語言的特性,似乎相當吸引人;倒是讓自己覺得,在資訊科學的領域,技術、知識、語言等,不斷的推陳出新,不須要對於任何新技術或語言都能夠了解,唯有精通某一種技術、語言的人,才能生存於這個資訊科學的領域當中。 ps: JetBrains 的 IntelliJ IDEA Community Edition 可以從 JetBrains 網站下載 ------------------------------------- [1] Kotlin/Native Tech Preview: Kotlin without a VM...

用 reveal.js 撰寫 slide 的紀錄

採用 HTML Slide 已經多年,對於 reveal.js 這個 Framework 來撰寫 slide 已經很容易上手,最近某一門課程需要使用 Math 的公式,想使用 LaTeX 語法,原本想使用 slidify 這個整體性的開發環境來處理,不過, slidify 內部的 reveal.js framework 所產出的 slide 樣式卻跑得很離譜,沒有時間,只好再回到從 reveal.js github 網站所下載的原始程式碼來製作上課的 slides,這段期間, reveal.js 的套件也更新的版本,隨著版本的更新,這次也同時更新新的原始程式碼,另外,也對於以前想要調整的部分及其他的設定做了一些修改,修改的紀錄如下: 原始程式碼不再做內部的修改,直接下載 reveal.js 原始ˇ程式碼,修改成 reveal.js.tw 目錄,然後存到 slides 的目錄中 在 css 目錄中新增 style.css 來修正字型及英文字的效果,例如 font-variant:small-caps; 採用 markdown language 來撰寫 slide image 使用 <img> 來處理,並且在個別的 img 標籤內設定 margin-left: 20px 來處理沒有邊界的問題 以後其他的設定,全部都設定在 style.css 內部,不要再修改原始程式碼

live code in blog

KLIPSE 是一個可以產生互動式程式碼的網頁套件,換言之,在網頁上顯示你的程式碼,可以讓觀賞者修改並且輸出程式碼的結果。與其他顯示原始程式碼的 javascript 套件不同之處在於 live 與 interactive,live 的功能可以即時顯示程式碼的結果,interactive 讓使用者可以修改,因此,使用者可以在網頁、部落格上面修改程式碼,並且即時顯示修改後的結果。實際安裝測試,確實可以達到上面所提到的效果。 在 KLIPSE 文件有一段話: In order to integrate the klipse plugin on a blog, library documentation or any other web page, add the following javascript tag at the end of the page body according to the language of the code snippets: 必須要安裝在網頁 body 標籤底部,實際測試時,只需將下列這一段程式碼放到最後:   < script src = " https://storage.googleapis.com/app.klipse.tech/plugin_prod/js/klipse_plugin.min.js " ></ script > 另外兩個重要連結為: < link rel = " stylesheet " type = " text/css " href = " https://storage.googleapis.com/app.klipse.tech/css/codemirror.css " > < script > window . klipse_settings = { selector_eval_js : ' .language-klipse-cpp ' , // css selector for the html elements you want to klipsify }; </...

Using Clang++ in CMD

LLVM Project 的 Clang++ 無法使用 GCC 的 c++ standard library,在 Johannes Peter 的 Installing clang++ to compile and link on Windows : Part 2 文章介紹如何在 command line 中可以 include <iostream> 來 compile C++ 程式碼,主要是要使用文章所提及的 clang 3.7.0 (release candidate 3) 64 bit 這個版本,這個版本的 clang++ 是 Target: x86_64-w64-windows-gnu,注意:不是目前3.9 for windows-msvc 版,因此,下載時需要注意版本。依照文章的設定步驟,可以在 cmd 中編譯 C++ 程式,在 stackOverflow 的問題 ,是相同的問題,如果需要更新的版本,可以選擇使用 clang-cl 或者 msys 環境下的設定方式。 設定的注意事項: 需要下載 文章內連結的 mingw64 版本,放置在 c:\ 中 如果不需要編譯 win32 版本的程式,不需要下鮺 mingw32 版本 需要下載 clang 3.7.0 (release candidate 3) 64 bit 這個版本 設定所有的環境變數 執行 setgcc64.bat 檔 切換到 workspace 執行 clang++ main.cpp -o main.exe -std=c++14

convert fonts awesome to png

slidify 是一種早期的 slide HTML Framework,這個 framework 原始程式碼的 notebook.css 引用的許多 gif 圖檔作為 background, list icon 等,原本是要將 list icon 改用 fonts awesome 的字型來代用,需要做一些設定,設定的方法可以參考 Use Font Awesome Icons in CSS 這一則的說明 ,最後的 solution 是將 font awesome 轉成 png,作者有新版的軟體在 https://github.com/Pythonity/icon-font-to-png ,但是,安裝 pillow 卻無法成功,只好作罷。 在 google 中再找到 Font-Awesome-SVG-PN ,其中 for Windows 的連結失效,可以在 Open Source Software and Windows 32-bit 下載,網站也有使用說明。 ps: 今天又測試 pip install pillow, pip install icon_font_to_png 卻可以 work

Installing R Markdown

R Markdown 是 R 軟體的環境產生文件的一個 Framework ,主要是結合 pandoc 與 markdown 語法來產生,如果使用 R Studio 來開發 R 程式碼,只要在 R 環境中 install.packages('rmarkdown') 即可撰寫 R Markdown 來產生文件,如果不是在 R Studio 環境,可能需要自己個別安裝縮需要的套件來能產出各種格式的文件,底下將描述個別安裝套件的過程: 安裝 R Markdown 開發環境,逼必須要先安裝 R 軟體,目前的版本是 3.3.2 版,並且需要安裝 pandoc 套件,請自行到 pandoc 網站下鮺及安裝。 安裝完成這兩個軟體以後,則開啟 R環境,在 R  環境中輸入: 安裝 R Markdown 套件: >install.packages('rmarkdown') 安裝 viridis 套件: >install.packages('viridis') #範例檔會到這個套件 下載 R Markdown 的 1- example.Rmd 範例檔案 建立及切換 workspace : >dir.create('rmarkdown') and >setwd('rmarkdown') Load rmarkdown library: >library(rmarkdown) render doc: >render('1-example.Rmd') Open 1-example.html with Browser install.packages('revealjs')  # for reveal.js html slide framework 安裝完成就可以產出各種格式的文件,從網站中的介紹,可以產出 slide 的種類有: beamer_presentation - PDF presentations with beamer ioslides_presentation - HTML presentations with ioslides slidy_presentation - HTML prese...

Making slide with Slidify

update: slidify 原作者的套件對於 utf-8 編碼有問題,無法產生 utf-8 編輯的 index.Rmd 檔案,參考[5] 的文件,使用他的版本可以解決中文 utf-8 的問題。 >require(devtools) >devtools::install_github('junjiemao/slidify') ------------------------------------------------ 以前使用 reveal.js 製作 Slides,最近使用 deck.js , Rémi Emonet 加入了一些 extension,這些都是使用 HTML or Markdown 來寫 slide。另外, Slidify 是結合 R 環境,使用 R Markdown 來撰寫 slide 的套件,在它自己網站上寫著: Slidify: Reproducible HTML Slides from R Markdown Slidify 內含許多 HTML5 Slide Framework: Google IO2012 DeckJS RevealJS FlowtimeJS ImpressJS Landslide DZSlides Shower Showoff FathomJS HTML5Slides Slideous 以上各種 slide framework 的範例可以在 Ramnath Vaidyanathan 作者 的 GitHub repo .中找到實際的例子。 安裝步驟: 安裝 devtools,R Console 中輸入: install.packages("devtools") 載入 devtools 套件:require(devtools) install stringi packages: >install.packages("stringi") install magrttr packages: > install.packages("magrittr") 安裝 slidify: >install_github('ramnathv/slidify...

製作 FreeBSD 11-release Boot USB disk

在網路上有許多工具可以製作 USB 的 Boot disk,包括 UNetbootin, Win32 Disk Imager , Rufus 等軟體,FreeBSD 官方網站的文件是使用 Win32 Disk Imager,不過,測試過 FreeBSD-11.0-RELEASE-i386-memstick.img , FreeBSD-11.0-RELEASE-i386-mini-memstick.img , 這兩個 i386 的 image 檔都無法啟動,使用 Rufus 也無法成功。下載 FreeBSD-11.0-RELEASE-i386-dvd1.iso 檔改用 UNetbooin 將 ISO 檔燒到 USB Disk 中,製作的時間很長,最後也是無法開機;拿 10.3, 12-current 版的 i386 image 也是無法成功,放棄 i386 的 image,改用 amd 64 的 image 使用 Rufus 製作,一次就成功。 整個製作的過程,不清楚是否是 i386 的 image 檔有問題?還是目前所使用的 laptop 都是 x64 的硬體,所以要選擇 amd 64 的 kernel 來可以製作 USB Disk? 總結測試的結果: Rufus 速度快,軟體持續更新、維護,有可攜式的版本,在 GitHub 也有 Source Code ,是製作 boot stick disk 較佳的 stick 軟體,但是,不支援 FreeBSD ISO 檔的格式,所以無法支援製作 ISO 檔 Win Disk Imager 速度也可以,從 2104 年以來都沒有再更新,軟體有些老舊。 UNetbootin 較適用於 Linux 系統,對於 FreeBSD 支援較不足。 使用 Rufus 可攜式版本製作 FreeBSD 11-release 的步驟: 下載 FreeBSD-11.0-RELEASE-amd64-memstick.img and Rufus 2.11 Portable  執行 Rufus 程式,開啟 Rufus 畫面: 點選 DD 及 載入 .img 檔,按下「 執行」按鈕 完成後,按下「關閉」按鈕

BDD for C++ Projects

Arne Mertz 在 Simplify C++ 中寫了一則 BDD for C++ Projects – With Python and Behave 的文章,使用 agile 軟體開發技術以及 Python language 來實作,有趣的技術。 BDD 是 Behavior Driven Development 的縮寫, BDD 網站 寫著:Behavior-driven development (or BDD) is an agile software development technique that encourages collaboration between developers, QA and non-technical or business participants in a software project.

Psyche-c and uThread

在 LLVM Weekly-#154 中得知2則有關於 C 的訊息,一則是 generating a C interface from C++ code using Clang's LibTooling ,另一則是 Psyche-c is an interesting project, providing a compiler for incomplete C code,相當有趣。 第一則的 generating a C interface from C++ code using Clang's LibTooling 是開發 uThread (uThreads: Concurrent User Threads in C++(and C))作者表的文章,如何使用 LibTooling 從 C++ source code 來產出 C interface,值得一讀及實作的文章。另外, uThread 是一個很好用的 source code。 第二則是 Psyche-c is an interesting project, providing a compiler for incomplete C code,相當有趣,顛覆 Compiling Language 的思維,不過,使用 LLVM 應該是可以做到才是。

Slide template for LibreOffice Impress

網路上的 Slide template 大都是 Power Point 的 templates,LibreOffice or OpenOffice 的 templates 少很多,在 Github 中有人 收集了一些 Impress 的 template ,以後需要 Impress 的 templates 可以到這個網站來下載。 另外,有一個 提供 Power Point 的 templates 的網站 ,也提供一些 Impress 的 templates ,網站上有許多不錯的 pptx  templates,如果往後需要寫 .pptx,也可以到這裡來下載。

VB 真的那麼好嗎?

為了要上空專學生暑修課程:程式設計 VB,想要找一下這門課程的大鋼,了解之前開設課程主要的上課內容是什麼?無意中看到一篇: VB語言比C還要好 ,這個標題在我心中實在是太搶眼,所以查看作者的學經歷,非正統資訊科學背景的博士:台大海洋研究所博士畢業,學歷相當高,經歷也非常豐富:台灣首府大學的設計學院院長;不過, VB語言比C還要好 這一篇文章的內容,有許多論點已經有許多人提出不同的看法,也掀起小小的論戰,更反映了國內非正統與正統資訊科學之間看法的衝突。如果大家不要硬把自己熟悉的語言要說成最好的語言,就如同「 不同的思維下的程式語言與環境 」與「 為何要 modern C++? 」所談到的哲學道理是一樣的,比較能客觀的接受其他別人的看法與觀點。 這篇文章提出許多比較主觀的看法,或許 VB 有簡易、易懂的特性,讓教育工作者可以拿來教育初學者,或是想要入門資訊科學的入門者;又或者說,讓非資訊科學本科系的學生、比較沒有興趣的入門者,提供入門學習的一種語言,提高這些人對於程式語言的興趣,倒是一種可以做的選擇。但是,在現今多如牛毛的程式語言當中,不乏更簡易、更適合入門的程式語言,例如:國內多數教導國小學童程式設計的 scratch、 MIT 主推的 Python 程式語言 等,真的 VB 那麼好嗎?適合當作入門的程式語言嗎?值得商榷。在此篇文中提到可以處理影像辨識的問題,確實可以處理一些影像的資料,其實 Javascript, Perl, Python, etc, ... 等等語言也都可以做到,不是嗎?又影像處理需要用到 FFT 時,那要如何做呢?確實 有 for VB 的 code 可以套用,但是速度真的可以嗎?引用 FFTW 的一句話: Our benchmarks , performed on on a variety of platforms, show that FFTW's performance is typically superior to that of other publicly available FFT software, and is even competitive with vendor-tuned codes. 講話必須要有證據,FFTW benchmarks 的證據就是最好的說明,似乎身為高等教育的教授們,不能固守在...

Cevelop IDE

在 Twitte 上看到 Peter Sommerlad Professor 在 ACCU 2016 Conference 中 使用 Cevelop IDE Demo 'Visualize Template Instantiations - Understand your Template Bugs',影片的網址如下: Visualize Template Instantiations - Understand your Template Bugs Using Units, Qantities, and Dimensions in C++14 在教學上, Cevelop IDE 確實較容易讓初學者了解到 Function, Template 的運作,不過,在這 IDE 多如牛毛的今天,哪一個最合適?Vim, Emacs, CodeBlocks, Visual Studio, Qt, CDT, etc, ...這個問題與 選擇 Programming Language 是一樣的哲學:學習、熟悉及專注在一種最適合你/妳自己或工作的開發環境即可。