Practice of Programming

プログラム とか Linuxとかの話題

あまり頭を使わずに負けない三目並べを作る

4月書き忘れてることに気づいて、もう、5月31日ではないか....。 StreamDeckで遊ぶために、以前に三目並べを作ったのですが、その解説です。割と力技で作った感じなので、もっと頭のいい方法が知りたい方はぐぐると出てきます。 三目並べとは 説明するまでも…

Google Photos APIを使うためのGoogle Developer Console での設定

こないだの続きです。 特に、Photos APIに限った話ではないですが。 OAuthアプリの設定を変更する OAuth同意画面 から、「アプリを編集」します OAuth同意画面の設定 「承認済みドメイン」が必須になります。 「保存して次へ」をクリック。 スコープの設定 …

Tauri で作ったアプリから Google にログインする

2月に記事を書けなかった...。まぁ日数少ないから、3/1なのでセーフということにしたい。 Tauri で Google等のOAuthでログインを行う方法の状況 さて、Tauri で 作ったアプリで Google のログインを行う方法があるのだろうかと、色々調べていたのですが、ま…

RustでExifのMakerNoteからPanasonicのカメラのレンズ情報を雑に取得する

Pnaasonicのカメラを使ってるのですが、Exifからレンズ情報が取れない...のですよね。 問題 通常、ExifのLensModelにレンズ名が入ってくるのだと思うのですが、Panasonicのカメラでは、入ってなさそうです(フルサイズ系(S系)は入っているかも)。少なくとも、…

Pythonで目標をセンターに入れてCrop と 月を撮るカメラの設定 と ChatGPT

ちょっと前の話になりますが(2022/11/8)、皆既月食と天王星食がありましたね。見られましたでしょうか? 僕は途中から、望遠レンズを持ち出して撮影していましたが、久しぶりに撮ると設定とかを忘れちゃっててだめですね。なかなか手こずりました。 で、何枚…

Product-Led Growthまとめ

この記事は Wano Group Advent Calendar 2022の4日目の記事となります。他にも、24日(STREAM DECK互換の仮想デバイスの紹介)と25日(Notionとtandemで作る相談しやすいリモートワーク開発のすすめ)に記事を書いているので、そちらもどうぞ。 グループ会社のED…

PulseAudioの入出力やボリューム設定をコマンドで行う

AfterShokz(現:Shokz)のOpenCommを使っていますが、Ubuntu で利用していると、プロファイルがA2DPを選択されてしまい、毎朝仕事をする前に、Handsfree Head Unit(HFP)に選択し直さないといけないという作業があったんですが、いい加減ちゃんと調べようと思っ…

STREAM DECKで遊ぶために学んだPythonのこと

STREAM DECKについて 拡張キーボードと呼ばれるもので、ボタンにショートカットを割り当てたりできるものです。 Linuxでも使えますが、Linuxで使えるGUIアプリ(streamdeck-ui)がイマイチなので、使う気になれなかった...のですが、Pythonのライブラリがある…

JavaScriptのcanvasで遊んでいたらPCのパフォーマンスが上がった

はい。嘘です。 正しくは、PCが遅い原因がわかった。でした。顛末は最後に書いていますが、最初は、canvasの使い方から。 canvasの使い方 HTML HTMLで下記のように書きます。 <canvas id="canvas" width="300" height="170"></canvas> JavaScript 基本 cotnext const c = document.getElementById('canvas'); const …

IndexedDB の onupgradeneeded の実装例

最近、ブラウザに内蔵されているローカル用のDBのIndexedDBを使ってみました。 developer.mozilla.org DBのスキーマを変更したいようなときに、onupgradeneeded を使いますが、ちょっとした説明と実装例を示します。 なお、動作確認したブラウザは、Chrome 1…

React事始め

もはや、無数にありそうな話題なので、あまり公に書く意味はないですが、記録しとかないと忘れちゃうので(年齢的な問題で)。 下記の2つのドキュメントを見ながら進めていきますが、主にガイドの方の内容になります。 ja.reactjs.org ja.reactjs.org Vue.jsは…

UXデザインの法則を読んで感銘を受けたのでまとめた

本の概要 1. ヤコブの法則 2. フィッツの法則 3. ヒックの法則 4. ミラーの法則 5. ポステルの法則 6. ピークエンドの法則 7. 美的ユーザビリティ効果 8. フォン・レストフル効果 9. テスラーの法則 10. ドハティのしきい値 終わり 本の概要 会社の人に勧め…

OpenSCADでDIY(家具とか)の設計をする

別に技術系の話ではないのですが、こっちの素養がある方には馴染みやすいツールじゃないかなと思って、こっちに書いてます。 OpenSCADって? OpenSCADは、3D CADモデラーです。 openscad.org 僕はUbuntuで使っていますが、macOSでも、Windowsでも使えます。 …

Nanocで全文検索を実装する

いくつかNanocの記事を書きましたが、検索がないと、実際問題使えないですよね。 というわけで、Googleで検索してみましたが、下記が見つかるくらいでした。 groups.google.com 上記からたどったところ、下記のようなものがあれば、なんとかなりそうというと…

Nanocで記事ごとにUUIDを付けてリンク作ってPermalinkとする

静的ファイルジェネレータの弱点(と僕が勝手に思っている)は、URL=ファイルのパスというところです。 何が困るかと言うと、移動した場合にURLが変わってしまう。 これを解消するために、記事ごとにUUIDをつけて、実際のパスへのシンボリックリンクを作り、そ…

Nanocで絵文字を表示する

前回の続きでNanocの話です。 honkitでは、:name: という表記で、絵文字を表記できたりしますが、Nanocではできません。 これも、自分でフィルターを簡単に書くことができます。 gemojione を使って、絵文字を表示するフィルターを作る lib/nanoc/filters/ge…

Nanoc で PlantUMLを表示する

Nanoc とは? 静的サイトジェネレーターです。jekyllryやhonkitとかの仲間です。 GitLabで静的ページを作るのに、honkitを使っていたのですが、最近、Nanocを試していました。 nanoc.app Nanocの利点 ビルドが速い(honkitと比較すると爆速といえる) filterを…

GraphViz::DBI で ER図を吐き出す

この記事は, Perl Advent Calendar 2019 の20日目の記事です。 19日は、doikojiさんの、「WINI & cal: perlベースの新しい簡易マークアップ言語WINIで来年のカレンダーを作りましょう! 」でした。 この記事は、もともとWanoグループのAdvent Calendar に書…

tcat という行頭に日時を付加するコマンドを作った

cat のように標準入力かファイルの中身を出力するものですが、先頭行に日時がつきます。 https://github.com/ktat/tcat にあります。なんで、こんなものが必要かというと、例えば、サーバの様子を top -b を記録して後からみたいなーとかいう時とかに... % t…

Go言語さわってみた

一年前(2014年5月末の作成日の.goなファイルがあった)くらいにGo Tourを途中までやったけど、ほとんど覚えてなかったです。 ディレクトリとか環境変数とかは、前若干コード書いたので、それっぽく残ってました。emacsのgo-modeも入ってた。 という状況から、…

翻訳 CPAN::Meta::Spec、Module::CPANFile、Minilla、Milla::Tutorial、cpanm、Carton、plenv、plenv-contrib

CPANまわりのツールたちの開発が活発なので、翻訳しようと前々から思ってたのですが、ようやく翻訳しました。 CPAN::Meta::Spec ... CPANメタデータ仕様 cpanfile ... PerlアプリケーションのためにCPANの依存性を記述するためのフォーマット cpanfile-faq .…

scalarコンテキストでのsortの振る舞いは未定義

何年も使ってるのに、基本的な関数知らないとか!とか、思った。同僚がはまっていたので知ったのですが、sort のスカラコンテキストでの振る舞いは未定義だそうです。実際問題、sort をスカラで受けるとか意味わからない。ちゃんと警告も出ます。 Useless use…

Teng::Plugin::SearchBySQLAbstractMore 0.10 と 0.11 をリリース

https://metacpan.org/module/Teng::Plugin::SearchBySQLAbstractMore0.10 は先日ご報告をうけた、search_by_sql_abstract_more メソッドの挙動が、search と違うよっていうバグの修正です(ちなみに、僕はこのバグに依存したコードを書いちゃってたので、修…

Teng::Plugin::SearchBySQLAbstractMore 0.09 リリース

https://metacpan.org/module/Teng::Plugin::SearchBySQLAbstractMore 変更点は、create_sql_by_sql_abstract_more ていうのを生やしたのと、Teng::Plugin::SearchBySQLAbstractMore::Pager::Countの改良。 create_sql_by_sql_abstract_more は、そのまま、T…

spork で作ったスライドをPDFにする

YAPC::Asiaお疲れ様でした! 牧さん、櫛井さん、スピーカーの皆様、来場者の方々、ありがとうございました。 今回は、スタッフとしてRoom 1(中教室)にずっといましたが、仕事してたり、perldoc.jp がバグってるのを見つけたり(deltaが表示できてなかった orz…

ループ回数が多いときにDateTime使うのはやめよう

ボトルネックを探していたら、5000回くらいのループでDateTimeを使っている場面だったという話。 簡単な例として、1分追加する処理でベンチマークとってみた。 Benchmark: running datetime, timepiece for at least 3 CPU seconds... datetime: 3 wallclock…

YAML::XS 0.35未満のメモリリーク

DBに大きめのYAMLが保存してあって、それを読み取る処理があったのですが、メモリがどんどん増えていくなーと思ったら、以下のものでした。 http://blogs.perl.org/users/brian_d_foy/2011/03/fixing-yamlxss-memory-leak.htmlChangesでは、 - version: 0.35…

AEとQudoを組み合わせる

別に書くほどのことは無いのですが。QudoをAEとの組み合わせで使ったので、work メソッドの中身をAE::timer に渡すことにしました。 my $qudo = Qudo->new(...); $w = AE::timer 0, $qudo->{work_delay}, sub { my $manager = $qudo->manager; unless ($mana…

Text::Parts 0.13 リリース

Text::Parts 0.13会社の隣の人に、write_filesが完全にバグってると指摘されたので、直しましたorz テストでサイズだけチェックしてたんですが、まぁ、サイズ分書き出してるんだから、意味ないよね… md5_hexでファイル内容をチェックするように変更しました…

Text::Parts 0.09 リリース

Text::Parts2000くらいファイル分割しようと思ったら、"Too many open files"と言われてしまったので。 no_open オプションを使って、write_files を使うのであれば、特に問題は無かったかと思いますが、split メソッドを使って、自分で write_file を使うと…