verilog書く人

自称ASIC設計者です。どなたかkaggle一緒に出ましょう。

似ている単語を別の色でハイライトするVSCodeのプラグイン「colorize-similar」を公開しました

突然ですが、このコードを読んでなにか気づいたことはないでしょうか?

def add2d(input_x, input_y):
    return [input_x[0] + input_y[0], input_x[1] + input_y[1]]

def sub2d(input_x, input_y):
    return [input_x[0] - input_x[0], input_x[1] - input_y[1]]

こうしてみるとどうでしょう?

f:id:segafreder:20191030231622p:plain
view

色分けするとよりわかりやすいですね、sub2dは実はバグっていて、

def sub2d(input_x, input_x):
    return [input_x[0] - input_y[0], input_x[1] - input_y[1]]

が正しいです。このように、似たような名前の変数の取り違えによるバグを誰しも一度は、いや何度も埋め込んできたと思います。

(私は競プロでも業プロでも何度もこれで死にました。。)

xとyはかなり似ているのですが、色分けされていれば簡単に見つかります。

というわけで、似たような単語を色分けしてハイライトする、colorize-similarというプラグインを公開しました。ぜひお試しください。

続きを読む

Hacktoberfestが素晴らしいので、OSS開発者になりたい人/すでになっている人は参加しよう!

Hacktoberfestとは

DigitalOceanとDEVが主催しているOSSを祝うイベントで、 任意のタイムゾーンで10/1 - 10/31上でGithubの公開リポジトリ上で4つのPRを送った参加者の内、 先着50000名に限定Tシャツとステッカーが送られます。 (※スパムと判断されたPRは含まれないなどのルールあり)

この記事では軽くルールの概要を説明しますが、正式なところは公式ページでご確認ください

続きを読む

Pythonの文法エラー箇所(行番号、何文字目)を取得するには

Pycon JPでPythonをサポートしてないIDEを紹介したトークがあったらしい()

さて、競プロIDEPython対応を進めていますが、Pythonシンタックスエラー箇所取得に少しつまづいたのでメモ。 IDEで文法エラー箇所をハイライトするには何行目、何文字目で文法エラーが起きているかを調べる必要があります。

結論

動的インポートしてシンタックスエラーをキャッチしてやればよい。

import importlib.machinery
loader = importlib.machinery.SourceFileLoader("<py_compile>", "test.py")
source_bytes = loader.get_data("test.py")
try:
    code = loader.source_to_code(source_bytes, "test.py")
except SyntaxError as e:
    print(":".join(("error", str(e.lineno), str(e.offset))))
続きを読む

Pycon JP 2019 登壇の感想

感想

資料はこちら。(gifが動きません)

speakerdeck.com

発表動画はこちら。(恥ずかしいので自分では見てません。)

www.youtube.com

採択率が厳しくてどの発表も質が高く、感想書きたいですが、ひとまず登壇の感想を。

技術系カンファレンスの登壇は初めてでした。

発表を終えた後に多くの方に温かい言葉をもらえて、ずっと一人で戦ってきた競プロIDEですが、

新たな理解してくださる方を得れたような、誰も見てないところに光が当たったような、力強い気持ちになれました。

人生で一回くらいは登壇と前から思っていたんですが、一回終えた今は、「次はもっとすごいのをやりたい!」という思いに駆られています。

続きを読む

Rustで文字列を数字に、あるいは数字を文字列にする方法

毎回ググってるのでまとめ。 10進数だけでなく、2進数など、基数変更に対応。

文字と数字の相互変換

charと数値型を行き来したい場合は、to_digit()あるいはfrom_digit()を使う。こっちは覚えやすい。

>> '5'.to_digit(10).unwrap() // 10進数
5
>> std::char::from_digit(10, 36)  // 2番目の引数は基数、この場合は36進数
'a'

文字列の場合

文字列と数値を行き来したい場合は以下のようにする。

>> format!("{:b}", 10) // 2進数
"1010"
>> format!("{}", 10) // 10進数
"10"
>> 10.to_string()  // to_stringは覚えやすいが、10進数固定のようだ。
"10"
>> format!("{:x}", 10) // 16進数
"a"
>> i64::from_str_radix("1010", 2).unwrap()  // 2番目の引数は基数、この場合は2進数
10

to_str_radixだと覚えやすいのだが。