tty0ttyのセットアップスクリプトを書いた

ざっくりメモ

linuxで2つの仮想シリアルポートをつなげられるソフト「tty0tty」を使っている。

カーネルが更新された際にもう一度ビルドしないといけないのがしんどくて、シェルスクリプトを書いた。

自分の環境で動いたのでひとまずgithubにのっけた。

36kyo/setup_tty0tty https://github.com/36kyo/setup_tty0tty

 

参考文献

スクリプト中で実行しているコマンドを表示する - らくがきちょう

http://sig9.hatenablog.com/entry/2015/12/15/220312

procesingのsetup()の途中でexit()

はじめに

setup()関数中でtry~catchでエラーが出た時に、printして即終了させようと思いました。

exit()を書いたらそこでプログラムが終了するのかなと勝手に思っていたのですが、終了せずあれ?と疑問に思いました。

方法をぐぐっても引っかからなかったので、自力でがんばって、結果うまくいったので記事にしました(ググり力不足だったらどうしよう)。

setup()中で即終了させる方法

exit()のあとにreturnして、setup()を途中で抜けるようにします。draw()でも同じようにして終了できました。

exit()の挙動

setup()中で即終了させたいと思ったので、exit()の挙動を調べました。

processing.org

Rather than terminating immediately, exit() will cause the sketch to exit after draw() has completed (or after setup() completes if called during the setup() function).

「setup()中で呼ぶと、setup()が終わった後に抜けます。draw()中で呼ぶと、draw()が終わったあとに抜けます。」

setup()の途中で即終了させるには

今回はsetup()の途中で即終了させたいので、
exit()のあとにreturnして、setup()/draw()を途中で抜けるように工夫します。

以下に、試したコードの実行結果を載せます。

exit.pde

boolean isError = true; 

void setup(){
  size(600, 400);
  background(255);
  
  println("a");
  exit();      // Not exited
  
  // Ex. error occurs
  if( isError ){ // true
    println("b");
    exit();
    return;     // -> exit
  }
  
  println("c"); // Not executed
  
}

void draw(){
  print("d"); // Not executed
  
}

実行結果

a
b

 

f:id:Fluorite36:20191225032415p:plain

ソースコードと実行結果

printデバッグをして確かめました。

  • "a"が表示されました。
  • exit()のみでreturnしないと抜けられないので、その次が実行され、
  • if( true )でif文の中に入って、"b"が表示されました。
  • 次にexit()とreturnをして、setup()を抜け、描画ウィンドウが閉じられ、終了しました。
  • その下に書かれている部分は実行されないので、"c","d"は表示されませんでした。

ひとこと

たのしいprocessingライフを送りたいです。

 

== 追記 2020/01/07 ==

コピペ記事っぽく見えて悲しくなったので、がんばりが伝わるといいなと思い説明文を全体的に書き直しました。ところでぼくはクリスマスに何をやっていたんだろう...

プライバシーポリシー

掲載されている広告について

当サイトでは、第三者配信の広告サービス(Google Adsense)を利用しています。(予定。)

広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するために、「Cookie(クッキー)」を使用することがあります。

Googleアドセンスに関して、またCookieを無効にする設定について、詳しくはこちらをクリックしてください。

免責事項

当サイトに掲載された内容(リンク先含む)によって生じた損害等の一切の責任を負いかねます。

 

2019年11月15日

Processing3の日本語表示設定(Linux)

はじめに

Linux( Ubuntu 16.04 )にProcessing3を入れて使っています。別のPCで使っていたスケッチを開いた時に、コメント文の日本語が表示されませんでした。フォント設定を忘れていたことに気づいたので、やりました。環境は以下の通りです。

  • Ubuntu 16.04
  • Processing 3.5.3

設定方法

設定ファイルである

~/.processing/preferences.txt

のフォント設定箇所

editor.font.family=Source Code Pro

を、日本語の文字が入っているフォントを使う設定に書き換えます。Processingの

ファイル→設定...→/home/ユーザー名/.processing/preferences.txt

のリンクをクリックするとpreferences.txtを開けます。このファイルは設定ファイルなので、書き換える前に、必ずProcessingを終了させてください。

結論から言うと、「Noto Sans Mono CJK JP Regular」で日本語表示ができました。

editor.font.family=Noto Sans Mono CJK JP Regular

f:id:Fluorite36:20191022175056p:plain

フォント設定を変更して日本語の表示ができるようになった様子

日本語を扱えるフォントを調べる

日本語を扱えるフォントを調べました。

以下のスケッチ(ソースコード)をprocessingで実行すると、フォントリストをProcessingIDEの下のConsoleに出力することができます。

void setup(){
  printArray(PFont.list());
}
void draw(){
}

[0] "Abyssinica SIL"
[1] "Bitstream Charter"
[2] "Bitstream Charter Bold"

...

[325] "rsfs10"
[326] "stmary10"
[327] "wasy10"

[162] "Noto Sans CJK JP Black"
[163] "Noto Sans CJK JP Bold"
[164] "Noto Sans CJK JP DemiLight"
[165] "Noto Sans CJK JP Light"
[166] "Noto Sans CJK JP Medium"
[167] "Noto Sans CJK JP Regular"
[168] "Noto Sans CJK JP Thin"
[190] "Noto Sans Mono CJK JP Bold"
[191] "Noto Sans Mono CJK JP Regular"

 これらが実際に日本語の文字を含んでいるか確かめます。以下のスケッチで描画してみます。

// setup文内で回しているので、一通り表示できるまでずっと画面が更新されない。最後まで待つこと。
// Since this code is in the setup statement, the screen will not be updated until it can be displayed. Wait until the end.

int[] testFontIndexArray = 
{
  162,
  163,
  164,
  165,
  166,
  167,
  168,
  190,
  191
};
//[162] "Noto Sans CJK JP Black"
//[163] "Noto Sans CJK JP Bold"
//[164] "Noto Sans CJK JP DemiLight"
//[165] "Noto Sans CJK JP Light"
//[166] "Noto Sans CJK JP Medium"
//[167] "Noto Sans CJK JP Regular"
//[168] "Noto Sans CJK JP Thin"
//...
//[190] "Noto Sans Mono CJK JP Bold"
//[191] "Noto Sans Mono CJK JP Regular"

PFont font;
int fontSize = 24;

void setup()
{
  size(1000, 1200);
  background(255);
  
  float x = 10;
  float y = fontSize;
  String printString = "";
  
  // フォントリストを表示する
  // Display font list
  // printArray(PFont.list());
  
  // フォントリストの内、配列で指定した要素のフォントを表示する
  // Displays the font of the element specified in the array in the font list
  println("Since this code is in the setup statement, the screen will not be updated until it can be displayed. Wait until the end.");
  println("printing...");
  
  for(int i = 0; i< testFontIndexArray.length; i++)
  {
    font = createFont(PFont.list()[ testFontIndexArray[i] ], fontSize);
    textFont(font);
    
    fill(0);
    
    printString = "[" + testFontIndexArray[i] + "]:\"" + PFont.list()[ testFontIndexArray[i] ] + "\"\t" + "こんにちは";
    
    print(i+1 + "/" +  testFontIndexArray.length + "\t");// ex. 1/9, 2/9,...
    println( printString );
    text( printString, x, y);
    y += 10;//mergin
    y += fontSize;
  }
  println("print finished!");
  noLoop();
}

void draw()
{
  
}

実行結果は以下の画像のようになりました。

f:id:Fluorite36:20191022174013p:plain

フォント描画テスト結果

フォント名に「JP」を含んでいた、あたりをつけたフォントは、日本語の文字を含んでいたことがわかりました。

この他のフォントはまだ試していないのですが、同じようにして要素番号を変えて試せるのでやってみたいと思います。

LinuxにProcessing3を入れる

はじめに

WindowsにProcessing3を入れて、GUIツールを作って使っていました。大学でUbuntuを使っていて、そのツールをそっちでも使いたいなと思い、UbuntuにProcessingを導入することにしました。

方法

を使います。

ダウンロード

processing.org

https://processing.org/download/

こちらから、Processingの最新版をダウンロードします。今回は自分のPCにあわせて、

Linux 64bit

を選びました。現時点での最新版は3.5.3なので

processing-3.5.3-linux64.tgz

という名前のファイルがダウンロードされます。ダウンロードできたら、ファイルマネージャーかterminalで展開します。

ファイルマネージャーの場合は、落としてきた.tgzファイルを右クリックして

ここに展開

を選びます。

terminalの場合は、落としてきた.tgzの場所まで移動して、tarコマンドで展開します。

cd /home/ユーザー名/Downloads/
tar xzvf processing-3.5.3-linux64.tgz

インストール

展開したprocessing-3.5.3フォルダ内の

install.sh

 を実行します。terminalで、install.shがある場所に移動します。先ほどの移動コマンドの実行で現在

/home/ユーザー名/Downloads/

にいるとします。そこから展開されたフォルダ processing-3.5.3 に移動します。

cd ./processing-3.5.3/

install.shを実行します。

./install.sh

 

以下のような表示が出たら、Processingのインストールが完了です。

$ ./install.sh
Adding desktop shortcut, menu item and file associations for Processing... done!

このとき同時に、以下が行われます。

  • デスクトップにショートカット用アイコンが生成される
  • スケッチブックフォルダが「/home/ユーザー名/sketchbook/」に置かれる
  • 設定ファイルが「/home/ユーザー名/.processing/」に置かれる

デスクトップに作られたショートカット用のアイコンをダブルクリックすると、Processingが起動します。

やり直す場合

私は最初、手動インストールを試して、失敗して入れなおしをしました。一回まっさらの状態にしてinstall.shで入れなおそうと思い、上述の設定フォルダとスケッチフォルダを消してから入れ直しました。

sketchbookに自分のプログラムが入っていたり、.processing/preference.txtを編集して設定変更などをしている際は、それらをコピーしてバックアップをとっておくと良いと思います。

消す場合は以下で消します。

cd /home/ユーザー名/
rm -rf ./sketchbook/
rm -rf ./.processing/

その他

Processingのライブラリ管理のために、

スケッチ→ライブラリをインポート...→ライブラリを追加...

でContribution Managerを起動した際に、ライブラリ一覧取得などの通信がうまくいかず、Processingのコンソールに

java.net.SocketTimeoutException
at java.net.SocksSocketImpl.remainingMillis(SocksSocketImpl.java:111)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)

...

と表示されて、インストールに失敗したかな?と考えこんでしまっていました。

原因は大したことはなくて、Proxy環境下でないときに、Ubuntuのアプリケーションの「ネットワーク」で、Proxyの設定を「自動」にしていたことでした。「自動」から「なし」に切り替えたら、無事通信がうまく行き、ライブラリ一覧を取得できました。

 

大学で使うPCの時刻合わせ(Windows)

はじめに

大学で使っているWindowsのPCの時計がずれてしまっていました。デフォルトで設定されているNTPサーバーにアクセスできなくなっていたのが原因でした。正確な時刻に合わせたい。そのための設定方法です。

経緯

raspberry piの設定をしているときに、ntpの設定に出会いました。大学で使っているPCの時刻設定もこれで直せるかなと思ってやってみました。

方法

大学のNTPサーバーを調べます。電通大はこちら↓にのっていました。

www.cc.uec.ac.jp

ntp-east.cc.uec.ac.jp

他の大学、機関の方は、それぞれの設定に置き換えてください。

これを、設定→時刻と言語→日付と時刻→関連設定 日付、時刻、地域の追加設定

f:id:Fluorite36:20190330180406p:plain

日付と時刻

→日付と時刻の設定

f:id:Fluorite36:20190330180508p:plain

時刻と地域

→インターネット時刻のタブ

f:id:Fluorite36:20190330180539p:plain

インターネット時刻のタブ

→「設定の変更」ボタン→インターネット時刻設定 のサーバーの入力欄に入れます。「今すぐ更新」ボタンを押すと、大学のNTPサーバーに時刻を確認しに行くよう設定ができました。

f:id:Fluorite36:20190330180607p:plain

インターネット時刻設定

「xxxx と同期中にエラーが発生しました。タイムアウト期間が経過したため、この操作は終了しました。」と表示が出たら、打ち間違いを疑って再挑戦します。私の場合は、最初にボタンを押したときに、打ち間違えていなかったのですがこの表示が出ました。もう一度「今すぐ更新」ボタンを押したら、無事同期できました。

 

時刻がぴったり合うと、気持ち良いですね。

processingのtextSize()使用時の文字化けの回避

processing 3.3.7を使っています。textSize()関数を使用したときに、text()で文字を表示させようとすると文字化けが起きてしまいました。

piyopiyocs.blog115.fc2.com

こちらの記事で、createFont()を使うと回避できるということが分かったので、関数化してみました。そのメモです。

// textSize()で生じる文字化けの回避
void avoidTextSizeMisconversion(){
  PFont font;
  font = createFont("", 64, true);//dummy font
  textFont(font);
}

// setup()内で、text()使用前に1回呼べばOK
avoidTextSizeMisconversion();

↑これで、文字化けが解消できました。