Processingを外部エディタ(Atom)でどうにかする

公式のエディタもいいんですけどね…
Environment (IDE) \ Processing.org
f:id:Etclsc:20161107103750p:plain

(もっと甘やかして欲しいので)外部エディタで書きたいところ
最近Atomを使い始めたのでAtomでコードを書いてビルドまでしたい…

Processing-javaをインストール

「ツール」メニューより選択
f:id:Etclsc:20161107111906p:plain

パッケージをインストール

atom.io
atom.io
atom.io
この辺を入れておくと良いらしい
以下のコマンドでインストール

$ apm install processing processing-autocomplete processing-language

Settingする

package一覧からProcessingを探して設定を開く
f:id:Etclsc:20161107153522p:plain

その後, Processing-executableに

$ which processing-java

の結果を設定します
"pbcopy" コマンドにパイプで繋ぐとクリップボードにコピーしてくれるらしい, 便利
f:id:Etclsc:20161107160209p:plain

実際にビルドしたところ

"ctrl+alt+b" でビルドした結果
補完もしてくれるし, ハイライトも素晴らしいですね…
f:id:Etclsc:20161107231657p:plain


pdfからコピーした英文を翻訳機に投げやすい形に整形する

英文をPDFからコピーすると改行が含まれることがあるので、整形するスクリプトを簡単に書きました。

よくある処理の記録機能を使って置換機能自体をマクロ化すればよかったんですが、環境によってはうまく動かなかったので…

 

こんな感じの処理になると嬉しいですね。

Before

You are not the person that we

choose. Thank you for your

understanding.

 After

You are not the person that we choose.

Thank you for your understanding.

 

メモ帳の代わりにMeryというエディタを使っているのですが、そのエディタのマクロがJavaScriptでかけるそうなので乗っかります。

MeryWiki

 

処理内容

特に難しいことはしていなくて

  • 改行を半角スペースに置換
  • 文章の最後で改行

の2つの処理を行っているだけです。

( もっときれいな書き方があると思います )

gist.github.com

 

使い方

  1. Meryをインストール ( MeryWiki )
  2. 上のプログラムをダウンロードするなりコピペするなどしてどこかに置いておく
  3. マクロ→カスタマイズより追加

    f:id:Etclsc:20160923025011p:plain

ツール→オプション→キーボードでショートカットキーを設定するとなお良いかも

 

swiftで回文判定

swiftを勉強する機会があったので、忘れないうちにメモ
回文判定については最後にしか触れていない上、大したことはしていません。
ちょっとしか触っていないので簡単なものばかりですが、はてなブログシンタックス・ハイライトのテストも兼ねて載せておきます。

変数宣言

letで定数宣言、varで変数宣言
宣言時に値を入れておけば、型は明示的に宣言する必要はないらしい…

let hoge : Int // Int型の定数
var huga = 10  // Int型の変数

var tokaiList : [String] = ["Tokyo", "Osaka", "Nagoya"]

制御文

if文
var score : Int = 59
if score < 60 {
    print("不合格")
} else {
    print("合格")
}
/* 実行結果
不合格
*/
for文
var tokaiList : [String] = ["Tokyo", "Osaka", "Nagoya"]
var id : Int
// その1
for id = 0; id < count(tokaiList); id++ {
    println(tokaiList[id] + " is Large City.")
}

// その2
for id in 0...count(tokaiList)-1 {
    println(tokaiList[id] + " is Large City.")
}
/* 実行結果
Tokyo is Large City.
Osaka is Large City.
Nagoya is Large City.
Tokyo is Large City.
Osaka is Large City.
Nagoya is Large City.
*/
while文(do-while)
var cash = 500
do {
    let price : Int = Int(arc4random())%100 + 100 // 100~200円のジュース
    cash = cash-price
    println(String(price) + "円のジュースを買いました.")
} while cash > 200

/* 実行結果
152円のジュースを買いました.
166円のジュースを買いました.
*/

関数宣言

func 関数名 ( 引数:型 ) -> 戻り値の型 {
    // 処理
}

と宣言するらしい

func warikan(fee: Int, nPerson : Int) -> Double {
    var res = Double(fee)/Double(nPerson)
    return res
}
var payment : Double = warikan(10000, 6)
println("お代は1人\(payment)円です.")

/* 実行結果
お代は1人1666.66666666667円です.
*/

ちょっとした関数

文字列を文字配列に変換
func charToArray (str:String) -> [Character] {
    var res : [Character] = []  
    for i in 0...count(str)-1 {
        res.append(str[advance(str.startIndex, i)])
    }
    return res
}

let lchar = charToArray("olympi")
var vchar = lchar+"c"
println(vchar)

/* 実行結果
[o, l, y, m, p, i, c]
*/
配列内の要素の種類をカウント
func variety(array:[Int]) -> Int {
    var res:Int = 0
    
    for i in 1...count(array)-1 {
        let before  = array[i-1]
        let current = array[i]
        
        if before != current {
            res += 1
        }
    }
    return res
}

let intArray = [1, 2, 2, 3, 4, 4, 5, 6, 7, 7, 7]
var result = variety(intArray)
println(result)

/* 実行結果
6
*/
回文判定
func isPalindrome(str:String) -> Bool {
    var rev = String(reverse(str))
    
    if str == rev {
        return true
    } else {
        return false
    }
}

var result = isPalindrome("testset");
print(result)

/* 実行結果
true
*/

はてなブログシンタックスハイライト使うなら、いっそGistでコードを埋め込んでやればいいのでは…

しかも、回文判定は空白や文字の大小に対応していないので
No lemon no melon.
のような有名な回文を判定できない始末
lowercaseにして余計なスペースやら消してしまえばいけそうだけど、そのうちちゃんと書きます
というか、swiftで文字列扱うの面倒では

参考

The Swift Programming Language 日本語訳 | スタジオガラゴ

Swift | Swift言語を学ぶ

[iOS] Swiftで文字列から任意の文字列を取得・残す方法 - Qiita

付け焼き刃でビザンチン将軍問題

ちょっと前に噂になったビットコインに関する記事でたまに見かけるビザンチン将軍問題について。

この問題の面倒くさいところは、反逆者(故障箇所)が返事をしないという訳ではなく、適当な返事をするところらしい…

ビザンチン将軍問題 - Wikipedia

ビザンチン将軍問題は、東ローマ帝国ビザンチン帝国)の将軍達がそれぞれ軍団を率いてひとつの都市を包囲している状況で発生する。将軍達は都市攻撃計画について合意したいと考えている。最も単純な形では、将軍達は攻撃するか撤退するかだけを合意決定する。一部の将軍達は攻撃したいと言うだろうし、他は撤退を望むかもしれない。重要な点は将軍達はひとつの結論に合意しなければならないということで、一部の将軍だけで攻撃を仕掛けても敗北することは明らかで、全員一致で攻撃か撤退かを決めなければならないのである。また、彼らはそれぞれ離れた場所に各軍団を配置しており、メッセンジャーを相互に送ることで合意を目指す。

問題を複雑にさせるのは、一部の将軍が反逆者であって、時折最適でない戦略に票を投じたりして混乱させるのである。例えば、9人の将軍が投票して4人が攻撃で4人が撤退に票を投じたとすると、9人目の(反逆者でもある)将軍は一部の将軍達には撤退票を送り、他の将軍達には攻撃票を送るかもしれない。9人目から撤退票を受けた将軍達は撤退するだろうし、残りの将軍達は攻撃を開始して敗走することになるだろう。 

 

Lamportの方法

この問題の解法としてLamportさんが提唱した方法があるそう(以下)

  1. 各将軍は, 他将軍に自部隊の情報を伝える
  2. 各将軍は, 受け取った情報をベクトル化する
  3. 作ったベクトルを他の将軍に送る
  4. ベクトルを比較, 過半数が同じならば正しいとみなす

ということです。

 

実際に試してみる

各将軍は, 他将軍に自部隊の情報を伝える

正常だとこんな感じ

f:id:Etclsc:20160825165129p:plain

異常状態だと適当なお返事をする(イメージ)

f:id:Etclsc:20160825170322p:plain

 

情報をベクトル化する

f:id:Etclsc:20160825165807p:plain

 

ベクトルを他の将軍に送る

またまた正常と異常のイメージ

f:id:Etclsc:20160825170336p:plain

f:id:Etclsc:20160825170344p:plain

 

ベクトルを比較する

過半数が同じであれば正解とみなすので[1, 2, ?, 4]となる

他の将軍でも(多分)同じ答えになる → 正常な将軍間で合意が取れる

f:id:Etclsc:20160825171044p:plain

 

ということでした。

 

合ってるかどうかもわからない上、大部分があやふや

すごく雑にプログラムを書きましたが、なんとも 

GitHub - Etclsc/ByzantineGenerals: ビザンチン将軍問題に関する簡単なプログラム

 

参考

http://research.nii.ac.jp/~f-ishikawa/work/enpit15/CloudBasic-3-quorum.pdf

http://www-higashi.ist.osaka-u.ac.jp/~nakata/mobile-cp/chap-07j.pdf

Microsoft Word 2016 for Macで数式挿入ショートカットキーを使う

LaTeXを使おうという人もいますが、簡単な文章ではwordを使いたい…

いちいち挿入→数式を選択するのも面倒ですし、何度も数式を挿入する場合にはショートカットキーを使いたくなります。

Windowsバージョンでは「Alt」+「=」のショートカットキーで数式を挿入できる(らしい)のですがMacでは対応していない様子。

自分で設定するしかないようです。

 

ショートカットキーを設定する

全く同じ質問が投稿されていました。

answers.microsoft.com

 

Wordの「ツール」タブ → 「ショートカットキーのユーザ設定」を選択

f:id:Etclsc:20160821181444p:plain

 

分類 : すべてのコマンドから「EquationInsert」を選択

任意のショートカットキーを割り当ててOKします。

(他のコマンドにもキー割り当てができるので便利そう)

f:id:Etclsc:20160821181529p:plain

 

その後、設定したキーを入力すると数式挿入できます(できました)。

f:id:Etclsc:20160821181801p:plain

 

Visual Studio Community 2015を日本語化する

少し前にVisual Studio Community 2015を入れていたものの、

今になって突然使う用事ができてしまったので、日本語化しました。

大したことはしていないですが、別の端末に入れる時に確認するようにメモ。

 

手順としては

  1. Language Packを入手
  2. インストール
  3. 言語を設定する

 くらいで済みました。

 

Language Packの入手

Download Microsoft Visual Studio 2015 Language Pack from Official Microsoft Download Center

ここからvs_langpack.exeをダウンロードf:id:Etclsc:20160719185500p:plain

 

言語パックのインストール

ダウンロードしてきたexeファイルを実行します。

特に難しい操作はしていません。

f:id:Etclsc:20160720122513p:plain

 

 

 日本語に設定する

インストールが完了しても

設定を変えていないとEnglishのままなので設定をいじります。

Visual Studio 2015 Communityを起動して、Tools -> Options...を選択

f:id:Etclsc:20160720122938p:plain

 

Environment下のInternational SettingsからLanguageを日本語に設定します。

f:id:Etclsc:20160720123031p:plain

 

再起動するように言われるので再起動をすると無事日本語化されました。

f:id:Etclsc:20160720185800p:plain

 

日本語パックのダウンロードに失敗したという記事も見かけたので

うまくいかない場合はvs_langpack.exeの中身が問題なのかもしれない。。。

 

参考