元派遣プログラマの自称技術系ブログです。雑記とか自作のオープンソースプロジェクトの話とか。
Javaとか組込とかできます。お仕事ください。

いろいろ水に流すツールを作った

ドメインのセールでなんとなく検索したunko.shopが空いていたので、200円ちょっとで購入した。今年のウェブページの開発の演習もかねて、インタラクティブに(とはいってもクリックだけだけど)unkoをつついて流せるウェブサービスを作りました。unko.shop画…

スマホでも動くブラウザ用のサウンドイフェクト連射クラス

audioタグを使ったサウンド再生は、特にスマートフォンブラウザで短時間に連続して起動するとうまく動きません。 iOSのsafariでは顕著で、同一ソースを複数読み込んでマルチチャンネル化しても他の処理に遅延などの影響が出たりします。以下のクラスでは、音…

Chrome(PC/Android)用の簡易音声メモアプリ

先日使い方を覚えたSpeechAPIを使って簡易音声メモアプリ”ひとりごとメモ帳”を作りました。 AndroidとPCのChromeブラウザで音声メモができます。 使い方 準備 Chromeで音声入力ができるように、OSとブラウザの設定を整えておいてください。Windows Win10のPC…

漢字を忘れたときに音声検索するブラウザアプリを作った

ど忘れ漢字を書くときに、音声で検索できると便利そうなので作りました。 ブラウザから音声で漢字を検索するためのツールです。PCか新しめのAndroidスマホで使用できます。残念ながらiPhoneでは動きません。 使い方 基本的な使い方 ブラウザで以下のURL開い…

Promiseで複数のコールバックイベントを予約する

SpeechAPIの非同期イベントを並べなおすときに、複数のイベントを順に呼ぶ必要があったので作った。 コンストラクタで空のPromiseを呼んでその結果をnextに保存しておく。 作った後で気が付いたけど、これクラスにする必要ないね。 class PromiseStack { con…

javascriptで都合よくhtmlフラグメントを生成する関数

JavascriptでちょっとしたHTMLをjavascriptオブジェクトから作る関数を作った。類似品を検索したけど見つけられなかった。もし似たようなのがあったら教えてください。例えばこんなjsオブジェクトから、 var src=["div",{class:1,text:"",},[ ["div",[ "AAAA…

celeryのシグナル調査ログ

celeryのシグナルのログ from celery.signals import * import os @eventlet_pool_started.connect def eventlet_pool_started(sender=None, headers=None, body=None, **kwargs): print("accept eventlet_pool_started %d"%(os.getpid(),)) @eventlet_pool_…

Pythonでいいかんじに 小数部の桁数を制限する

pythonで小数部の桁数を制限する場合、decimalを使うのが一般的だそうだ。 decimalは有効桁数を制御できるけど、JavaのBigDecimal#setScaleのように小数点以下の桁数を制限する機能がなかった。そんなわけでいい感じに 小数部を成型してくれる関数を作った。…

メモ

ubuntuでmatplotlibでpillow関係のエラーが出た時の再インストール手順 apt-get install libjpeg-div pypy3 -m pip uninstall matplotlib pypy3 -m pip uninstall pillow pypy3 -m pip install matplotlib pypy3 -m pip install pillow

JSON形式でPickleがしたい!

Pythonオブジェクトのシリアライズにはpickleモジュールがあるが、こいつは独自形式のバイナリを出力する。どこかの超人のようにバイナリをそのまま読めないので、JSON形式でpickleできるようなモジュールを作った。pickle utility to json format . · GitHu…

WSL +VScode でpypy3するメモ

WSLとpypy3とVSCodeはあらかじめ入れておく。VSCodeの次の設定をいじる。

ThinkPad X395を買ったよ!

LenovoさんのセールでThinkpadX395を買いました。 2013年の9月にT440pを買って以来なので、なんと7年ぶり。 レノボWeb広告限定ストア 広告限定eクーポンはこちら スペック メモリは増設できないので最大。ストレージは修理に出すとき困るから最低限にして後…

島津の作ったPCR検査薬は何が”100%”なのか

そもそもの発端は、ツイッターでニュースサイトに噛みついたことでした。これも一種のデマか。検査一致率100%は精度100%ではない。it's media. https://t.co/VnLPg3zklw— に␣␣ゃ␣␣と␣␣ら␣␣ん (@nyatla) 2020年4月10日 さらに、GMOの方がツイートして…

いまさらJavaのTimerの挙動を調べる。

JavaのTimerをキャンセルしたときに、実行中のタスクがどうなるのか調べていなかったので調べた。 import java.util.Timer; import java.util.TimerTask; public class TimerTest { public static synchronized void print(String s){ System.out.println(s)…

sqlite3でROW_NUMBER()が使えるらしい。

SQLiteでもVersion3.25.0からROW_NUMBERが使えるようになっていた。How to use ROW_NUMBER in sqlite - Stack Overflow SQLite ROW_NUMBER() Window Function By Practical Examplesグループ分けされたスコア情報から、グループごとにN個のデータをサンプリ…

バッチファイルからWindlwsパスを渡してWSLコマンドを実行する方法

バッチファイルにファイルをドラック&ドロップして実行したいときには次のように書く。 @SETLOCAL @SET CMD=wsl wslpath "%1" @FOR /f "DELIMS=" %%A IN ('%CMD%') DO SET R=%%A echo %R% wsl ls %R%Rに変換したパスが入る。%1をダブルクォーテーションでく…

pypyで高速化したらメモリリークしたお話

Pythonクラスを関数内で定義すると、pypyでの実行時にメモリリークが発生して実行速度が遅くなる。以下のコードをPythonで実行する。 import time class Leak: def proc(self): class Inner: def something(self): i=1+1 for _ in range(10000): a=Inner() a…

Pythonで共有メモリを使った並列処理をするときのメモ

Pythonで大きめのデータ(数百M~数GB)を解析しようとしたときの技術メモ。Pythonを並列処理で高速化しようとするとGILの制約を受ける。この問題は複数の同一プロセスを起動することで回避できるが、巨大なデータを扱う場合、それが読出専用であってもメモリ…

Python3.7をWSLに入れる

apt search Python3.7*で見つからないとき。ppaをこの辺から追加する。 sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get updateそのあとにapt-get install python3.7でOK 参考 How to Install Python 3.7 on Ubuntu 18.04 | Linuxize

pypy3のセットアップメモ

WSLにPyPy3をセットアップした時のメモです。 matplotlibとnumpyとscypyとpandasをセットアップできるようにするのが目標pypyのセットアップhttps://askubuntu.com/questions/441981/how-to-install-pypy3-on-ubuntu-for-newbies sudo add-apt-repository pp…

対応端末のはずなのにARが出てこない人へ

対応端末のはずなのに検索結果に3Dモデルのリンクがでてこない人は、OSを最新のバージョンにしましょう。 iOSの場合 13.1.1に更新したらSafariで見れるようになりました。 いますぐ、設定→ソフトウェアアップデートでバージョンを確認しよう! Pixel3aの場合…

ビットコイン価格をCSVでダウンロードするサービスを作りました。

ビットコイン取引所の配信するビットコイン/仮想通貨の過去データをダウンロードするサービスを作りました。 機械学習の練習やbotのバックテストなんかに使えると思います。nyatla.jp 公開しているのは、bitflyerとZaifが配信しているデータから作った始値、…

SQLiteでMAX関数とMIN関数を一緒に使ったら死ぬほど遅かった話

300万件ほどのデータのあるinteger型のidを格納するテーブルで、MAX(id)とMIN(id)を求めようとしたらとんでもない時間がかかった。 同じSELECTでMINとMAXを求めたのが悪いようだ。別に求めてUNIONでくっつけると問題なかった。理由はよくわからない。 テーブ…

Google DriveのファイルをGoogle Colaboratoryからサクっと使う方法

お気楽機械学習プラットフォームのGoogle Colaboratoryから、Google Driveにあるファイルが簡単に使えるようになっていたという話。以前は長い呪文を撃ち込まないとドライブのファイルが使えなかったのですが、今は以下の2行で接続できる。 from google.col…

LenovoのThinkCentre M715q Tiny (Ryzen5モデル)がなんだか安いぞーという話

LenovoでRyzen5のThinkCentre M715q Tinyが安かったのでご紹介します。 価格コム限定モデルなので、以下のリンクから直販リンクに飛びます kakaku.comで、直販リンクのThinkCentre M715q Tiny:価格.com限定 パフォーマンスプラスのカスタマイズへ。 ここから…

機械学習用にPCを組み替えた

ゲームと機械学習の計算機にしていた自作PCを作り変えました。 時々パーツ単位では更新することもありましたが、マザーボードを含めては十数年ぶりです。 構成 1050Tiは以前NierAutomataを眺めるプレイするために買ってあったので、それを流用します。CPUはI…

Jupyter NoteBookとPythonで上位階層のimportをする方法

Jupyter NoteBookで__file__を使って上位ディレクトリをimportしようとすると失敗する。__file__が定義されていないから。 代わりにpathを使えばよいらしい。 import sys import os try: __file__ sys.path.append(os.path.join(os.path.dirname(__file__), …

ビットコイン自動取引11月号

ビットコイン自動取引3か月目の収支報告です。 取引結果 11月は前半苦戦したものの取引高ランキングの賞金が大幅に増加して、残高は前月比+256%となりました。 集計期間 開始日 11/1 9:00くらい 終了日 11/30 9:00くらい 残高 開始日 ¥93,598 終了日 ¥240,04…

ビットコイン自動取引10月号

11月ももう半ばを過ぎましたが、自動鳥引ボットの収支報告です。 9月も一応黒字ではあります。 取引結果 残高は9月末と比較して、+170%に増加して¥93,474になりました。 途中数日間グラフがフラットになっている部分は残高記録を忘れた日です。次に残高の記…

ビットコイン自動取引のレポート

ビットコイン自動取引2か月目の収支報告です。 8月中は実装やテストをしていたので、本格稼働は9月からです。 取引結果 9月はいろいろありまして、残高は前月比+250%になりました。 途中、若干のアルゴリズム変更を含むパラメータ更新などを行いましたが、…