ujimushi(@旧sradjp(15364))の日記

旧スラドの日記の引越先です

漢直による入力をT-CodeからTry-Codeに移行

相変わらず日本語入力には漢直を利用しています。すらすらと入力できる運指に変えたいと思っていて検討もしていたのですが,全然そちらの方は進んでいません。

ただ,歳もとってかなり漢字の取扱いがいいかげんになってきたので一念発起。T-Codeよりも直接入力数の多いTry-Codeを利用しはじめました。

Try-Codeは単純にT-Codeの空き運指に漢字を突っ込み,さらに第一打にスペースを加えることで各漢字の「裏テーブルの漢字」を入力する仕組みです。

自分はあまりスピードにこだわらないので,この「スペース」を記号<に割り合てフットペダルで入力できるようにしています。

次の動画が入力例です。USBカメラの入力が変なので非常に視聴しづらい動画になっています。(例によって2ヵ月視聴がなければ自動的に削除されます)

「■」が表示された時にフットペダルで入力をしています。

T-Codeよりも入力可能な漢字数が多いので「例の次のような文章」も直接入力可能です。

まだ全然漢字が覚えられていないので,入力可能な漢字はごく一部です。

自作の漢直を作るまではしばらくこれでやってみようかと思います。

Emacsのeglot-jlをLanguageServer.jl Ver.6系で利用する

はじめに

Emacs上でJulia言語を開発する時に私はeglot-jlを使っているのですが, LanguagerSever.jlのVer 5系では依存パッケージのバージョンがJulia 1.3系に対応せず また,LanguageServer.jlのVer 6系はeglot-jlが対応せず, といった感じでした。

今回の日記は,どうやったらバージョン6系のLanguageServer.jlをeglot-jlで動かせるのかということと, LanguageServer.jlに対する個人的な愚痴という内容になります。

LanguageServer.jlの5系と6系の違いについて

少し調べた結果他のパッケージから利用する上で次の2点が大きく違います。

  • SymbolServer.jlの依存関係が無くなった
  • LanguageServerInstanceのコンストラクタの仕様が変更された

というところです。特にLanguageServerInstanceの コンストラクタ仕様の変更については個人的にはクソったれと思っていて, ヘルプ表示のドキュメントは依前のバージョン5から変更されておらず, これでは他の開発者からそっぽを向かれてもやむをえないと個人的には思います。

SymbolServerとの依存関係が無くなった

これは,バージョン6ではJuliaWorkspaces.jlを 利用していこうということのようで,以前のSymbolServerの機能もここに含まれています。 という訳で,以前指摘した内容の不具合っぽい 挙動も当然受け継がれていました。

直接returnで抜けているところをreturn shaとすればエラーは回避されるかと思います。

function sha2_256_dir(path, sha=zeros(UInt8, 32))
    (uperm(path) & 0x04) != 0x04 && return sha
    startswith(path, ".") && return sha
    if isfile(path) && endswith(path, ".jl")
        s1 = open(path) do f
            sha2_256(f)
        end
        sha .+= s1
    elseif isdir(path)
        for f in readdir(path)
            sha = sha2_256_dir(joinpath(path, f), sha)
        end
    end
    return sha
end

※2026-10-30追記

なお,上記の修正は既に対策がコミットされているようなので,次のバージョンでは対策されるようです。JuliaWorkspaces.jlはAIを利用してメンテナンスが最近進んでいるようなので,新しいバージョンのLanguageServer.jlへの移行は急いだ方がいいでしょう。

eglot-jlパッケージ側での対策としては

  • プロジェクトからSymbolServer.jlを外すこと
  • ソース内でusing SymbolServerとしているところを外すこと

が必要となります。

LanguageServerInstanceのコンストラクタの仕様変更

ここでは, Ver.5のコンストラクタと Ver.6のコンストラクタ を比べてみます。

バージョン5のコンストラクタについては次の通りです。

function LanguageServerInstance(
    @nospecialize(pipe_in), 
    @nospecialize(pipe_out), 
    env_path="", 
    depot_path="", 
    err_handler=nothing, 
    symserver_store_path=nothing, 
    download=true, 
    symbolcache_upstream = nothing, 
    julia_exe::Union{NamedTuple{(:path,:version),Tuple{String,VersionNumber}},Nothing}=nothing
)

次にバージョン6のコンストラクタについては次の通りです。

function LanguageServerInstance(
    @nospecialize(pipe_in), 
    @nospecialize(pipe_out), 
    env_path="", 
    err_handler=nothing, 
    symserver_store_path=nothing, 
    julia_exe::Union{NamedTuple{(:path,:version),Tuple{String,VersionNumber}},Nothing}=nothing)

なんとdepot_pathの入力項目が削除されています。そのくせdocstringは前のままなんですよね。

eglot-jl側では第4引数のdepot_pathまで指定しようとするのでそのままVer.6を利用しようとしても エラーになります。

対応

  1. eglot-jlのソースをEmacsからパッケージを認識するディレクトリ内に配置
  2. eglot-jl.jlのソースを修正
  3. eglot-jlのProject.tomlからLanguageServerの依存バージョンを5→6にする
  4. eglot-jlのパッケージからSymbolServerを削除
  5. eglot-jlのパッケージの依存関係を最新に

1. eglot-jlパッケージの配置

Emacsが認識するフォルダ内にeglot-jlパッケージのソースを配列します。 elpa等からインストールしている場合は,まずそのパッケージ削除しておいた方が いいかもしれません。 面倒ならelpaパッケージを直接いじっても自己責任でなら問題ないかもしれません。

2. eglot-jl.jlのソースを修正

eglot-jl.jlのソースリストを次のように変更します。 ポイントは「depot_path関連の削除」「SymbolServer関連の削除」です。

# Usage:
#   julia --project=path/to/eglot-jl path/to/eglot-jl/eglot-jl.jl [SOURCE_PATH]


# For convenience, Pkg isn't included in eglot-jl
# Project.toml. Importing Pkg here relies on the standard library
# being available on LOAD_PATH
import Pkg


# Resolving the environment is necessary for cases where the shipped
# Manifest.toml is not compatible with the Julia version.
for _ in 1:2
    try
        Pkg.resolve(io=stderr)
        @info "Environment successfully resolved"
        break
    catch err
        # Downgrading from 1.6 to 1.5 sometimes causes temporary errors
        @warn "Error while resolving the environment; retrying..." err
    end
end


# In julia 1.4 this operation takes under a second. This can be
# crushingly slow in older versions of julia though.
Pkg.instantiate()


# Get the source path. In order of increasing priority:
# - default value:  pwd()
# - command-line:   ARGS[1]
src_path = length(ARGS) >= 1 ? ARGS[1] : pwd()


# Get the project environment from the source path
project_path = something(Base.current_project(src_path), Base.load_path_expand(LOAD_PATH[2])) |> dirname


# Make sure that we only load packages from this environment specifically.
empty!(LOAD_PATH)
push!(LOAD_PATH, "@")


using LanguageServer


@info "Running language server" env=Base.load_path()[1] src_path project_path
server = LanguageServerInstance(stdin, stdout, project_path)
run(server)

3. LanguageServerの依存バージョンを5→6にする

Project.tomlの該当部分を次のように変更します。

[compat]
LanguageServer = "6"
julia = "1"

4. eglot-jlのパッケージからSymbolServerを削除

cd "eglot-jlのパッケージのpath" としてからパッケージモード内で rm SymbolServerとしてSymbolServerを削除します。 Project.toml内のSymbolServer=...で始まる行を削除してもいいかもしれませんが、 よく分かりません。

5. eglot-jlのパッケージの依存関係を最新に

4.のパッケージモードに入った状態でupdateを実行します。 eglot-jlの依存パッケージが全て最新に更新されます。

Ver.6系のLanguageServerについて

ボーッと利用しているだけだとVer.6にしたメリットはあまりないのですが,JuliaWorkspacesを利用していることにより,プロジェクト毎のカスタマイズに対応している感じになっているかもしれません。

デフォルトでのエラー表示はかなり控えめになっていて,どの程度が適切かこれから色々試してみる予定です。

さいごに

EmacsでJulia言語を利用するのはイバラの道です。 といっても世の中の理不尽に慣れたアラ60には ボチボチ対応できる範囲といったところです。

ただ,Julia言語のマイナー環境での利用は こういう細かい理不尽が積み重なるところもあるので, 継続利用には体力が必要かもしれません。

Julia言語 雑感(2026年夏(6月〜10月))

はじめに

個人的にスーパーエルニーニョの影響を過剰に気になる今日この頃, 皆さんいかがお過ごしでしょうか?

日記の更新をさぼっていると夏はおろかすっかり秋,冬の足音が聞こえそうな 感じになってしまいました。

書きかけては投稿できず,もう既にほとんど忘れているのでその一部にはなるのですが, 色々あったJulia言語界隈を個人の好みでピックアップする「Julia言語雑感」 久しぶりにお送りします。

Tiobe Index Julia言語6〜8月は26位前後も9月は21位そして10月は18位とTop20入り

  • 2026年6月 26位 0.53%
  • 2026年7月 27位 0.63%
  • 2026年8月 26位 0.7%
  • 2026年9月 21位 0.74%
  • 2026年10月 18位 0.88%

9月までの雑感

今年はJuliaConが8月にあり,9月の順位が大きく上がっている等 私の偏見に満ちた見方では明らかにJuliaCon効果がありそうです。

また,最近Julia言語でAIを用いてMCPサーバーを立てたというGithubプロジェクトが乱立したので, かなり見かけの活発さは増えているのも関係しているかもしれません。

ネット上の日本語の記事の更新は明らかに減っているのですが, その分定番のJulia言語の記事が検索でも引っかかるようになっているのかもしれません。

他の言語との比較としては,RubyやPerlよりJulia言語の方が上なのは少しおかしい気がします。 個人的に今回の順位で注目しているのはJulia言語と役割の被るMATLABよりも順位が上になったことです。

何となくオープンな処理系の順位がやや上がっている気がするのは多分自分の思い違いでしょう。

10月の雑感

18位のトップ10入りはちょっとびっくりです。ただJulia言語のレーティングの履歴を見ると, 3年に一度ぐらい訪れる上振れ期間とも言えそうです。

さて以前の日記の予想は見事に外れた訳ですが,何故ここまでJulia言語の順位が上振れしているかをまた個人的に妄想してみます。

2025年5月からの上昇についてはGoogle ColaboratoryがJulia言語に正式対応というのが直接の理由ではないかと想像しています。

また、Matlabのレーティングの履歴と比較すると,最近はJulia言語は上昇,Matlabは下降と傾向は逆となっています。 AIが普及しはじめたことによって,たとえ情報が少なかったりサポートがなかったりしても, ソースが公開されていればAIが学習しやすく,マイナー言語の利用の後追しになっているかもしれません。

データ分析用の利用しやすい言語,というのはR言語も含めて一部で求められているところではないかと思います。

JuliaCon Global 2026開催

JuliaCon Golbal 2026が 8月10〜15日にヨハネス・グーテンベルク大学マインツで開催されました。

今年は自分にとってのお盆休みに開催され,グータラしていたのでリアルタイムでの視聴はできていません。 というかまだ動画の視聴もできていないのが現状です。

更例となった日本人(と私には思われた)関係の発表について,リンクを紹介したいと思います。 間違っていたらごめんなさい。

JETLS:Bringing Julia’s runtime into language-server analysis

言わずと知れた「JETの人」。Shuhei Kadowakiさんの発表です。 昨年に引き続き「JETLS」の話となっています。

JuliaQCD: A Pure Julia Framework for Lattice QCD and Its Extension with Compiler-Level Automatic Differentiation

日本の研究所が提案した「計算物理学ミニシンポジウム」の中のうちの一つ。Yuki Nagaiさんの講演です。 量子力学的な原子の格子を取扱うパッケージに関する内容だと思われます。 実はもう数十年も前になる大学生の時に表面物理学の実験をやっている研究室に配属されていて, もしウン十年前にあったら便利に使わせていただいたかもしれません。

Parameter optimization of domain-wall fermion based on machine-learning framework

上の方と同じく「計算物理学ミニシンポジウム」の中のうちの一つ。 Kenta Yoshimuraさんの発表です。

Testability-First Design for Few-Body Systems Physics

さらに「計算物理学ミニシンポジウム」の中のうちの一つ。

Shuhei Ohnoさん(とMartin Mikkelsenさん)の発表です。Julia言語のクラウド・ファンディングを成功させ,日本のJulia言語界をしょって立つ, とおっしゃった若手研究者と言えば分かりやすいでしょうか。

JuliaCon 2025 Globalでロストバゲッジしたという不運に見舞われたというのが個人的に印象に残っています。

内容の方は発表の方をご確認下さい。

VisualizingLQCD.jl: Visualization of quantum vacuum

もう一つ「計算物理学ミニシンポジウム」の中のうちの一つ。 Akio Tomiyaさんの発表です。

この後に紹介しますが,JuliaCon Local Tokyo 2026 の仕掛け人でもあると個人的に邪推している方です。

Let's run Julia everywhere from mobile to web

特にiphone等のmobile上でJulia言語を動かす方法について, terasakisatoshiさんの発表です。

JuliaCon Local Tokyo 2026 2026年12月4,5日開催予定

次のXでのAkio Tomiyaさんのポストによると,JuliaCon Localが今年の12月4日(金)・5日(土)に東大柏キャンパスで開催予定とのことです。 なお,もう既にJuliaCon Local Tokyo 2026の公式サイトは存在するようですね。

ただ,プログラムの内容は最終決定ではないみたいな記述もあるので,「後報を待て」といった感じでしょうか。

最新の情報として

JuliaCon Local Tokyo 2026: Call for proposalsとあるので, 発表の募集とかが始まっているでしょうか。

なおJulia言語関係のイベント等はJulia Community - Standardsに従う必要があります。 自分は守れてないので、イベントには参加できていません。

Julia v1.13.0リリース → 現在最新はv1.13.2

Julia Discourseのアナウンスにもあるように,9月10日 Julia言語の最新安定版 v1.13.0がリリースされました。

まだ,自分も知ったばかりで何とも言えないところですが,特にREPLの機能拡張が挙げられていて,機能の被るOhMyREPL.jlの動作は推奨されなそうな感じです。 この後もあれが動かない,これが動かない,といった話題がJuila Discourseで話題になっています。

現在の最新版はv1.13.2です。

SpecialFunction.jl erfinv関数のバグっぽい挙動

Xで次のようなポストを見かけました。

また,Bug: erfcinv(2big"0.8") does not terminateというissueも同じ内容ですね。

これは,一つ前との変化量が2eps(abs(返す予定の値))以内になるまで収斂演算を続けるという処理があるのですが,

sqrtπhalf = sqrtπ * big(0.5)
tol = 2eps(abs(x))
while true # Newton iterations
Δx = sqrtπhalf * (erfc(x) - y) * exp(x^2)
    x += Δx
    abs(Δx) < tol && break
end

これ sqrtπhalf*exp(x^2)のところが曲者で,例えば上のbig(0.9412)の入力値とかだと, xは1.3362096136535901付近。となるとsqrtπhalf*exp(x^2)の値は5.283814...となり, この部分は変化の5倍にしていることになる…

となると,変化量が1binより大きな値で振動するケースだと永久にループから抜け出せない, ということになります。

個人的には1桁精度が悪くなっても問題ないので,2eps → 10epsぐらいでもいいかな?と思います。 多分この辺り厳密にするにはプルリク等での議論が必要とは思いますが個人的に利用するなら これぐらいのいい加減さでOKです。

また,次のようなポストもありました。

どうも係数のコピペ(というか写経)をミスっているようです。

本来は大元にイシューを上げるなりプルリクを上げるのでしょうが,面倒だし プルリクも放置されたりすることが多いので不適切なところだけパッチを当てて自分だけで利用することを考えます。

次のように実装する感じでしょうか。 次のソースをincludeした後patch_erfinv_and_erfcinv_for_bigfloat(),patch_erfinv_and_erfcinv_21678_to_21670() を実行することでパッチ完了です。

ただ,元のソースと比較すると精度が悪くなっていたりするので自己責任でご利用下さい。

using SpecialFunctions

function patch_erfinv_and_erfcinv_for_bigfloat()
    @eval SpecialFunctions begin
        function _erfinv(y::BigFloat)
            xfloat = erfinv(Float64(y))
            if isfinite(xfloat)
                x = BigFloat(xfloat)
            else
                # Float64 overflowed, use asymptotic estimate instead
                # from erfc(x) ≈ exp(-x²)/x√π ≈ y  ⟹  -log(yπ) ≈ x² + log(x) ≈ x²
                x = copysign(sqrt(-log((1-abs(y))*sqrtπ)), y)
                isfinite(x) || return x
            end
            sqrtπhalf = sqrtπ * big(0.5)
            tol = 10eps(abs(x)) # 精度を1桁悪くする
            while true # Newton iterations
                Δx = sqrtπhalf * (erf(x) - y) * exp(x^2)
                x -= Δx
                abs(Δx) < tol && break
            end
            return x
        end

        function _erfcinv(y::BigFloat)
            yfloat = Float64(y)
            xfloat = erfcinv(yfloat)
            if isfinite(xfloat)
                x = BigFloat(xfloat)
            else
                # Float64 overflowed, use asymptotic estimate instead
                # from erfc(x) ≈ exp(-x²)/x√π ≈ y  ⟹  -log(yπ) ≈ x² + log(x) ≈ x²
                if yfloat < 1
                    x = sqrt(-log(y*sqrtπ))
                else # y must be close to 2
                    x = -sqrt(-log((2-y)*sqrtπ))
                end
                # TODO: Newton convergence is slow near y=0 singularity; accelerate?
                isfinite(x) || return x
            end
            sqrtπhalf = sqrtπ * big(0.5)
            tol = 10eps(abs(x)) # 精度を1桁悪くする
            while true # Newton iterations
                Δx = sqrtπhalf * (erfc(x) - y) * exp(x^2)
                x += Δx
                abs(Δx) < tol && break
            end
            return x
        end
    end
end

function patch_erfinv_and_erfcinv_21678_to_21670()
    @eval SpecialFunctions begin
        function _erfinv(x::Float64)
            a = abs(x)
            if a > 1.0
                throw(DomainError(a, "`abs(x)` cannot be greater than 1."))
            elseif a == 1.0
                return copysign(Inf, x)
            elseif a <= 0.75 # Table 17 in Blair et al.
                t = x*x - 0.5625
                return x * @evalpoly(t, 0.16030_49558_44066_229311e2,
                                     -0.90784_95926_29603_26650e2,
                                      0.18644_91486_16209_87391e3,
                                     -0.16900_14273_46423_82420e3,
                                      0.65454_66284_79448_7048e2,
                                     -0.86421_30115_87247_794e1,
                                      0.17605_87821_39059_0) /
                           @evalpoly(t, 0.14780_64707_15138_316110e2,
                                     -0.91374_16702_42603_13936e2,
                                      0.21015_79048_62053_17714e3,
                                     -0.22210_25412_18551_32366e3,
                                      0.10760_45391_60551_23830e3,
                                     -0.20601_07303_28265_443e2,
                                      0.1e1)
            elseif a <= 0.9375 # Table 37 in Blair et al.
                t = x*x - 0.87890625
                return x * @evalpoly(t, -0.15238_92634_40726_128e-1,
                                      0.34445_56924_13612_5216,
                                     -0.29344_39867_25424_78687e1,
                                      0.11763_50570_52178_27302e2,
                                     -0.22655_29282_31011_04193e2,
                                      0.19121_33439_65803_30163e2,
                                     -0.54789_27619_59831_8769e1,
                                      0.23751_66890_24448) /
                           @evalpoly(t, -0.10846_51696_02059_954e-1,
                                      0.26106_28885_84307_8511,
                                     -0.24068_31810_43937_57995e1,
                                      0.10695_12997_33870_14469e2,
                                     -0.23716_71552_15965_81025e2,
                                      0.24640_15894_39172_84883e2,
                                     -0.10014_37634_97830_70835e2,
                                      0.1e1)
            else # Table 57 in Blair et al.
                t = inv(sqrt(-log1p(-a)))
                return @evalpoly(t, 0.10501_31152_37334_38116e-3,
                                 0.10532_61131_42333_38164_25e-1,
                                 0.26987_80273_62432_83544_516,
                                 0.23268_69578_89196_90806_414e1,
                                 0.71678_54794_91079_96810_001e1,
                                 0.85475_61182_21670_27825_185e1,
                                 0.68738_08807_35438_39802_913e1,
                                 0.36270_02483_09587_08930_02e1,
                                 0.88606_27392_96515_46814_9) /
                      (copysign(t, x) *
                       @evalpoly(t, 0.10501_26668_70303_37690e-3,
                                 0.10532_86230_09333_27531_11e-1,
                                 0.27019_86237_37515_54845_553,
                                 0.23501_43639_79702_53259_123e1,
                                 0.76078_02878_58012_77064_351e1,
                                 0.11181_58610_40569_07827_3451e2,
                                 0.11948_78791_84353_96667_8438e2,
                                 0.81922_40974_72699_07893_913e1,
                                 0.40993_87907_63680_15361_45e1,
                                 0.1e1))
            end
        end

        function _erfcinv(y::Float64)
            if y > 0.0625
                return erfinv(1.0 - y)
            elseif y <= 0.0
                if y == 0.0
                    return Inf
                end
                throw(DomainError(y, "`y` must be nonnegative."))
            elseif y >= 1e-100 # Table 57 in Blair et al.
                t = 1.0 / sqrt(-log(y))
                return @evalpoly(t, 0.10501_31152_37334_38116e-3,
                                 0.10532_61131_42333_38164_25e-1,
                                 0.26987_80273_62432_83544_516,
                                 0.23268_69578_89196_90806_414e1,
                                 0.71678_54794_91079_96810_001e1,
                                 0.85475_61182_21670_27825_185e1,
                                 0.68738_08807_35438_39802_913e1,
                                 0.36270_02483_09587_08930_02e1,
                                 0.88606_27392_96515_46814_9) /
                     (t *
                     @evalpoly(t, 0.10501_26668_70303_37690e-3,
                               0.10532_86230_09333_27531_11e-1,
                               0.27019_86237_37515_54845_553,
                               0.23501_43639_79702_53259_123e1,
                               0.76078_02878_58012_77064_351e1,
                               0.11181_58610_40569_07827_3451e2,
                               0.11948_78791_84353_96667_8438e2,
                               0.81922_40974_72699_07893_913e1,
                               0.40993_87907_63680_15361_45e1,
                               0.1e1))
            else # Table 80 in Blair et al.
                t = 1.0 / sqrt(-log(y))
                return @evalpoly(t, 0.34654_29858_80863_50177e-9,
                                 0.25084_67920_24075_70520_55e-6,
                                 0.47378_13196_37286_02986_534e-4,
                                 0.31312_60375_97786_96408_3388e-2,
                                 0.77948_76454_41435_36994_854e-1,
                                 0.70045_68123_35816_43868_271e0,
                                 0.18710_42034_21679_31668_683e1,
                                 0.71452_54774_31351_45428_3e0) /
                  (t * @evalpoly(t, 0.34654_29567_31595_11156e-9,
                                 0.25084_69079_75880_27114_87e-6,
                                 0.47379_53129_59749_13536_339e-4,
                                 0.31320_63536_46177_68848_0813e-2,
                                 0.78073_48906_27648_97214_733e-1,
                                 0.70715_04479_95337_58619_993e0,
                                 0.19998_51543_49112_15105_214e1,
                                 0.15072_90269_27316_80008_56e1,
                                 0.1e1))
            end
        end
    end
end

Julia Discourseでは白熱した議論がたくさん

この数ヵ月Julia Discourseでは色々AI関連の議論がありました。

そしてAIを利用したモジュールの紹介もたくさんありました。

また,議論が熱くなり過ぎてアク禁になった方もいましたし,一度自分が公開している githubのレポジトリを非公開にされた方もいました。

こういうJulia言語ユーザーの俗っぽいやり取りを見られるのもJulia Discourseの魅力かもしれません。

さいごに

とうとう4半期に一回すら投稿できなくなってきました。 この日記の更新が無くなるのももうすぐかもしれません。

T-Code IME for Android

T-Code IMEなるものが出ているらしかったので 使ってみました。

漢直の部分は非常によく出来ています。

ただ,現時点では自分の用途には合わないなぁ,と思いました。

実は,現時点ではこのIME単体で半角の英字(数字はまぁ2打鍵の入力でも)が入力できません。

また,T-Codeって半角英数との切り替えがスムーズというのが売りだと思っていたのですが, 現時点では日本語しか入力ができません。 直接入力との切替機能が現時点ではないのです。

該当のキーを入力してスペースを押すとそのキーの半角文字が入力できるのが ラインプット由来の漢直の特徴だと思ったのですが,そういう機能は現時点では無さそうです。

プログラマとかにT-Code等の漢直を使っている人が多いのは, 半角英数との切替機能が豊富といったところもあると思うのですが, 最近は違うのでしょうか?

自分がAndroidを利用する時には,ほぼ先頭の数文字を入力して補完に任せて 情報を検索するだけのことが多いので,現状ではこのIMEは使わないなぁと思いました。

キーボードを接続してなら入力は可能だと思うのですが, それなら,UserlandやTermuxのEmacsを動作させてもそんなに変わらない, というか普段使っている環境と同じになるので,そちらの方が使用感が良かったりします。

日本語さえ入力できればいいという方には現時点でもおすすめできるかもしれません。

Julia言語 雑感(2026年5月手遅れ版)

はじめに

ようやくひのき花粉の影響がなくなってきた今日この頃, と思っていたら最高気温30度をうかがう今日この頃, エアコンの購入で手痛い出費の今日この頃, ぼちぼちと偏屈ミーハー系Julia言語ユーザーの独断と偏見による雑感をお送りします。

と思っていたのは5月の半端,現在は6月の6日。手遅れ感満載の雑感をお送りします。

2026年5月のTiobe Index,Julia言語の順位は33位

今月もいつものTIOBE IndexのJulia言語の順位の紹介です。

Julia言語の2026年4月の順位は33位。Ratingは0.43%でした。

Julia言語的にいえば先月から特に大きな変動はありません。ただ,Ratingがやや下がっているのが気にかかります。 生成AIが活発に利用されるようになってから,他のプログラミング言語ではかなりネット上の 記事が増えた印象がありますが,Julia言語はそんなに変わらないような気がします。

また,QiitaやZenとかを見ているとAIですっごくいい感じに作っているJulia言語関連の記事があるのですが, 意外とAIで作成した記事はGoogleのランクが上がりづらかったりするので,その辺も影響しているかもしれません.

そのため,この数ヵ月はJulia言語の順位が徐々に下がるのではないかと予想しています。

This month in Julia world - 2026-03&04

いつも有用な情報が掲載されているThis month in Julia world, 3月と4月まとめての記事がJulia Discourseに掲載されています。

あまり確認していませんでしたが,GPUや並列処理周りのパッケージの紹介が多いような気がします。

Julia言語処理系の動きとしてはv1.13.0-rc1が公開されて,いよいよ次のv1.13のリリースが近くなってきた感じです。

なお少し前の記事で指摘された 不具合が実はv1.12.6でうまく改修できておらず,これまた注意が必要です。

Pluto がバージョン1.0に

出落ち感がありますが,先日Plutoのバージョンが1.0になったそうです。

日本語化も一部されていますし,androidのタブレットでUserland上のubuntuでサーバーを動作させておいて, ブラウザで利用する,みたいなこともできます。

お手軽に動作環境を作るにはいいパッケージです。

さいごに

すっかり投稿が遅れてしまいました。

6月投稿できるかどうか非常に心配な今日この頃です。

Julia言語 雑感(2026年4月)

はじめに

今年もひのき花粉にやられまくっている今日この頃, 少し遅れましたが,今月も孤独ミーハー系Julia言語ユーザーの独断と偏見による雑感をお送りします。

2026年4月のTIOBE Index,Julia言語の順位は32位

今月もいつものTIOBE IndexのJulia言語の順位の紹介です。

Julia言語の2026年4月の順位は32位。Ratingは0.5%でした。 Ruby,Lua,Lispのすぐ下というのは 個人的には比較的納得感のある順位だといえるのではないでしょうか。

Julia言語 v1.12.6リリース

julia Discourseの記事によると, Julia言語 v1.12.6が4月11日にリリースされたようです。

それ以前のバージョンでは色々と謎の挙動とかあったようですが今回は直っているでしょうか?

XLSX.jlが個人レポジトリからJuliaDataに移管

ここ最近,XLSX.jlがgithubのJuliaDataに移管しました。 ということで,この1ヵ月かなり更新が進んでいるようです。

まだ内容の方はチェックできていませんが,色々な機能が追加されていると思います。 逆に言うと今まで動いていたものが動かなくなる可能性もある訳で,ここしばらくは個人的に目が離せないといった感じかと思います。

Kaimon.jl(Julialang MCP Server)

AIエージェント等にJulia言語を実行させるためのMCPサーバーを簡単に構築するためのパッケージです。 「Kaimon.jl」と日本語のもじりなのが面白いです。

まだ内容の方は確認できていませんが,AIエージェントからJulia言語を実行させるための 仕組みとして便利に使えるのではないかと思います。

とはいうものの自分は全然AIを利用したコーディングエージェントとか,まだ全然使いこなせていません。

さいごに

だんだんと興味が薄れてきて,いつ書かなくなるかというような感じではあるのですが, 何とか今月も書くことができました。 とはいってもわりと気まぐれなので,気が向けば多分何か書くでしょう。多分。