non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

Node学園 30時限目に行ってきた

背景

当日早速ブログ上げられてる方がいるけれど、自分の備忘録がてら記事にする。

Node学園 30時限目会場までの道のり

数日前、GW中に俺だけ起きて子供たちと奥さんが沖縄の方に出かけるので、残り数人だったけど枠が空いていた Node学園 30時限目に申し込んでよいかお伺いを立てて、無事承認されることで嫁Authをクリア!

当日までの間、いつも以上に細かな俺の素行を参加を人質に取ったように脅され続けるなど。

昨年の東京Node学園祭2017の2日目に行った会場と同じ場所かつ、常駐先からも近いので、 大分早く、会場周辺に着いた。

19時になって、会場のビルの2Fに行って受付の方からカードをもらい、エレベーター。 乗り換えを去年経験してなかったら、ちょっとあたふたしたと思われるが、2台目のエレベーターも スムーズに乗れた。

41Fに到着、が、どっちに行くんだっけ?っとまごついていたら、こっちですよと、親切な方が、 よくよく見たら、古川会長(@yosuke_furukawa)でした。会長の案内で無事会場に入れました! ありがとうございました。

発表内容と感想など

祝Node-v10リリース。これまでのNodeの振り返り by Shigeki Ohtsu

始めは、Qiitaで自分をフォローしてくださっている大津 繁樹(@jovi0608)さんの発表

speakerdeck.com

事前に資料公開して頂いていましたが、やはり会場で発表を聞いたらより理解が深まりました。 OpenSSLがらみでPerlが使われているなど初めて知りました!

V8の話を聞いて

Node.js v10.0.0で使用しているV8のバージョンがv6.2系から6.6系へアップデートされたと聞いて、 ついこの前、自分がWindows対応のプルリクを出して、1年ちかくかかって公式が対応してくれた plv8の事を思い出した。

github.com

plv8のV8のバージョンは6.4なのでNode.jsに負けてるのかぁwなど。

off the main thread with workers by Mariko Kosaka

speakerdeck.com

続いて、ちょっとまえにRebuild.fmにも出演されていたMariko Kosaka(@kosamari) さんのお話。

rebuild.fm

始めの方は、大津さんの発表と若干かぶることもあったりしましたが、 WebWorkerをいざ本格的に使いだしたら、使い勝手が悪く、これをもっと便利するには どうするとよいのか検討しているとのことでした。

昔、WebWorkerを動的に使って楽しんでましたが、動的な生成方法だと、デバッガを使うのが難しくなるなど デメリットがあること知ることができました。

LAPIs by Jxck

speakerdeck.com

3番目の発表はMozaic.fmのJxck(@Jxck)さん。低レイヤーと高レイヤーの中間的なAPIを低レイヤーのAPIを 使って実装するAPIの ことで、ポリフィルが確実に作れて、標準化を進めていく段階で試せるなど、しかし、これが仇となって標準化後の実装と ポリフィルの実装がずれるリスクがあるなどの課題があるなど。

自分の立場としては、標準化できる箇所は極力標準化してほしいなぁとIEのここで言えないバージョンの対応したり しているので切実w。

Jxckさんこの発表に関してのブログ記事も公開されたようです。

blog.jxck.io

LT 10分で、SSRを高速化してみる by shibukawa

docs.google.com

4番目の発表はReal World HTTPを書かれている渋川 よしき()さん というNext.jsでisomorphic-unfetchを使ってみたところ、

  • ローカルでHTTPリクエス
  • サーバーからのアクセスでページ表示側はすでに認証済み。そこからのデータ取得でさらに認証する必要はないはずだが、APIサーバー側で区別する方法がないため、迂回できない

といった問題が分かり、これを改善するためにshadow-fetchを作られたというお話でした。 SSR始めて早い段階で問題点を見つけられ、それを改善する実装まで作成されてただただ凄いなぁと感心しました。

LT BigInt あれこれ by shimataro

speakerdeck.com

最後の発表は、京都から来られた小田島 太郎(@shimataro999)さん。先日関西Node学園を立ち上げられたとのこと。

v10.0.0からはharmonyオプションが必要ながらも、任意桁数の整数が扱えるようになったというお話。 2の倍数だと滅茶苦茶処理が速いが、そうでないと数時間かかったり。

以前のNode.jsで大きな数を扱う記事を思い出した

abrakatabura.hatenablog.com

これをやってみた

10^210 / (10^10 + 3) の整数部分の桁数と、
一の位の数字を求めよ。
ただし 3^21 = 10460353203 を用いてよい。 
λ node --harmony-bigint
> a=10n**210n
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n
> b=10n**10n+3n
10000000003n
> a/b
99999999970000000008999999997300000000809999999757000000072899999978130000006560999998031700000590489999822853000053144099984056770004782968998565109300430467209870859837038742048888377385333486784399n
> (a/b).toString().length
200

ということで、東大の入試問題もv10.0.0からは追加のnpmモジュールなしで解けるようになった。

ちなみに、自分の記事で取り上げたモジュールは現在のv10.0.0ではビルド出来なかった。

懇親会

Jxckさんには3月のMonthly webが4月公開だったので、4月のMonthly webの予定をお聞きした。 4月分は収録済みとのことでした。

2番目の発表のkosamariさんの隣に去年のNode学園祭で発表されたShirley Wuが座わられており、 ツイッターにアップされていた以下の

桜の動画に関して尋ねたり、rebuild.fmで@ChromiumDev中の人やってると言われていたkosamariさんが以下の写真撮られているのを 目撃したり

そのあと、古川会長にkjunichiさんもなにかLTなどしてくださいと言われて、ネタとして

abrakatabura.hatenablog.com

を実演するなどw。

とにかく、いろいろ参加出来て楽しいく知識を広げることができました。

関連記事

1年前の記事

陰関数の仮想3D空間へのプロットあるいは、ラズパイ版マインクラフト(mcpi)にたけのこの里を出す

おはようございます。この4月から小学校生活の始まった長男。早速呼び出しがかかり先日保健室へ引取りに行った@kjunichiです。

陰関数とは

x2+y2+z2=1

のような形をしてy=で表現していない形式の関数をそう呼んでいるようです。 Wikipediaの説明読んでも数学を専門的にやってないので、記事の書く際の説明の 参考にならなかった。。

どうすればプロットできるのか

答え:数値を代入して試す

そうはいってももう少し説明すると

上の例だと、x2+y2+z2-1=0と式を変形した、 左辺=0 にして、左辺が正、負が変化するx,y,zをプロットして つなげれば、おおよその式が満たす曲面が描画される。

仮想3D空間にプロットする

曲面を構成する点から面をつくるのは難しい

曲面を構成する点から面をつくるのは、特許がきれたマーチングキューブ法を用いるのが 常套手段の模様。

しかし、これ、自前で実装するの面倒。

仮想3D空間にプロットする

立方体でプロットすればなめらかな面は表現できないが、数式のおおよその概形は 掴めるのでは?

マインクラフトPi版はPythonでブロックを任意の座標における。 具体的には以下の様にPythonで記述することで実現できる。

setBlock(x,y,z,id,[data])

陰関数の良さげな式を見つけた

TLでたけのこの里を数式にされた方の以下のツイートを見かけた。

実はこの式が陰関数形式であって、これを自前でプロットしてみたくなり、試行錯誤している最中に Minecraft Pi Editionでプロット出来るのでは?となりやり始めた。

成果物

f:id:kjw_junichi:20180421080916p:plain

遊び方

git clone https://github.com/kjunichi/mcpi-takenoko.git
cd mcpi-takenoko
python3 takenoko.py

そのままPlotをクリックするとたけのこの里の式のプロット結果が出現する。

応用編

preset以外にもいろいろな数式を試して描画してみるとなにか発見があるかも!?

学べたこと

Raspberry Piでの画面キャプチャー

Raspberry Pi版マインクラフトの画面をキャプチャーするには普通のXの画面キャプチャーツールだと、ウィンドウが真っ黒になってしまう。 これはRaspberry Pi版マインクラフトがGPUを使って描画している為と思われる。

このツールで無事キャプチャー出来た。

入力された数式のチェック

astモジュールを使って、 構文中に文字列を含んだらNGにすることで、

import os
os.system('rm ./daijinafile.txt')

のような危険な入力を防ぐ工夫をしてみた。

関連記事

13年前の記事

6年前の記事

150行の量子コンピューターのシミュレーターのコードを知って学んだこと

おはようございます。4月から次男は一人で保育園に通ってます。しかし、登園前に長男と保育園からの同級生と一緒に小学校そばまで一緒に行ってから登園してます。@kjunichiです。

背景

ハッカーニュースでPythonで書かれた150行の量子コンピューターのシミュレーター知った

github.com

表題日本語で訳してツイートしたら、思った以上にTLでの反響があった

学んだこと

いきなり、手元の環境では以下のエラーが出力されて動かない

Traceback (most recent call last):
  File "examples.py", line 45, in <module>
    print('NOT Gate: |' + NOT.measure() + '>')
  File "/Users/junichi/work/python/QuSimPy/QuSim.py", line 147, in measure
    self.numQubits
  File "/Users/junichi/.pyenv/versions/3.6.1/lib/python3.6/site-packages/numpy/core/numeric.py", line 2039, in binary_repr
    binary = bin(num)[2:]
TypeError: only integer scalar arrays can be converted to a scalar index

でも、WindowsのAnacondaでは動いた。

ちょっと調べたらNumpyのバージョンが古いと動く模様

使用しているnumpyのバージョンを調べるには

import numpy as np

print(np.version.version)

ということを以下のURLで知った。

自力でエラーに対応した

numpy#binary_reprでとうもスカラ値を入れれば良さそうな事が 察知できたので、以下の様にnp.random.choiceで得られる配列の 先頭を取得するように修正した。

np.random.choice(results, 1,p=self.probabilities)[0],

さらに良い方法

ハッカーニュースで紹介されたからか、同様の事象がすぐにIssue挙げられて、

翌日みたら、以下のように

np.random.choice(results, p=self.probabilities),

random.choiceの第二引数の指定が消されていた、これで、 ランダムに1つだけ選択してスカラ値が取れる模様。

参考資料

もう一年くらい前かIBMクラウド量子コンピューターを一般公開していた 事を思い出し、ちょっとググったら、当時は英語だった気がするが、日本語のページを発見

www.ibm.com

TLで「量子コンピューター」で検索したら日銀の公式で論文紹介していたヤツ

記事書いて大分たつけど面白そうな記事を見つけたので備忘録も兼ねて

msyksphinz.hatenablog.com

まとめ

当初は、動いたり、動かなかったりするのが量子コンピューターなのかも?そこも含めて シミュレーションしているのかなどとも考えたりした。

学べたこと

  • numpyのバージョンの調べ方
  • numpy#binary_reprの引数の指定方法
  • numpy#random.choiceの結果をスカラ値で取得する方法

関連記事

10年前の記事