Julia - #undef か否かを調べる

環境 Julia 1.3.0 配列の要素が undef か否かを調べる時は isassigned を使う Arrays · The Julia Language julia> v = Vector{Any}(undef, 5) 5-element Array{Any,1}: #undef #undef #undef #undef #undef julia> v[1:3] .= 'a':'c' 3-element view(::Arra…

Julia - ドット . を使って method を呼ぶ

約1年前に全く Julia っぽくない邪道な遊びをしていたなということをふと思い出した。 微妙なメモだけは残っていたので供養しておく。 好奇心に負けて倫理的に許されないことをしてしまった気分になった。#julialang pic.twitter.com/ahmRgVFz7t— goropikari…

Julia - retry 機構

環境 Julia 1.3.0 retry ある処理がエラーになってしまったとき、時間を置いて再度実行したらエラーが出ないことはよく有ることです。例えばサーバーにうまく接続できないとか。 そんなときに使うのが retry 機構です。retry 機構を使うことでエラー時の再実…

Julia - ソースコードを読んでみる

gdb を使って Julia のソースコードを追ってみる 環境 ArchLinux Julia 1.3.0 GNU gdb (GDB) 8.3.1 gcc version 9.2.0 (GCC) gdb でソースコードリーディング gdb で追う場合ソースコードからビルドする必要がある。 $ wget https://github.com/JuliaLang/ju…

Julia - Channel コードサンプル

環境 Julia 1.2.0 Golang で Channel を使ってようやく Julia の Channel の動きを理解できた気がする。 capa = 10 c = Channel(capa) function f(c) for i in 1:10 put!(c, i) end end function g(c) for i in c sleep(0.5) println("From g: ", i) end pri…

Intro to Relational Databases | Udacity を受講した

Udacity で開講されている Intro to Relational Databases を受講してみた。 www.udacity.com 日々、雰囲気で SQL を書いていて基礎知識がないなぁと感じていたので受講してみた。終了するまでに4時間21分費やした。 講義内容としては SQL の基本的な構文(se…

Configuring Linux Web Servers | Udacity を受講した

Udacity で開講されている Configuring Linux Web Servers を受講してみた。 www.udacity.com TIMELINE: Approx. 1 Weeks という講義だけあって重い講義ではないので1日でサクッと終わらせた。 講義では Vagrant を使ってそこに Ubuntu Server を建てるとい…

Introduction to Cybersecurity with Chronicle | Udacity を受講した

ネットワークの勉強の一環で Udacity の Introduction to Cybersecurity を取ってみた。 www.udacity.com 講義動画自体は長くても1分程度で動画を見ると言うよりも各ページに書かれた説明を読んでいくという形だった。 Introduction ということもありセキュ…

AWS Developer: Building on AWS | edX を Terraform を使ってやり直してみた

AWS が edX で開講している AWS Developer: Building on AWS を Terraform でやり直してみた。 www.edx.org この講義では最終的に下図のようなシステムを構築する。 以前にもこの講義を受講したことがあり、その時は講義どおりマネジメントコンソールからポ…

「ふつうのLinuxプログラミング」を読んだ

日頃 Linux を使っているものの、Linux について全然理解していないなぁと思っていたので「ふつうの Liunx プログラミング」を読んでみた。 読み終わるまでに22時間12分かかった。 ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミ…

Terraform で 「Amazon Web Services 基礎からのネットワーク&サーバー構築」をやり直す

Terraform の練習がてら「Amazon Web Services 基礎からのネットワーク&サーバー構築」の内容を全て Terraform でやり直してみました。 Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版作者:玉川憲,片山暁雄,今井雄太,大澤文孝出版社/メー…

自作キーボード - Manta40 を作った

少しずつ作っていた自作キーボード "Manta40" がようやく完成しました。 私は軽いキータッチが好きなのでスイッチは Gateron Clear (35 g)。 はんだごてを使うのは久リぶりだったので手こずりましたがなんとか動くものが作れました。 私は Dvorak user なの…

Julia - プロンプトを変える

この記事は Qiita に 2018/08/15 に投稿したものです。2020/3/26 移行しました。 Julia v1.0 への移行作業のために v0.7 と v1.0 を行ったり来たりしているのですが、色々と動作確認しているうちにどっちのバージョンを使っているのか失念することが度々あっ…

Julia - Lisp を作る

環境 Julia 1.1.1 初めての Lisp 作り 最近、Software Design (2017/05, 08, 09)で連載されていた五味さんの「人工知能時代の Lisp のススメ」を読んだので、Julia で Lisp を作ってみました。 とりあえず、五味さんの SDLisp を機械的に Julia に翻訳しただ…

Julia - PostgreSQL に接続する

環境 ArchLinux PostgreSQL 11.5 Julia 1.1.1 LibPQ.jl 0.11.0 Tables.jl 0.2.10 Docker で PostgreSQL を立ち上げる $ docker run -d --name postgres -e POSTGRES_PASSWORD=test -p 5432:5432 postgres:11.5 Julia から PostgreSQL に接続する julia> usin…

Julia - MySQL への接続・データを CSV・JSON で保存する

環境 ArchLinux MySQL 8.0 Julia 1.1.1 MySQL.jl 0.7.0 JSON.jl 0.21.0 Tables.jl 0.2.10 Docker で MySQL を立ち上げる $ docker run --name mysql -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 mysql:8.0 # 以下 MySQL 8.0 の場合は必要 $ cd ~/.julia/pa…

Julia - 配列の実装について

2つの配列を結合するときは何故 push! よりも append! が推奨されるのか? sizehint! を何故使うべきなのか? とかあたりの話。今回は一次元配列 (Vector) のみの話で、多次元配列は扱いません。 最近今更ながらデータ構造とアルゴリズムを勉強しているのです…

Julia - 並列計算用のリダクション演算子を作る

ふと「そういえば、Juliaのリダクション (reduction) は分かりづらかったなぁ」と思い出したので複数の変数をリダクションする方法と自前のリダクション演算子(reduction operator, reducer)の作り方について紹介します。 環境 Julia での for 文の並列化 そ…

Julia - パッケージを効率よく読み込む ~ Requires.jl のすすめ ~

Julia 1.0 が出てから半年経って Julia に慣れてきた頃なのか、私のパッケージの作り方の記事が地味に見られているようなので、パッケージを作るときに知っておいて損はない Requires.jl について紹介します。 goropikari.hatenablog.com 環境 三種の神器 Re…

Julia - PackageCompiler.jl を使って Plots.jl を早くする

PackageCompiler.jl の README によるとついに Plots.jl がコンパイルできるようになったらしいので試してみました。 github.com 環境 Plots.jl をコンパイルする スピードを比較 Linux デフォルト PackageCompiler Windows 10 デフォルト PackageCompiler m…

Julia - IJulia のセルで Bash コマンドを使う

環境 Julia 1.1.0 OS: ArchLinux IJulia で ; から始めると Shell mode になるので Bash*1 コマンドが使えるけれども、2行以上書くと実行できなくなる。 run を使えば長々書くことも出来るけれども、それは面倒だなぁというときは以下のマクロを定義する。 #…

Julia - run を使って Julia の中から Julia を実行する方法

環境 Julia 1.1.0 Julia の中から Julia を実行する Julia を使っていると、 Julia の中から run を使って Julia を起動したいと思うことがあると思います。 このように run(`julia ex.jl`) ただこの方法はすでに julia へ PATH が通っていれば良いのですが…

Julia - キーボードから入力を受ける

環境 キーボードからの入力 任意の個数の入力を受ける 特定の文字が入力されたら停止する方法 Ctrl-D で停止する方法 環境 OS: ArchLinux Julia 1.0.5 ※ 2019/12/22 Base.prompt の例を追加 キーボードからの入力 Python3でいうところの input はJuliaではBa…

Julia - Aizu Online Judge の問題を Julia で解く

Aizu Online Judge (AOJ) を Julia で遊ぶための野良パッケージを作ったので使い方を紹介します。 AOJ とは? このパッケージで出来ること・出来ないこと 環境 インストール 使い方 問題を選ぶ プログラムを作る サンプルでテストする 判定する 制限時間を変…

Julia - @enum で割り当てられた番号から変数名を知る

環境 Julia 1.0.1 string(EnumName(数字)) とするとその数字を割り当てられた変数の名を文字列で取得することができる。 julia> @enum Fruit apple orange kiwi julia> apple apple::Fruit = 0 julia> orange orange::Fruit = 1 julia> Int(apple) 0 julia> …

Julia - 標準入力・出力・エラー出力先を変える

環境 入出力先を変える 使いどころ(?) 参考 環境 OS: ArchLinux Julia 1.0.1 入出力先を変える Python だと stdout を気軽に上書きして標準出力先をファイルにできますが、Julia の場合はそれができません。 julia> f = open("out.txt", "w") IOStream(<file out.txt>) jul</file>…

Julia - VSCode で Julia 1.0 を使う (仮)

julia-vscode v0.11.0 から Julia 1.0 に対応したのでこの記事を読む必要はありません。master ブランチのものを入れたい場合は手順だけ参考になるかもしれません。(2019/1/29) 現状、VSCode の Marketplace から入れることの出来る Julia の拡張機能を使う…

Julia - 関数の broadcast ( f.(arg...) ) をオーバーロードする方法

どこで使うと便利なのかわからないけれど、一応できたのでメモ。 公式ドキュメントだけでこの方法を思いつく人は相当訓練された Julian だと思う(思いたい)。 Julia 1.0 でのやり方 f.(arg...) の挙動を変えたい場合、broadcast でなく、broadcastedをオーバ…

Julia - 定義した method を消す方法

環境 無駄な method を消す pretty-print 落とし穴 参考 LICENSE 環境 Julia 1.0 無駄な method を消す Julia といえば多重ディスパッチが有名ですよね*1。 julia> f(x::Int64) = println("Intだよ") f (generic function with 1 method) julia> f(x::Float6…

Julia - 野良パッケージをパッケージ名だけで追加できるようにする: Custom General Repository の作り方

Julia でパッケージを追加する場合、pkg mode で (v1.0) pkg> add Example などとすれば良いですよね、公式パッケージ*1の場合は。 野良パッケージの場合は次の例のように github の URL を打ち込まないといけません。 (v1.0) pkg> add https://github.com/g…