顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


文章 - Yamaka

頁: [1] 2 3 ... 164
1
Linux 討論版 / Re: 請問 linux 解析度問題
« 於: 2017-09-19 19:32 »
沒用過 vino

我是在 docker 用
tightvncserver + xvfb 開桌面
桌面大小可以隨意設定  :D

2
Linux 討論版 / Re: 請問 linux 解析度問題
« 於: 2017-09-19 14:46 »
引用
$ vncserver -h
TightVNC Server version 1.3.10

Usage: vncserver [<OPTIONS>] [:<DISPLAY#>]
       vncserver -kill :<DISPLAY#>

<OPTIONS> are Xtightvnc options, or:

        -name <DESKTOP-NAME>
        -depth <DEPTH>
        -geometry <WIDTH>x<HEIGHT>

        -httpport number
        -basehttpport number
        -alwaysshared
        -nevershared
        -pixelformat rgb<NNN>
        -pixelformat bgr<NNN>

3
雜七雜八 / Re: 二手的硬體能買嗎 ?
« 於: 2017-09-19 11:10 »
這兩年為了省電,家裡平常都只用 pine64 (本來是用平板)開主機內的vm桌面
桌機除非真的有必要用到,要不然每週只開個一兩次熱熱機而已  :D

4
Linux 討論版 / Re: 請問 linux 解析度問題
« 於: 2017-09-19 11:02 »
沒有 -geometry 之類的選項嗎?

5
雜七雜八 / Re: 快瘋掉了 ... 完蛋了 ...
« 於: 2017-09-09 13:28 »
dd 該怎麼說呢,我是覺得跟 rm -rf / 有同等級的破壞力
平常除非是真的很必要, 例如像備份整張記憶卡(含開機)之類的...
如果只是一般資料檔案備份,我還是會用 rsync

6
附一張選解析度的圖  :)

7
沒直接裝過 VirtualBox-guest-x11
我都是下載 VBoxGuestAdditions_5.x.xx.iso
然後命令列跑裡面的 VBoxLinuxAdditions.run (需要gcc)
跑完後 reboot, 解析度可以任意設定

我試過VBoxLinuxAdditions.run ,裝完後系統重開還是會發生一樣的狀況。

應該是沒有安裝成功吧!

可以參考一下這篇的步驟:
https://unix.stackexchange.com/a/286935

安裝並重開後, 在debian內的 displays 會有 VBX 螢幕, 點這個進去就可以選解析度
或者 VBox 的功能選單 [View] -> [Virtual Screen 1] 也可以選解析度

8
沒直接裝過 VirtualBox-guest-x11
我都是下載 VBoxGuestAdditions_5.x.xx.iso
然後命令列跑裡面的 VBoxLinuxAdditions.run (需要gcc)
跑完後 reboot, 解析度可以任意設定

9
判斷一個數值是否包含某數,要用位元運算, 例如

引用
$ (((13&4)==4)) && echo 1 || echo 0
1
$ (((13&2)==2)) && echo 1 || echo 0
0
$

10
假設有類似這樣的 yml
代碼: [選擇]
web0:
  build: web-base

web01:
  image: web0
  。。。。。

web02:
  image: web0
  。。。。。

web03:
  image: web0
  。。。。。

docker-compose up -d 後會建立1個image,3個containers 並執行
有沒有可能就是 web0 只是建立 image, 然後不建立容器也不跑容器
也就是實際上只跑 web01 & web02 這兩個容器
web0 單純只做 base image 用

當然,我可以把 web0 另外直接用 Dockerfile 建立
或是另外放在獨立的 web-base.yml 裡
只是想,目前的 docker-compose 版本(1.9.0)有沒有可能直接做到上面說的  ::)

11
DevOps 討論版 / Re: [docker]Container之變數傳導
« 於: 2016-11-17 11:53 »
套用某個系統變數(直接指定VAR,不用給VAL,但不吃一般User的,可能是root才能行):
代碼: [選擇]
sudo docker run -id -e LANG ubuntu /bin/bash

可能是新版的關係吧

$ docker info
Server Version: 1.12.3

一般 user 也可以套用 host 的環境變數

代碼: [選擇]
$ docker run -u developer -it --rm ub1604/sshd-base env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=93b4dcdecd4e
TERM=xterm
DEBIAN_FRONTEND=noninteractive
LANG=en_US.UTF-8

$ docker run -u developer -it --rm -e CXX ub1604/sshd-base env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=393b3ad0f48b
TERM=xterm
CXX=clang++
DEBIAN_FRONTEND=noninteractive
LANG=en_US.UTF-8

12
目前在更改 rc.local  是可以在重開機後自動執行.sh檔案,但.sh檔是在後台執行,看不到狀況
系統>偏好設定>啟動應用程式 ==>也是在後台自動執行
有指令可以使重開機後 自動 以terminal 執行.sh檔?

試試這樣, 啟動應用程式 那裡不要直接執行 .sh
改成開 terminal 然後 .sh 檔當作參數給 terminal 跑
例如:  gnome-terminal -e 'xxxxx.sh'


13
古早以前有在純文字模式顯示中文的套件
不過現在應該很少有人有這需求

如果主機端不想開 x-window
通常就是在另一台用 ssh 連到主機端
在 windows 環境下可以用 putty 之類的軟體連線
或是安裝powershell(我沒用過) 或 git bash 用其 ssh 指令連線

14
簡單來說,就是用 shell script 寫的簡易版的 make

檢查 c++ 程式檔對應的執行檔是否存在
並且比對程式檔與執行檔的時間
如果程式檔比較新就重新編譯
然後執行編譯後的執行檔

clang++ 是我用的 c++ 編譯器

15
之前有在 ~/.bashrc 顯示分支, 參考這個

http://phorum.study-area.org/index.php/topic,71755.0.html

今天加了一些功能, 在 git add . 之後能自動過瀘掉編譯後的 elf 檔
修改 parseGitBranch()

代碼: [選擇]
parseGitBranch() {
  BNAME1=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\[\1\]/')
  BNAME2=$(git branch 2>&1 | sed -n -e '1 s/^\(fatal\: Not a git repository\).*/\1/p')
  # BNAME2 == "" is git && no branch
  if [ ! -z "$BNAME1" -a -z "$BNAME2" ]; then
    echo $BNAME1
  elif [ -z "$BNAME1" -a ! -z "$BNAME2" ]; then
    # Not a git repository
    echo ""
  else
    # 未曾 commit 沒有 master
    echo "[*]"
  fi
 
  # 新增開始
  LATEST_GIT_CMD="$(history|tail -n2|grep 'git ad[d]')"
  if [ ! -z "$LATEST_GIT_CMD" ]; then
    for tf in $(git status|grep "new file"|awk -F':' '{print $2}'|sed 's/^[ \t]*//')
    do
      if [ ! -z "$(file "$tf"|grep 'ELF')" ]; then
        echo "$tf" >> "$(git rev-parse --show-toplevel)/.gitignore"
        GIT_RM=$(git rm --cached "$tf")
      fi
    done
  fi
}

1. 先判斷上個指令是否為 git add
2. 用 git status 抓出新加入的檔名
3. 用 file 指令檢查是否為 ELF 檔
4. rm elf 檔並將檔名加入 .gitignore

16
雜七雜八 / Re: New topic test
« 於: 2016-07-26 11:29 »
大賀!!

(貼文時上面那排表情圖示只出現文字)

17
因為公司要將租賃的主機上的網站,搬回自己公司的主機上面,因為版本上的差異,變成很多網頁報表是無法顯現的,雖然我很清楚,哪有程式設計一定要指定某一個系統版本,那是程式設計本身的問題,但是身為一個mis還是要想是否能夠有能夠降板安裝的方式,至少降板了還不行,那麼RD人員就要自己去想辦法處理了,否則就繼續掛在租任空間上了。

1. 抓 php mysql 原始碼自己編譯
2. 安裝舊版 os
3. 在主機開 vm 另外裝舊版 os
4. 在主機用 docker 掛舊版 os
5. 找舊版 php mysql 還有相關套件(deb)安裝看看
6...........

18
Linux 討論版 / Re: 問一個許功蓋問題
« 於: 2016-06-02 15:12 »
建議用 cconv 來轉換啦

引用
$ local
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

$ file f1.txt
f1.txt: ISO-8859 text

$ cat f1.txt|cconv -f BIG5 -t UTF8
x1230,葉小姐,usa@xxx.com.tw,89,0,16/06/01,
x1978,許小姐,ally@xxx.com.tw,90,0,16/06/01,
x8657,陳先生,cbk@xxx.com.tw,3,0,16/06/01,
x1467,鄭成功,cck@xxx.com.tw,3,0,16/06/01,


最後只要 cconv -f  -t 對調再跑一次就轉回 big5

我自己用 cconv 轉過不少資料
速度夠快,到目前還沒出過問題 ^___^

19
Linux 討論版 / Re: 問一個許功蓋問題
« 於: 2016-06-02 14:30 »
怎不先將資料轉 utf8 再處理?

20
控制碼 man console_codes 就有囉  ;D

21
無意間在網路上看到 terminal 提示字串上顯示 git 分支名
哇!!這個好,這樣就不用常常打指令確認目前所在分支
於是就撈了起來再加工,不同狀態用不同顏色顯示...

$ vim ~/.bashrc
代碼: [選擇]
parseGitBranch() {
  BNAME1=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\[\1\]/')
  BNAME2=$(git branch 2>&1 | sed -n -e '1 s/^\(fatal\: Not a git repository\).*/\1/p')
  # BNAME2 == "" is git && no branch
  if [ ! -z "$BNAME1" -a -z "$BNAME2" ]; then
    echo $BNAME1
  elif [ -z "$BNAME1" -a ! -z "$BNAME2" ]; then
    # Not a git repository
    echo ""
  else
    # 未曾 commit 沒有 master
    echo "[*]"
  fi
}

parseGitStatus() {
  git status -s 2> /dev/null | tail -1 | awk 'END {if (NR==0) print 70} /^\?/ {print 201;next} /^.*/ {print 1;next}'
}

color_prompt=yes
if [ "$color_prompt" = yes ]; then
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    PS1='${debian_chroot:+($debian_chroot)}\[\033[38;5;208m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[38;5;$(parseGitStatus)m\] $(parseGitBranch)\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

看起來像這樣

xxxxx@xxxxx:~/local/pl [master]$


parseGitBranch() 是抓分支名
parseGitStatus() 設定分支名顏色,目前我只分3種顏色
測試半天,還算可以正常顯示 ^__^

22
qmake 預設使用 g++ 編譯(linux 環境)

這兩年來用 clang 習慣了(編譯訊息較人性化 XD)
所以就修改 *.pro 目己加入這幾行

QMAKE_CC = clang
QMAKE_CXX = clang++
QMAKE_LINK = clang++

不過每次跑 qmake -project 後修改的東西就被清掉
於是就想說能在跑 qmake -project 時自動加入設定

代碼: [選擇]
$ vim ~/.bashrc
.....
alias qmake-pro='qmake -project && printf "\nQMAKE_CXXFLAGS += -std=c++14\nQT += widgets\nQMAKE_CC = clang\nQMAKE_CXX = clang++\nQMAKE_LINK = clang++\n" >> "$(basename $(pwd)).pro"'

這樣就可以在命令列直接用 qmake-pro 指令

QT += widgets

這個 qmake 預設也沒有,所以也加進去
另外也加了支援 c++14 的設定

$ qmake-pro

23
Linux 討論版 / Re: linux管道的执行顺序
« 於: 2016-05-04 13:47 »
我測試後的結果
感覺像是...
head 如果已經得到所需的資料
管線左邊還在執行的指令會直接被丟棄

引用
$ perl -e 'my $i; for ($i=1; $i<=300000; $i++) { print "$i\n"; }  `notify-send "Done! i=$i"`'|tail -5
299996
299997
299998
299999
300000

桌面右上角有出現訊息『Done! i=3001』

引用
$ perl -e 'my $i; for ($i=1; $i<=300000; $i++) { print "$i\n"; }  `notify-send "Done! i=$i"`'|head -5
1
2
3
4
5

桌面右上角沒出現訊息

24
參考: http://doc.qt.io/qt-5/qstring.html

arg() 參數除了『字串』類型最多可用9個(大於9個 編譯錯誤)外,其他類型每次只能用一個

代碼: [選擇]
std::cout << QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10")
               .arg("a", "b", "c", "d", "e", "f", "g", "h", "i", "j").toStdString() << std::endl;

引用
(clang)
error: no matching member function for call to 'arg'

第10個要另外再用一個 arg()

代碼: [選擇]
std::cout << QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10")
               .arg("a", "b", "c", "d", "e", "f", "g", "h", "i")
               .arg("j").toStdString() << std::endl;

這樣就可以編譯過了

引用
output:
a b c d e f g h i j

---
不同型別的參數不能放在同一個 arg(),

代碼: [選擇]
std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315, 6, 16).toStdString() << std::endl;
第2個 arg(315, 6, 16) 會以為是有3個要輸出的整數,其實是誤會,參考官網函數原型就知道
如果第一個參數是整數類型,也就是說要輸出的是整數,第2個參數是『欄位寬度』,
第3個參數則是『進位』制,所以上面這行程式碼實際輸出是這樣

引用
output:
abc def    13b %4 %5

315 會轉換成16進位制,輸出時數值本身佔3個字元,所以前面補3個空白,如果不想用空白,可加第4個參數指定,像這樣

代碼: [選擇]
std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315, 6, 16, QChar('-')).toStdString() << std::endl;
引用
output:
abc def ---13b %4 %5


如果 6, 16 也是要做為一般整數輸出,每個整數要單獨使用一次 arg()

代碼: [選擇]
std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315).arg(6).arg(16, 0, 16).toStdString() << std::endl;
引用
output:
abc def 315 6 10


~/cc/qt/test1$ cat main.cc
代碼: [選擇]
#include <QString>
#include <iostream>

int main() {
  std::cout << QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10")
                 .arg("a", "b", "c", "d", "e", "f", "g", "h", "i").arg("j").toStdString() << std::endl;
 
  std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315, 6, 16).toStdString() << std::endl;
  std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315, 6, 16, QChar('-')).toStdString() << std::endl;
  std::cout << QString("%1 %2 %3 %4 %5").arg("abc", "def").arg(315).arg(6).arg(16, 0, 16).toStdString() << std::endl;
  return 0;
}
引用
~/cc/qt/test1$ qmake -project
~/cc/qt/test1$ qmake
~/cc/qt/test1$ make
~/cc/qt/test1$ ./test1
a b c d e f g h i j
abc def    13b %4 %5
abc def ---13b %4 %5
abc def 315 6 10



25
if 判斷式最外層少了一組括號

代碼: [選擇]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main (int argc,char *argv[]) {
   float a , b, c;
   printf("PL IN A_side: ");
   scanf("%f", &a);
   printf("PL IN B_side: ");
   scanf("%f", &b);
   printf("PL IN C_side: ");
   scanf("%f", &c);
   
   if (((pow(a,2)+pow(b,2))==pow(c,2)) ||
    ((pow(a,2)+pow(c,2))==pow(b,2)) ||
    ((pow(b,2)+pow(c,2))==pow(a,2))) {
    printf("\nThis is Trigle");
   } else {
     printf("Not Trigle\n");
   }

   system("PAUSE");
   return 0;
}

引用
$ clang -lm -o 5-7 5-7.c
$ ./5-7
PL IN A_side: 3
PL IN B_side: 5
PL IN C_side: 7
Not Trigle
Press any key to continue...
$

5-26 的問題是.... \n 都跑到引號外了啊

26
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>


int main (int argc,char *argv[])
{

   float a , b, c;
   printf("PL IN A_side" : ) ;
   scanf("%f",&a);
   printf("PL IN B_side");
   scanf("%f",&b);
   printf("PL IN C_side");
   scanf("%f",&c);
   if ((pow(a,2)+pow(b,2))==pow(c,2)||
      ((pow(a,2)+pow(c,2))==pow(b,2)||
      ((pow(b,2)+pow(c,2))==pow(a,2))
      printf("\nThis is Trigle");
   else
   
      printf("Not Trigle");
   system("PAUSE");
   return 0;
      }
http://i.imgur.com/FN0EB4o.png

error 1: 冒號刪除,或是放引號裡
error 2: if 前兩個等於判斷,後面少了  )
error 3, 4: e 2 修正了應該就沒了

27
最近在 ubuntu-mate 15.04 環境用 pluma 寫 go 碼
可惜的是 pluma 預設未支援 go 語法

代碼: [選擇]
$ find /usr/share -type f -name '*.lang'|grep go
/usr/share/gtksourceview-3.0/language-specs/go.lang
$

pluma 用的是 gtksourceview-2.0
但是 gtksourceview-2.0 沒找到 go.lang
設定方式是直接建立 3.0 版的 go.lang 連結到 2.0 版就可以

代碼: [選擇]
$ sudo ln -s /usr/share/gtksourceview-3.0/language-specs/go.lang /usr/share/gtksourceview-2.0/language-specs/go.lang
重新開啟 pluma 後就有支援 golang 語法了 ^__^

參考網址:https://ubuntu-mate.community/t/adding-syntax-highlighting-to-pluma/56/1


28
雜七雜八 / 終於合體了 XD
« 於: 2016-03-23 12:56 »
https://sourceforge.net/projects/ubuntubsd/

擁有 freebsd 的心 加上 ubuntu 的外表  :D

Features
引用
Versatile text based installer
Xfce desktop included
Ubuntu based
Debian based
FreeBSD based
Suitable for desktops and server alike
ZFS support completely integrated

29
DevOps 討論版 / Re: [docker]一次執行多個指令
« 於: 2016-02-29 12:10 »
有試過用 nohup,不過無效,container 也是開啟後就直接 exit  :P

30
DevOps 討論版 / Re: [docker]一次執行多個指令
« 於: 2016-02-27 16:16 »
我也貼一下前陣子弄出來的結果

代碼: [選擇]
PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /bin/bash -c date; PIPS="192.168.1.244 192.168.1.242 192.168.1.16"; for ip in $PIPS; do (ping -W 10 $ip > /dev/null 2>&1 &); sleep 0.7s; done; ping 192.168.1.18 > /dev/null 2>&1
    8 ?        S      0:00 ping -W 10 192.168.1.244
   11 ?        S      0:00 ping -W 10 192.168.1.242
   14 ?        S      0:00 ping -W 10 192.168.1.16
   16 ?        S      0:00 ping 192.168.1.18
   17 ?        Rs     0:00 ps ax

目標是一個 container 裡同時跑多個 ping
而且每次 start 或 restart 都能直接跑出上面結果

試了好多方式,最後是用這個指令跑出來

代碼: [選擇]
$ sudo docker run -e TZ=Asia/Taipei ubuntu:14.04.3 /bin/bash -c 'date; PIPS="192.168.1.244 192.168.1.242 192.168.1.16"; for ip in $PIPS; do (ping -W 10 $ip > /dev/null 2>&1 &); sleep 0.7s; done; ping 192.168.1.18 > /dev/null 2>&1'
最後一個 ping 不能放背景,如果也丟背景
整個 container 就直接 exit
觀察 stats NET I/O 可以確認是否有在 ping

引用
CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O
Ping_4_Servers       0.08%               741.4 kB / 33.72 GB   0.00%               459.1 kB / 455 kB   0 B / 0 B


頁: [1] 2 3 ... 164