2019年10月21日 星期一

ffmpeg串接影像檔

使用ffmpeg將多個影像檔串成一個影像檔
先準備清單檔
list.txt
file1.mp4
file2.mp4

使用ffmpeg concat
ffmpeg -f concat -safe 0 -i list.txt -c copy out.mp4



使用avconv
安裝
sudo apt-get install libav-tools

avconv -i concat:file1.mp4\|file2.mp4 -c copy out.mp4
(但不知為何轉出來的影像都是黑畫面且長度與file2.mp4同)

2017年6月21日 星期三

use docker to build android 6

在ubuntu 14.04或16.04環境下使用docker編譯android 6

首先安裝docker

sudo apt-get install apt-transport-https
sudo apt-get install ca-certificates
sudo apt-get install curl
sudo apt-get install software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce

建立Dockerfile

建立名為"Dockerfile"的檔案其內容如下
FROM ubuntu:14.04

ENV DEBIAN_FRONTEND noninteractive
ENV USER root

RUN apt-get update

# install required packages reference android source web
RUN apt-get install -qq -y git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev
RUN apt-get install -qq -y gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

# install jdk for build android 6
RUN apt-get install -qq -y openjdk-7-jdk

# install required tools for make
RUN apt-get install -qq -y python bc

# install other tools for user
RUN apt-get install -qq -y vim ctags cscope tig

建立docker image

由Dockerfiler建立image, -t 指定image的名稱與tag, 注意最後有"."
sudo docker build -t "build_android:v1" .
-t 參數指定image名稱與版本, build_android為image的名稱, v1為版本

查看image id

sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
build_android       v1                  bdd8752c9904        3 hours ago         724 MB
ubuntu              14.04               4a2820e686c4        7 hours ago         188 MB
記住image id "bdd8752c9904"

啟動容器container

由image啟動新的容器進入bush, 並掛載/host_dir目錄至容器的/client_dir位置
sudo docker run -v /host_dir:/client_dir -it image_id /bin/bash
image_id 為剛剛查看的bdd8752c9904
啟動成功後即進入容器以root身份在bash底下工作

編譯android

在容器環境中/client_dir與host的/host_dir是共通的, 在/host_dir若有存放android source code的目錄例如/host_dir/android_source, 則可在容器中進入/client_dir/android_source目錄進行build android的動作

終止容器

只要在bash底下執行exit即終止
exit
當終止容器回到host時, 可到/host_dir/android_source中取出編譯完android後產出的檔案

進入容器

容器終止後並未消失, 可再次進入, 首先查看終止中的容器
sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
f6ada6575153        bdd8752c9904        "/bin/bash"         3 hours ago         Exited (0) About an hour ago                       elated_panini
記住container id "f6ada6575153"

進入容器f6ada6575153
sudo docker start -ia f6ada6575153
這樣就可以再次進入容器編譯android了

刪除容器

要刪除的容器須在終止狀態下
sudo docker rm container_id

刪除image

要刪除的image必須沒有被容器或其它image使用
sudo docker rm image_id


image相關指令

sudo docker build -t "NAME:TAG" .    由Dockerfiler建立image, -t 指定image的名稱與tag, 注意最後有"." 
sudo docker images           列出所有images
sudo docker rmi              刪除image
sudo docker save -o ubuntu_14.04.tar ubuntu:14.04    將映像檔從本地倉庫存成檔案
sudo docker load --input ubuntu_14.04.tar            將映像檔檔案載入至本地倉庫

container相關指令

sudo docker container ls     列出執行中的容器
sudo docker ps -a            列出已終止的容器
sudo docker start -ia container_id  啟動終止的容器
sudo docker run -v /host_dir:/client_dir -it image_id /bin/bash   由image啟動新的容器進入bush,並掛載/host_dir目錄至容器的/client_dir位置

2016年10月11日 星期二

常用MediaWiki語法筆記

以下內容從wiki頁面複製來的,所以移除內部連結.
此頁提供編輯MediaWiki時較常用到的語法,完整資訊請參考wiki官網中的User help

目錄

 [隱藏] 
  • 1建立頁面
  • 2連結某頁面
  • 3連結至錨點
  • 4換行
  • 5清單
  • 6表格
  • 7分類
  • 8上傳檔案
  • 9移動頁面
  • 10重新導向
  • 11模板
  • 12Magic words
  • 13腳註
  • 14Table Of Contents

建立頁面

在搜尋列輸入要新建的頁面名稱,
若該頁面不存在,則會出現於此 Wiki 建立頁面"頁面名稱",
點擊該"頁面名稱"連結即進入遍及該頁面的畫面,
編輯完按建立則可.

連結某頁面

  • 內部連結
頁面名稱於雙中括號內
[[首頁]] 結果為->首頁

  • 內部連結變更顯示名稱
頁面名稱與變更名稱於雙中括號內中間加|符號
[[首頁|回家]] 結果為->回家

  • 外部連結
直接輸入網址
https://mediawiki.org 結果為->https://mediawiki.org

  • 外部連結變更顯示名稱
頁面名稱與變更名稱於中括號內
[https://mediawiki.org MediaWiki] 結果為->MediaWiki

連結至錨點

錨點就像書籤,可在文件中某處新增錨點,而後在文件其它地方或是其它頁面都可新增跳至該錨點的連結
  • 建立錨點
使用html tag div語法將id指定為錨點名稱,內容為錨點顯示的文字
<div id="NameOfAnchorHere">這是錨點</div>
結果為->
這是錨點

  • 連結至同頁錨點
#字號加錨點名稱於雙中括號內
[[#NameOfAnchorHere]] 結果為->#NameOfAnchorHere 點擊會跳至錨點

  • 其它頁面連結至錨點
錨點頁面名稱加#字號加錨點名稱於雙中括號內
[[Wiki語法教學#NameOfAnchorHere]] 結果為->Wiki語法教學#NameOfAnchorHere 在其它頁面點擊會跳至此頁錨點

換行

因使用html語法所以內文單行的換行符號在顯示時並不會換行,可用以下幾種方式達到換行
  • 換行標籤
使用換行標籤 <br />或<br>
行1<br />
行2<br>
行3
結果如下
行1
行2
行3
缺點:每行都要加比較麻煩,適用少量文字時
優點:編輯篇幅較小

  • 空白行
在要換行文字底下再多一行空白
行1
(空白行)
行2
(空白行)
行3
結果如下
行1
行2
行3
缺點:因為要多空白行,所以編輯的篇幅較大
優點:簡易快速

  • <pre>標籤
<pre>標籤將保留其中的文字格式包含換行等
<pre>
行1
行2
行3
</pre>
結果如下
行1
行2
行3
缺點:會套用<pre>標籤的樣式,但可修改
優點:適合大量內容時

清單

  • 無編號清單
用*符號加一個空白開頭
用兩個*符號加一個空白開頭則內縮一層
* 項目a
* 項目b
** 項目b1
** 項目b2
結果如下
  • 項目a
  • 項目b
    • 項目b1
    • 項目b2

  • 有編號清單
用#符號加一個空白開頭
用兩個#符號加一個空白開頭則內縮一層
# 項目a
# 項目b
## 項目b1
## 項目b2
結果如下
  1. 項目a
  2. 項目b
    1. 項目b1
    2. 項目b2

表格

  • 基本表格
符號說明
{|table start, required
|+table caption, optional; only between table start and table row
|-table row, optional on first row—wiki engine assumes the first row
!table header cell, optional. Consecutive table header cells may be added on same line separated by double marks (!!) or start on new lines, each with its own single mark (!).
|table data cell, optional. Consecutive table data cells may be added on same line separated by double marks (||) or start on new lines, each with its own single mark (|).
|}table end, required
{|後可接樣式
{|class="wikitable"
|(0,0)Orange
|(1,0)Apple
|-
|(0,1)Bread
|(1,1)Pie
|-
|(0,2)Butter
|(1,2)Ice cream
|}
結果如下
(0,0)Orange(1,0)Apple
(0,1)Bread(1,1)Pie
(0,2)Butter(1,2)Ice cream
  • 變更內容樣式表格
可針對整個表格或元素變更其樣式
變更整個表格
{|class="wikitable" style="color: red"
|(0,0)Orange
|(1,0)Apple
|-
|(0,1)Bread
|(1,1)Pie
|-
|(0,2)Butter
|(1,2)Ice cream
|}
結果如下
(0,0)Orange(1,0)Apple
(0,1)Bread(1,1)Pie
(0,2)Butter(1,2)Ice cream
變更單一元素
{|class="wikitable"
|(0,0)Orange
|style="color: red"|(1,0)Apple
|-
|(0,1)Bread
|(1,1)Pie
|-
|(0,2)Butter
|(1,2)Ice cream
|}
結果如下
(0,0)Orange(1,0)Apple
(0,1)Bread(1,1)Pie
(0,2)Butter(1,2)Ice cream

分類

  • 將頁面加入分類
Category:分類名稱於兩個中括號內
[[Category:Teaching]]
結果為將該頁面加入Teaching分類,會在頁面最底下看到所屬的分類
之後也可在Teaching分類頁面中看到該頁面以及其它同屬Teaching分類的頁面有哪些

  • 將頁面加入多個分類
重複加入分類即可
[[Category:Teaching]]
[[Category:test]]
結果為該頁面加入Teaching與test分類

上傳檔案

  • 上傳檔案並使用
在首頁的左邊sidebar中有上傳檔案的頁面連結
該頁面有說明如何上傳與使用檔案

移動頁面

  • 更換頁面名稱
移動頁面就是更換頁面名稱
wiki網站會執行以下三個動作
  1. 將頁面A改名為頁面B
  2. 將頁面A的歷史紀錄複製給頁面B
  3. 產生新的頁面A並重新導向B
產生新的頁面A是為了讓原本在其它頁面連到頁面A的連結不會失去連結對象,而可先連到A在導向B
若在移動頁面的時取消勾選 Leave a redirect behind,則可取消產生新的頁面A動作,再手動修改原本有連到頁面A的頁面改連到頁面B
  • 刪除頁面
目前只有管理者有刪除頁面的權限

重新導向

此功能是當使用者瀏覽頁面A時會自動導向頁面B給使用者瀏覽
They can be useful if a particular article is referred to by multiple names, or has alternative punctuation, capitalization or spellings.
  • 建立重新導向
在頁面A加入
#REDIRECT [[頁面B]]
使用時須注意
#前不能有空白或其它文字
編輯後請預覽,若重新導向的頁面不存在則會顯示紅色頁面B,請務必修正

模板

當有特定內容需被多個頁面使用時,則可建立該內容的模板給其它頁面使用,而不用在各個頁面都加入該內容,
當此特定內容有變更時,也只需要修改模板即可套用到所有使用此模板的頁面,而不用修改各個頁面
  • 建立模板
建立以模板命名空間Template:加模板頁面名稱的頁面
以建立"常用頁面"模板為例
在搜尋列輸入
Template:常用頁面
若該頁面未被建立,則可建立該模板頁面
編輯模板頁面後儲存即可

  • 使用模板
模板名稱於兩個大括號內
{{常用頁面}}
結果如下,該模板為一些常用的頁面連結置於表格中
常用頁面
資訊頁
測試頁
Wiki語法教學

Magic words

Magic words可以用來改變網頁的行為或當變數使用等
詳細請參考Magic words
  • 行為改變
例如 __TOC__
為Table Of Contents (目錄)的Magic words
在頁面中加入此Magic words表示指定TOC出現的位置
關於TOC將於其它章節說明

  • 變數
wiki內建如日期時間等的變數,可動態產生該資訊顯示於頁面
{{CURRENTYEAR}}
{{CURRENTTIME}}
{{LOCALTIME}}
{{#time:Ymd}}
{{#time:Y年m月d日}}
結果如下
2016
08:42
16:42
20161011
2016年10月11日

  • Parser Function
可判斷變數以顯示不用內容於頁面
{{#ifexpr: {{LOCALHOUR}} >= 17 | 5點囉快下班了 | 繼續加油}}
結果如下(結果會因是否超過下午5點而不同)
繼續加油

腳註

即加入註解於頁面底部
以ref標籤標示內容
<ref>這是腳註的註解內容</ref>
結果如下產生一註解連結,連至頁面底下註解內容
[1]

也可在註解內容中加入連結
<ref>腳註詳細說明請參考[https://www.mediawiki.org/wiki/Help:Cite wiki官網Reference]</ref>
結果如下產生一註解連結,連至頁面底下註解內容,且該內容包含連結
[2]

Table Of Contents

table of contents TOC 目錄功能就是在頁面中產生"目錄",目錄中會list章節的連結
  • 自動產生TOC
當頁面中有超過三個的section標籤(也就是四個以上),wiki就會在頁面頂端自動產生目錄
section標籤就是標題標籤,
用法為標籤內容於兩個或以上的等號內如下
= 第一層標籤 =
== 第二層標籤 ==
=== 第三層標籤1 ===
=== 第三層標籤2 ===
此結果不顯示,可參考用目錄之頁面如本頁面的目錄

  • 強制產生TOC
當頁面只有三個以下的section標籤,但又想要產生目錄時
可在頁面中加入 __FORCETOC__ magic word,即可強制產生目錄

小提醒: 當有登入wiki並瀏覽頁面時,在各section右邊會產生"編輯"的連結,點擊則進入編輯該章節的頁面,
此功能在頁面內容較多時可以較容易編輯某章節,也可避免不小心改到其它章節的狀況發生等



  1. 移至 這是腳註的註解
  2. 移至 腳註詳細說明請參考wiki官網Reference

區網架設內部MediaWiki網站

安裝MediaWiki

安裝MediaWiki完整資訊參考Manual:Running MediaWiki on Debian or Ubuntu

下載MediaWiki

由MediaWiki官網下載1.27.1版 mediawiki-1.27.1.tar.gz

解壓縮與複製至目的地

  • 解壓縮
可用圖形界面點滑鼠右鍵->在此解壓縮
或是
tar -xvzf /pathtofile/mediawiki-*.tar.gz
注意pathtofile為檔案存放的路徑
  • 複製至目的地
sudo mkdir /var/lib/mediawiki
sudo mv mediawiki-*/* /var/lib/mediawiki

下載XAMPP

由於MediaWiki需要基於一些基本工具才能動作,而XAMPP正是將這些工具打包成一個安裝包的東西,所以直接下載使用
XAMPP包含Apache + MariaDB + PHP + Perl
Apache : web server
MariaDB : database MySQL的分支
由XAMPP官網下載xampp-linux-x64-5.6.24-1-installer.run
修改mode為可執行檔
sudo chmod +x /pathtofile/xampp-linux-x64-5.6.24-1-installer.run

安裝XAMPP

執行xampp-linux-x64-5.6.24-1-installer.run,下一步直到完成,完成後可看到其安裝在/opt/lampp目錄底下

設定database

由於我們是安裝XAMPP所以database是在/opt/lampp底下,與一般直接安裝MySQL不同,所以設定方式也會不同於MediaWiki官網,請注意
  • 設定root password
官網為
mysqladmin -u root password "<enter the new password here>"
history -c
但XAMPP的database則是在
cd /opt/lampp/bin/
./mysqladmin -u root password "<enter the new password here>"
history -c
如果遇到./mysqladmin: connect to server at 'localhost' failed的問題可能是mysql沒有run
執行下行確認
./mysql.server  status
 * MySQL is not running
啟動mysql
./mysql.server  start
啟動成功後再次執行
./mysqladmin -u root password "<enter the new password here>"
history -c
以下主要以XAMPP方式為主,不再闡述與官網差異
  • Secure setup
cd /opt/lampp/bin/
./mysql_secure_installation

設定PHP

修改 /opt/lampp/etc/php.ini中的upload_max_filesize與memory_limit
upload_max_filesize=128M

memory_limit=128M

設定MediaWiki首頁

cd /opt/lampp/htdocs
sudo ln -s /var/lib/mediawiki mediawiki

啟動lampp


cd /opt/lampp/
./lampp start
若要變更port可修改/opt/lampp/etc/httpd.conf中的Listen 再./lampp restart
完成以上步驟後即可使用瀏覽器開啟MediaWiki首頁(但安裝尚未完成)

設定MediaWiki

MediaWiki的設定是透過瀏覽器界面產生LocalSettings.php
  • 開啟瀏覽器至http://web-server/mediawiki/
其中web-server為主機的電腦名稱(domain name)或是IP
該頁面會檢查是否有LocalSettings.php檔,若無則會自動進入設定頁面
  • 依頁面指示完成設定
為避免未來缺乏某些外掛工具,所以在外掛工具選擇時全部選取
管理者帳號設定為 xxx_admin
完成後下載LocalSettings.php
  • 套用LocalSettings.php
sudo mv ~/Downloads/LocalSettings.php /var/lib/mediawiki/

安裝完成

完成後再次開啟瀏覽器至http://web-server/mediawiki/則可開始使用此wiki網站
可使用xxx_admin登入,建立其他使用者帳號等

後續設定

web-server首頁

目前XAMPP的設定開啟瀏覽器至http://web-server/會跳轉到http://web-server/dashboard/
可修改/opt/lampp/htdocs/index.php中的
header('Location: '.$uri.'/dashboard/');
改為
header('Location: '.$uri.'/mediawiki/');
如此http://web-server/就會跳轉到http://web-server/mediawiki/首頁了

設定wikieditor

修改/var/lib/mediawiki/LocalSettings.php加入
# Enables use of WikiEditor by default but still allows users to disable it in preferences
$wgDefaultUserOptions['usebetatoolbar'] = 1;

# Enables link and table wizards by default but still allows users to disable them in preferences
$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1;

# Displays the Preview and Changes tabs
$wgDefaultUserOptions['wikieditor-preview'] = 1;

# Displays the Publish and Cancel buttons on the top right side
$wgDefaultUserOptions['wikieditor-publish'] = 1;
讓編輯頁面時套用wikieditor外掛使編輯更加簡易

重新開機自動啟動

因為xampp服務在重新開機後不會自動啟動,須手動登入機器並啟動wiki網站才開始工作,
所以修改/etc/rc.local加入啟動xampp的命令如下,以後只要啟動機器即可
sudo /opt/lampp/xampp start

上傳檔案設定

上傳檔案功能需要更改image目錄權限才可使用
cd /var/lib/mediawiki/
sudo chmod 777 images
確認/var/lib/mediawiki/LocalSettings.php中的wgEnableUploads設定為true
## To enable image uploads, make sure the 'images' directory
## is writable, then set this to true:
$wgEnableUploads = true;

常用wiki語法教學

wiki語法教學頁面
http://etkenchen.blogspot.com/2016/10/wiki.html