ラベル Webサービス の投稿を表示しています。 すべての投稿を表示
ラベル Webサービス の投稿を表示しています。 すべての投稿を表示

2021年8月24日火曜日

I'm vaccinated.

みなさん、ワクチン2回射ちました証明書持ってますか? え? 持ってない?

「新型コロナウイルスワクチン予防接種済証」

の事ですよ? え? それなら持ってる? では、外で接種済みを証明するのに、それを持ち歩いたとして、毎回、わざわざ、いちいち、それを取り出して見せますか? 最終的には原本を見せないと信用してくれない人もいるでしょうけど、とりあえず済証を撮影した画像を見せる事が出来ればそれでOKな事もあるかと思い、起動すると以前に指定しておいた画像を表示するだけのWebアプリケーション(PWAですが起動にはネットワークが必要なので、オフラインだと起動しません)を作りました。

I'm vaccinated (ProtoPediaへのリンクになります)

という名前で公開していますが、単にデバイス内の画像を選択し、それをデバイスに保存しておき、次に起動された時にその画像を表示するだけのアプリになります。

使い方は下記のようになります。

  1. まず、予防接種済証をスマホのカメラで撮影します。クラウドドライブで画像を共有出来る場合は、他のデバイスで撮影しても大丈夫です。綺麗な正方形に画像編集した画像を使いたい場合は、撮影してから編集しておいてください。


  2. 次に、「I'm vaccinated」Webアプリケーションを開くと、次のような画面になります。

  3. この状態で画面をタップすると、デバイス内のファイル選択になります。
    選択出来るのはデバイス内の画像だけになります。
    URLなどでは指定出来ません。
    また、選択した画像がサーバーに送信されたりすることは、ありません。
    デバイス内の選択した画像を表示するだけのアプリになります。
  4. スマホの画像選択機能で、なにかしらの画像を選択すると、その画像が表示されます。
    画像の選択方法はスマホのメーカーや、OSのバージョンによって違うと思いますが、撮影した接種済証の画像を、ここで選択出来る場所に保存しておいてください。
  5. このWebアプリはPWAになっており、スマホのホームにアイコンとして登録しておくことが出来ます。
    置き方は、ブラウザのメニューに「ホーム画面に追加」のようなものがあると思いますのでそれを選択し、名前を付ける操作などを行うと、スマホのホーム画面にアプリのように表示されます。

  6. 次からは、このアプリを開くと選択した画像が表示されます。
    画像を変更したい場合は、画像をタップしてください。
    再び画像選択になります。


2014年10月7日火曜日

gl.enchant.js

私の作っているゲーム作成フレームワーク「enforce」にWebGLを使ってゲームを作れるように「gl.enchant.js」を組み込もうとしているが、このgl.enchant.jsによる3Dオブジェクト同士の当たり判定がうまいこと使えない。


例えば半径3.0の球(Sphere)同士の当たり判定を行っても、半径1.0の球として判定されてしまう。


この話をすると「そういう時は、コライダー*1というのを用意して(ry」という話がよく出るのだが…………私の困っているのはコライダーでの話なんですよね(汗)


 なので、実際にゲームに使えるオブジェクトのサイズというのが、すべてサイズが「1.0」のものだけになってしまう。


これはプリミティブだけではなく、Colladaデータでも同様になっている感じ。


gl.enchant.jsのソースを覗いているが、これを修正するのは………キツそうだなぁ(汗)


*1:ゲーム等において画面上に表示されている絵(ビジュアル)とは別に当たり判定を行う専用のオブジェクトのこと(らしい)



2014年9月28日日曜日

enforceにbox2d

enforceのenchant版のほうで、box2dを使った物理演算スプライトを使えるようにした。


とは言っても、使う時は通常のスプライト生成と変わりはなく、生成する時のオプションで「rigid: true」を渡すと物理演算スプライトになる。


サンプルを作った。


カーソルキーで白いクマが動いて、Zキーかスペースバーで茶色いクマが生成される。


物理演算されているので、ぶつかると跳ね返るし、回転する。


2014年9月12日金曜日

enchantとtmlibのタッチイベント

enchant.jsと、tmlib.jsのスプライトでは、発生するタッチイベント名が違う。


 


enchant.js


タッチ開始:ontouchstart


移動:ontouchmove


終了:ontouchend


中止:ontouchcancel


 


【例】



sprite.ontouchstart = (e)->


    console.log('x='+e.x+', y='+e.y) 



 


 


tmlib.js


タッチ開始:onpointingstart


移動:onpointingmove


終了:onpointingend


中止:onpointingcancel


 


【例】 



sprite.onpointingstart =(e)->


    console.log('x='+e.app.pointing.x+'y='+e.app.pointing.y)



 


2014年9月2日火曜日

tmlib0.3で音楽再生

tmlib0.3では、それまでの0.2までとは音楽の再生方法が変わっているようなので備忘録。


アセットリストに「sound」という名前で登録されているファイルを再生する場合



org = tm.asset.Manager.get('sound')


sound = org.clone()


sound.volume = 1.0


sound.play()


sound.loop = false



 


cloneしてからでないと重ねての再生が出来ないので注意。


2014年8月30日土曜日

JavaScriptでゲームパッド

もともとは「GamePad API」としてW3Cが制定しているものだが、なぜかブラウザー毎に実装がマチマチで、これまたブラウザー毎に処理を分けないといけない。
そして、2014年現在は、Chrome37と、Firefox31でしかゲームパッドは使用出来ない(SafariIEでは未実装)。


なので、実行しているブラウザを自動判別し、ChromeFirefoxの両方でほぼ同じデータの取れるものだけを配列で返すライブラリを作ってみた。


 


両方のブラウザでほぼ同じデータが取れるものは下記になる。


f:id:digitarhythm:20140830224336p:plain


 


ボタン1〜4に関しては各ゲームパッドによって違いはあるが、ボタンが4つあればボタン1〜4になっていると思われる。


ボタン5と6は、人差し指で押すボタンが返ってくる。
垂直軸と水平軸は−1、0、1の3つの値を返す。


さらに、Xbox360コントローラーでは2つのアナログスティックの値を−1〜1の範囲で返すようにしている。


しかし、アナログスティック1の値は垂直軸、水平軸の値とリンクしているので、アナログスティック1の値が振り切る(1、もしくは-1になる)と、十字キーを押したのと同じ状態になる。


Xbox360ではボタンは16個あるのだが、ファミコンもどきコントローラーとXbox360コントローラーで同じような値を返すのがボタン1〜6までなので、このライブラリではボタン6までしか値を返さない。


Xbox360コントローラーでは十字キーの値はボタンとして返ってくるのだが、ライブラリのほうで水平軸、垂直軸の値として返るように違いを吸収している。


 


ライブラリはgithubにあるので、普通にクローンすると使えるようになる。


 


digitarhythm/gamepadprocedure · GitHub


 


ファイル自体はCoffeeScriptなので使用する時はコンパイルしてご使用ください。


 


コンパイルしたファイル「gamepadprocedure.js」を読み込むと、「gamepadProcedure()」という関数が使用出来るようになるので、ゲームなどのループ処理内でこれを呼ぶことでゲームパッドの状態が配列として返ってくる。


SafariIEの場合は空の配列が返される。


 


GAMEPADINFO = gamepadProcedure()


 


上記のようにした場合、ゲームパッドがひとつの場合はGAMEPADINFO[0]ゲームパッド情報が格納されている(ゲームパッド番号=0)。



  • GAMEPADINFO[0].padbuttons

  • GAMEPADINFO[0].padaxes

  • GAMEPADINFO[0].analogstick


上記3つのオブジェクトはさらに配列になっていて、GAMEPADINFO[0].padbuttons[0]〜[5]にボタン情報が入っている。


GAMEPADINFO[0].padaxes[0]には、十字キーの水平軸情報が入っている(-1、0、1)。


GAMEPADINFO[0].padaxes[1]には、十字キーの垂直軸情報が入っている(-1、0、1)。


GAMEPADINFO[0].analogstick[0]には、アナログスティック1の情報が配列として入っている。


GAMEPADINFO[0].analogstick[0][0]には、アナログスティック1の水平軸情報が入っている(-1〜1)。


GAMEPADINFO[0].analogstick[0][1]には、アナログスティック1の垂直軸情報が入っている(-1〜1)。


GAMEPADINFO[0].analogstick[1]には、アナログスティック2の情報が配列として入っている。


GAMEPADINFO[0].analogstick[1][0]には、アナログスティック2の水平軸情報が入っている(-1〜1)。


GAMEPADINFO[0].analogstick[1][1]には、アナログスティック2の垂直軸情報が入っている(-1〜1)。


 


ChromeFirefoxではコントローラーの認識されるタイミングが違う。


FirefoxではファミコンもどきコントローラーでもXbox360コントローラーでも、Webアプリを起動した時には認識しておらず、ゲームパッドをなにかしら操作した時に認識される。


しかし、ChromeはどちらのゲームパッドでもWeb起動時に認識している。


動作的にはChromeのほうが好ましいのだが、一回認識してしまうとその後にUSBコネクタを何回抜き差ししても、最初に認識したゲームパッド番号がリセットされない。


例えば、Xbox360コントローラーを挿した状態でWebアプリを実行するとXbox360コントローラーがゲームパッド番号0として認識される。


その後にXbox360コントローラーを抜いてからファミコンもどきコントローラーを挿しても、ファミコンもどきコントローラーはゲームパッド番号1となりChromeを再起動するまでこの情報はリセットされない。


どちらにせよ、今の状態では複数ゲームパッドを使用したり、ゲームパッドの抜き差しなどはオススメしない。


2014年5月30日金曜日

標準ブラウザ撲滅委員会

いやぁ、ほんとに日本のキャリア端末に入っている、標準とは名ばかりの端末独自ブラウザである「標準ブラウザ」を撲滅させていきたい。


存在することで不幸になる人は居ても、幸せどころか、なんらかの利点がひとつでもある人なんて存在しない。

まず、名前がおかしい。

Googleの「Default Browser」をそのまま訳しているんだろうけど、それなら一切のカスタマイズをしないで欲しい。

おかげで端末の数だけWebブラウザーが存在することになってしまった。

ユーザーエージェントもまさに泥沼。

これは日本に限った話では無いようなので、もうDefault Browserのことはみんなで忘れようじゃないか。

大丈夫、僕らにはChromeがいるじゃないか。

2010年5月28日金曜日

WordPress

やっぱWordPressは重たいなー。

はてなダイアリーが軽くていいかな。

自宅サーバーにはポータルサイトっぽいのを置いて、blogははてダでいいやー。



2009年2月20日金曜日

spamassassin

先日の日記にも書いたが、サーバーのOSが新しくなったのでspamassassinをしかけてみたのだが、これが驚くぐらいにスパムメールを弾いてくれる。

��実際はスパムメールと思われるもののヘッダに「X-Spam-Flag: YES」を追加してくれるのでそれで振り分ける)

これでGoogleに頼らなくても自宅サーバーのメールを管理出来る。

ちょっと感動した。



2009年2月14日土曜日

サーバーリプレイス顛末

まず事の始まりは、サーバーのどこかのファンがものすごい轟音をあげ始めたこと。

今までもうるさくなったことはあったけど、今回は尋常じゃない音がしてるのでちょっと危険を感じ、引っ越して来て以来のサーバー停止。

その日はそのまま寝た(2/13の日記の画像の状態にして寝た)。

とりあえず、それまでのサーバーのスペックは、

CPU:Celeron 300MHz

メモリ:384MB

HDD:起動用40GB+データ用60GB+バックアップ用外付け200GB

という貧弱(マシンを組んだ10年前はそうでもなかったけど)さだったので、以前使っていたAthlonXP 2600+が刺さりっぱなしのマザーを代用として使うことにする。

メモリは1GBが刺さってるのでそのまま使うことにする。

騒音の原因は電源のファンだと思っていたのだが、どうもフロントの空調ファンもうるさかった。

電源を交換してもこのフロントファンを廻すと前と変わらないくらいの騒音が! (笑)

夏に辛そうだけど、まぁそうなったらそうなった時ということでファンは止めて、電源だけ交換した。

あと足りないのはHDDなんだが、Windowsのビデオ編集用に使ってたRAID0の640GB-HDDがなんか死んだみたいなのでバラしてみたら、RAIDコントローラーが死んでるだけでHDDは生きていたので320GB×2のHDDとして使うことにする。

UltraATA133かなんかなのでまぁ使えるでしょう(っていうか使ってる)。

ビデオカードもGeForce7300GTが刺さってたけど、サーバーにそれを使うのはもったいないのでオンボードのを使うことにする。

で、いざOSインストール

しかし、HDDのパーティション切りでつまづく。

320GB×2のHDDをLVMで640GBのHDDとして使いたいのだが、Ubuntu Server 8.10のパーティションエディタではうまいこといかない。

一旦、作ってしまったLogical Volumeはインストーラツールでは削除することが出来ない。

いざ、なんとか640GBのパーティションが出来たのだが、なぜか/boot領域を300MB確保すると残りが「使用不可」になる。

/bootのサイズを変えてもダメ。

しょうがないので、デスクトップ版Ubuntu 8.10で起動して、コマンドラインを使って手動でLVMを構築する。

しかしデスクトップ版を使っても、手動で作成した論理ボリュームはインストーラが認識してくれないので、パーティションの切り方を変える。

まず、プライマリーの320GB-HDDに、「/boot」300MB、「スワップ領域」1GB、「/」40GBをすべてXFSで確保する。

この3つがあればインストーラは先に進めるので、インストールが終わってからLVMの設定が出来るのだ。

プライマリのほうは残りを全部LVMの物理ボリュームにしてしまう。

セカンダリの320GBのほうは丸ごと全部LVMの物理ボリュームにする。

そしてインストールが終わったら、プライマリHDDとセカンダリHDDのLVM領域を合わせて570GBくらいのボリュームグループを作成する。

その上に「/www」用に100GB、「/home」用に残りの470GBで論理ボリュームを作成する。

570GBの論理ボリュームを確保して、その論理ボリュームに対してfdiskで、100GBと470GBのパーティションを作成すればいいように思えるが、なぜか論理ボリューム上に複数パーティションを切っても「/dev」にパーティションのデバイスファイルが作成されないのでフォーマットする事が出来ない。

ひとつの論理ボリューム上にはひとつのパーティションで使用するらしい。

それぞれの論理ボリュームを確保したら、fdiskでそれぞれパーティションをひとつ確保して、mkfs.xfsでそれぞれフォーマットして、「/www」、「/home」にマウントするように「/etc/fstab」に記述する。

これでサーバーの初期セットアップは完了。

次に環境を戻さないといけない。

まずは元々使ってたHDDをUltraATAケーブルで接続して起動してみる。

しかしHDDチェックで止まってしまい起動しない。

しょうがないので外付けHDDキットを使って、USB接続する。

そこの「/www」と「/home」配下をrsyncミラーリングする。

そして、postfixSMTP)とdovecot(pop3とimap4)を設定するとメールは受信出来るようになった。

��送信は出来るけど、なぜか届かない)

次に、apache2.2.9の設定。

apacheは2.2からガラリと設定方法が変わっているので戸惑うが、以前仕事でいじっていたのでちょっとマシだった。

設定で、ユーザーディレクトリ(public_html)の公開や、仮想ドメインの設定やらを行う。

するとなぜか、あるディレクトリだけが開こうとすると「application/x-trash」などというMIMEタイプとみなされてPHPスクリプトファイルをダウンロードしようとする。

これはもうなにをやっても解決しなくて、ためしにiPhoneで見てみたらなんと!見れてる。

もしや・・・と思いSafariで見てみたら、これまた見れる・・・。

Firefoxがおかしいんかいな。

Lzyc(Minefield)3.0.1を使っていたので、3.0.6にアップデートしてみたけど変わらず。

これは結局未だにわからず仕舞い。

これからsambaの設定をしてクライアントにマウント出来るようにするところ。

←今ここ

これが終わったら、SMTPの設定を見直して、apacheの設定とかでおかしいとこがないかチェックだな。

あと、HDDがデカくなったから200GBのHDDにバックアップ取れなくなったので1TBくらいのNAS買ってきてバックアップ環境を作らないとなぁ。



2009年2月5日木曜日

iPhoneでプッシュメール

もともとGmailiPhoneを設定するとちょっとプッシュっぽくなるけど、軽くタイムラグがあるので、プッシュに対応してると噂の米YahooMailのアカウントを作ってみた。

で、Gmailの設定で、Gmailへ届いたメールを、新しく作ったYahooMailへ転送するようにする。

そしたら、iPhoneの設定でYahooメール!を登録するとほとんどタイムラグが無く、日本の普通のケータイのようにメールが届く。

フェッチメールの設定を「手動」にしていても、Gmailにメールを送ると速攻でiPhoneが音を発してバイブレーターが震動する。

日本の普通のケータイだったら当たり前のことだけど、iPhoneでこれが出来るとなんか感動する (笑)



2009年2月3日火曜日

Amazon

これ、なんていう過剰包装?



mixi

公開範囲を最近mixi内でやりとりのあった人だけにしたら9人になってもうたw

マイミクが128人いても、繋がってるのはほんのちょっとなんだなぁ。



blogの日記

mixi以外にやってるSNSOpenPNEを使ってるのがあるんだけど、こいつは外部blogを日記に登録するとSNSの日記とは別に「最新blog」という名で表示される。

これなら過去にSNSで書いた日記も見れるので使いやすい。

mixiもこうしてくれないかなぁ。



QMK開発環境構築メモ

## Ubuntuコンテナイメージ取得 ```bash docker pull ubuntu:24.04 ``` --- ## コンテナ作成 ```bash docker run -it --name qmk_dev -v [マウント元ディレクトリ]:[マウント先ディレクトリ]...