Ubuntu 製作 gif

本篇介紹如何在 Ubuntu 下製作 gif,
先安裝 imagemagick 套件

1
sudo apt-get install imagemagick

將圖片轉 gif 指令

1
2
3
convert -delay 30 -loop 0 *.JPG output.gif
# delay: 1 為 0.01 秒 (100 為 1秒)
# loop: 0 表示 infinite loop

合併多個 gif 指令

1
convert -delay 30 -loop 0 *.gif output.gif

將影片轉換為 gif 指令
參考如何在Ubuntu 16.04中創建GIF動圖

參考
如何在ubuntu中製作gif檔
如何在Ubuntu 16.04中創建GIF動圖

Ubuntu 縮小圖片

本篇介紹如何在 Ubuntu 縮小圖片,尤其是批次縮小圖片這種重複性工作,在 Ubuntu 下有個指令可以完成這些工作,
先安裝下列套件

1
sudo apt-get install imagemagick

方法一

這個方法縮小之後會生成一堆的 “small-*” 前綴字的文件名,
例如:原檔名為 IMG123.JPG, IMG124.JPG, IMG125.JPG
轉檔後檔名為 small-0.JPG, small-1.JPG, small-2.JPG

1
convert -resize 20%x20% ./*.JPG small

方法二 (建議使用, 保留原檔名)

這個方法是縮小圖片並保留原檔名, 以 small- 為前綴字,
例如:原檔名為 IMG123.JPG, IMG124.JPG, IMG125.JPG
轉檔後檔名為 small-IMG123.JPG, small-IMG124.JPG, small-IMG125.JPG

1
for img in `ls *.JPG`; do convert -resize 20%x20% $img small-$img; done

CMake 專案裡 include .cmake 檔案

本篇介紹在 CMake 專案裡 include .cmake 檔案,
在 CMakeLists.txt 同一層新建一個 cmake 資料夾, 把 abc.cmake 放到 cmake 資料夾底下,
在 CMakeLists.txt 新增以下幾行:

1
2
3
include(cmake/abc.cmake)
#set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
#find_package(abc)

之後再打 cmake 便會引入 abc.cmake 的 rules 了.

相關文章
撰寫 cmake 的 CMakeLists.txt
Windows 編譯 cmake-gui

Eclipse 索引(index)額外的定義

有時候程式碼裡頭有很多定義, 有些定義預設沒開(如下), Eclipse 不會對裡頭進行索引,

1
2
3
4
5
#ifdef USE_FEATURE_A
int feature_a(...) {
some = code(here);
}
#endif

所以這區塊的程式碼是沒有語法高亮的,
但如果是要寫(或閱讀) USE_FEATURE_A 裡面的 code 時,
開啟這個定義讓 Eclipse 去索引裡面的程式碼或使用自動完成功能, 會方便快速很多!!!

方法如下:
點選專案的 Properties -> C/C++ General -> Paths and Symbols 頁面,
在 Symbols 分頁 依照你的語言 (C/C++) 點選 Add 按鈕,
在 Name 欄位輸入 USE_FEATURE_A, 之後再用 Eclipse 索引一次就可以了.

另外, 如果是下列情況, 只需在 Value 欄位 輸入 1 即可.

1
2
3
4
5
#if (USE_FEATURE_A == 1)
int feature_a(...) {
some = code(here);
}
#endif

參考
How can I get Eclipse to index code inside #ifdef … #endif

相關主題
Eclipse 啟用 C++11 語法高亮與解析
Eclipse 常用快捷鍵

Linux 7z 檔案分割指令

本篇記錄一下 Linux 如何用 7zip 分割壓縮檔,7z 分割指令在某些情況下非常方便好用,例如:需要把大容量檔案塞進隨身碟,但因為隨身碟檔案格式是FAT32(單檔最大限制為4G),裡面又有其他東西暫時無法移出,或因為 Windows / macOS / Linux 通用的檔案系統關係只能選FAT32,
這時 Linux 就可以用 7z 分割壓縮檔的技巧將壓縮檔分割成若干個小檔案,之後在合併起來。
以下為 Linux 7z 分割壓縮檔的使用方式,將大檔案分割成若干個 2G 檔案,

1
$ 7z a -mx0 -v2048m <filename> <file_to_be_compressed/directory_to_be_compressed>

-mx0 : 壓縮等級,0 表示複製模式
-v2048m : 分割成 2048MB 檔案大小,要分割成 1G 的話就改成 1024MB

實際範例

1
2
3
$ date '+%Y-%m-%d %H:%M:%S' # 壓縮前印一下時間
$ 7z a -m0=lzma2 -mx=0 -t7z -v2048m archive.7z <file_to_be_compressed/directory_to_be_compressed>
$ date '+%Y-%m-%d %H:%M:%S' # 壓縮後印一下時間

其它參考
Splitting files with 7zip without compression
https://myotragusbalearicus.wordpress.com/2013/01/11/splitting-files-with-7zip-without-compression/)
How to Split a File Using 7-Zip | Web Hosting Hub
https://www.webhostinghub.com/help/learn/website/managing-files/split-file
Windows 7zip gui 分割檔案

其它相關文章推薦
Linux 7z 壓縮/解壓縮用法與範例
Linux 常用指令教學懶人包
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux cut 字串處理用法與範例
Linux grep/ack/ag 搜尋字串用法與範例

Ubuntu 關閉 UTC 時鐘,避免和 Windows 時間錯亂

本篇介紹在 Ubuntu 關閉 UTC 時鐘,避免 Ubuntu 和 Windows 時間不同而錯亂,
灌 Windows 和 Ubuntu 雙系統的人一定常常遇到”重開機另外一個作業系統時間就亂了”這個問題,透過以下指令解決這惱人問題吧!

關閉 UTC 時鐘,避免 Ubuntu 和 Windows 時間不同而錯亂

1
sudo timedatectl set-local-rtc 1 --adjust-system-clock

參考
帶著走的開發環境 - 把 Ubuntu 裝到 USB | Jayce 的共享記憶體
https://blog.jaycetyle.com/2018/03/ubuntu-on-usb/
How to fix time modification on your computer with dual boot (Windows 10 and Ubuntu 18.04) | Our Code World
https://ourcodeworld.com/articles/read/1063/how-to-fix-time-modification-on-your-computer-with-dual-boot-windows-10-and-ubuntu-18-04
windows - Clock time is off on dual boot - Ask Ubuntu
https://askubuntu.com/questions/169376/clock-time-is-off-on-dual-boot

將 Ubuntu Linux 安裝在 USB 隨身碟

本篇介紹如何把 Ubuntu Linux 安裝在 USB 隨身碟,以便可以在別台電腦安裝 Ubuntu。

工作環境: ubuntu 16.04
使用到的工具:

  • unetbootin 程式
  • ubuntu-16.04.5-desktop-amd64.iso (存檔測試失敗)
  • ubuntu-18.04.1-desktop-amd64.iso (存檔測試失敗)
  • usb 隨身碟一隻

使用 disk 工具 將 usb 格式化

選擇 FAT 格式

再使用 unetbootin 把 ubuntu live iso 複製到 usb 上,
製作出來的 usb 就可以拿去別台電腦安裝 ubuntu,
若要有存檔的功能 在 Space used to preserve files across reboots 這裡加上大小(MB)
這裡示範 4G, 所以填上 4096.
再選擇 USB Drive 的位置 (如果 usb 在 unetbootin 啟動後才插上, 請重新啟動 unetbootin, 它不會動態偵測)

最後就大功告成了, 趕緊用 USB 開機試試吧!

其他類似方法:Universal USB Installer
Ubuntu 安裝 WinUSB(WoeUSB)
ubuntu(16.04) 建立 windows 啟動 usb 隨身碟:woeusb
http://ada-dreamer.blogspot.com/2018/07/ubuntu-liveusb.html
https://blog.jaycetyle.com/2018/03/ubuntu-on-usb/

Eclipse 匯入 cmake 專案

本篇要介紹如何使用 cmake 的 CMakeLists.txt 產生 Eclipse 的 project 專案檔,接著就可以用 Eclipse 匯入 cmake 產生出來的 Makefile。

使用 cmake 的產生 Eclipse 的專案檔

(Eclipse 對 out-of-source build 支援比較差, 所以就不建立 build 資料夾了)
直接在專案目錄下輸入以下指令產生 Makefile

1
2
3
4
cmake . \
-G "Eclipse CDT4 - Unix Makefiles" \
-DCMAKE_ECLIPSE_VERSION=4.5 \
-DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE

File -> Import... -> C/C++ -> Existing Code as Makefile Project -> Next

選擇專案的 Makefile 所在位置的資料夾, 再依照需求選擇對應的 Toolchain
Browse... -> Linux GCC -> Finish

相關主題
Eclipse 啟用 C++11 語法高亮與解析
Eclipse 索引(index)額外的定義
Eclipse 常用快捷鍵

Eclipse 啟用 C++11 語法高亮與解析

本篇要介紹如何在 Eclipse 下啟用 C++11 的語法高亮解析,啟用後將可以跳至定義處以及不會出現紅色底線。

設定 Eclipse 的語法解析器

Window -> Preferences -> C/C++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Compiler Settings
Command to get compiler specs: 底下的 text box 加上 -std=c++11

原本是

1
${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"

加上以後變成如下

1
${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}" -std=c++11

修改前如下圖所示:

修改後如下圖所示:

CMake project 設定方式

使用 cmake 產生出 Eclipse 的專案檔
(Eclipse 對 out-of-source build 支援比較差, 所以就不建立 build 資料夾了)
直接在專案目錄下輸入以下指令產生 Makefile

1
2
3
4
cmake . \
-G "Eclipse CDT4 - Unix Makefiles" \
-DCMAKE_ECLIPSE_VERSION=4.5 \
-DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE

之後再 Eclipse 使用 import 的方式匯入專案
對專案右鍵選擇 Properties -> C/C++ General -> Preprocessor Include Paths, Marcos etc. -> Providers
啟用 CDT GCC Build-in Compiler Settings 且把它移到高過於 Contributed PathEntry Containers (重要)

修改後如下圖所示:

最後一步

重新產生索引檔, Project -> C/C++ Index -> Rebuild.

參考
c++ - How to enable C++11/C++0x support in Eclipse CDT? - Stack Overflow
https://stackoverflow.com/questions/9131763/how-to-enable-c11-c0x-support-in-eclipse-cdt/24561615

相關主題
Eclipse 匯入 cmake 專案
Eclipse 索引(index)額外的定義
Eclipse 常用快捷鍵

Python 使用 matplotlib 畫圖

本篇要介紹如何使用 python 搭配 matplotlib 模組將資料數據用圖形的方式呈現出來,用 matplotlib 來 plot 畫圖算是數據分析很常用到的輔助工具, 一定要學會,之後便用 python 行雲流水!

使用範例

下面為基本的畫圖範例,一組資料是水平的時間資料,另外一組資料是數據資料,
之後就可以使用 plot() 畫出這些數據,grid()是背景顯示格子狀,show() 是將圖顯示出來。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt

def main():
time = [1, 2, 3, 4]
data = [1, 4, 9, 16]
plt.plot(time, data, label='x')
plt.xlabel('time [second]')
plt.grid()
plt.legend()
plt.show()

pass

if __name__ == '__main__':
main()

畫出來的結果如下圖:

相關主題
Python 使用 numpy 讀取 csv 資料再畫圖