RSS2.0

ImageMagick6 を Fedora 26 にインストールする

諸事情により Fedora 26 で ImageMagick を使える環境を用意することになりました。
普通だったら yum install して終わりなのですが、リポジトリに上がっているのはインストールしたい ImageMagick6 ではなく、ImageMagick7 のようでした。
なのでソースからビルドしてみたいと思います。

jpg, png モジュールをインストールする

ImageMagick6 本体をビルドしただけでは、取り扱う画像フォーマットが限定されています。jpg や png を扱えない…というより、ほとんどの画像フォーマットが使えないようです。画像フォーマットのデコーダー等は ImageMagick 本体には含まれておらず、自分で用意してくれということなのだと思います。画像フォーマットのライセンスやらもいろいろ事情がありそうです。

そこで、ImageMagick6 をビルドする際に必要な画像フォーマットのパッケージをインストールしておきます。
以下は jpg, png に関するパッケージです。devel パッケージもインストールしておくことに注意してください。
# yum install libjpeg libjpeg-devel
# yum install libpng libpng-devel

Wand の画像フォーマットエラー

jpg, png に関するパッケージをインストールしておかないと、いざ ImageMagick6 を使おうとした時にエラーになります。
python から ImageMagick6 を使える Wand では、以下のようなエラーが発生します。
Traceback (most recent call last):
  File "wandtest.py", line 4, in <module>
    with Image(filename='sample.jpg', format='JPEG') as img:
  File "/home/momokan/python/wand/wand/image.py", line 2744, in __init__
    self.read(filename=filename, resolution=resolution)
  File "/home/momokan/python/wand/wand/image.py", line 2822, in read
    self.raise_exception()
  File "/home/momokan/python/wand/wand/resource.py", line 222, in raise_exception
    raise e
wand.exceptions.MissingDelegateError: no decode delegate for this image format `JPEG' @ error/constitute.c/ReadImage/504
Exception TypeError: TypeError("object of type 'NoneType' has no len()",) in <bound method Image.__del__ of <wand.image.Image: (empty)>> ignored

ImageMagick6 をインストールする

ソースコードは github に上がっています。なのでこれを持ってきましょう。
$ git clone https://github.com/ImageMagick/ImageMagick6
そうしたら clone した ImageMagick6 ディレクトリに移動し、configure, make, make install します。
この辺りのビルドの仕方は伝統的な C プログラムですね。
$ cd ImageMagick6
$ ./configure
$ make
# make install
configure のオプションにインストールディレクトリなんかもあるはずなのですが、面倒なので特に指定していません。指定しない場合には /usr/local/lib に共有ライブラリ(.so ファイル)がインストールされます。
続きを読む WEB 技術python  コメント (0) 2018/05/07 16:41:26

npm リポジトリを verdaccio で構築する

前回 npm パッケージを作ってみましたが、npm でパッケージを作っていくとそれをリポジトリに公開したくなってきます。NodeJs には https://www.npmjs.com/ という公式リポジトリが存在しますが、一般公開したくない npm モジュールを置きたいとか、npm リポジトリ自体も自分で構築したいという要望もあるでしょう。
自前の npm リポジトリサーバーはいくつか存在するのですが、今回は構築の簡単な verdaccio を使ってみようと思います。

dotall-user.png

verdaccio をインストールする

npm リポジトリ用のサーバーにログインし、verdaccio をインストールします。
npm モジュールとして提供されているので、npm コマンドでインストールできます。
# npm install --global verdaccio
verdaccio をインストールしたマシンをそのままサーバーとして使うので、--global を指定してグローバル環境にインストールします。
私の環境では /usr/lib/node_modules/verdaccio/ 配下にインストールされました。

続いて verdaccio を起動します。
$ verdaccio &
verdaccio は root 権限がいらないそうなので、一般ユーザーで起動します。

これで verdaccio の npm リポジトリにアクセスできるようになっています。
verdaccio を動かしているマシンの DNS を verdaccio.example.com とした場合、アクセス URL は http://verdaccio.example.com:4873 です。
続きを読む WEB 技術JavaScript  コメント (0) 2018/04/12 20:06:02

Hadoop を Pseudo-Distributed Mode で試してみた

大量データの分析で威力を発揮するものの、癖が強すぎて適応分野の選定が難しいと一部で話題になっているらしい Hadoop ですが、これまでなかなか触る機会がなかったため、少し触ってみることにしました。実際にうまく使いこなせている人達は企業でさえも 10 〜 20 社あるかないかとか言われてるらしいですが、個人的に何も知見がないため、何を言われていても「へ〜そうなんだ〜」と返すしかありません。エンジニアとしてそんな状況もどうなんだと思ったので、ちょっと遊んでみることにしました。

ちなみに、Hadoop には大きく分けて Standalone Mode、Pseudo-Distributed Mode、Fully-Distributed Mode の 3 つの構築方法があるそうで、公式ドキュメントちょっと遊んでみるなら単一ノード構成がいいよと書かれていたので Pseudo-Distributed Mode で遊んでみることにしました。ざっとドキュメントを読んだ感じ、Standalone Mode は分析用のロジックを動かしてみるだけで、Hadoop の特徴らしい HDFS なんかにまったく触らず終わりそうだったので、やめておきます。分析ロジックが jar なので、自分で書いた jar を試しに動かしてみるには Standalone Mode が良さそうです。

なお、今回はらしいらしいという記述が多くなっていますが、分散処理は奥が深そうで、現時点では断言できることが少ないためです。ブログにはなるべくしっかりとした情報を書きたいのですが、これに関しては仕方ないかなと思います。ご了承ください。
続きを読む WEB 技術Hadoop  コメント (0) 2017/03/29 18:42:18

sqlite3 で SELECT 結果の行番号を取得する

SQL を使っていると、SELECT した結果セットの各行について、結果セット中での行番号を知りたい、という場面にたまに遭遇します。こういうやつです。
SELECT * FROM books ORDER BY price;
id          title           price     
----------  --------------  ----------
3           Art with Basis  600    #行番号: 1
4           Book List       990    #行番号: 2
1           Civilizations   1000   #行番号: 3
2           Dream Post      1200   #行番号: 4
5           El sant magina  1500   #行番号: 5
一般的な一覧系の処理では先頭から N 件とりだすことが多いので、OFFSET で取り出した件数を指定すれば行番号を意識せずに続きをとることができます。

ただ、ID からその行の結果セット中での位置を知ろうとすると、やはり行番号が欲しくなってくるのです。結果セットがソートされていたり、ソートされているカラムがユニークでなかったりするとかなり面倒なことになります。特定の ID の行の前後 3 行ずつを取りたい、というような時に困ってしまうわけです。

結果セット中での行番号を取得するために、Oracle では ROWNUM 擬似列や ROW_NUMBER() 関数が用意されているそうです。
また、MySQL ではユーザ定義変数を使うことで、SELECT 時に行番号を計算し、出力することができます。
SET @rownum := 0; SELECT *, (@rownum := @rownum + 1) FROM books;

しかし sqlite3 では ROW_NUMBER() 的な機能もユーザー定義変数的な機能も実装されていないので、これらの方針をとることはできません。ネットを見てみると以下のようなクエリで計算している例がありますが、境界値として WHERE 句で使っているカラム(ここでは id カラム)がユニークでない場合、境界値として機能しないため、厳密な行番号はとれません。
SELECT id, title, price, (SELECT COUNT(*) FROM books b2 WHERE b1.id >= b2.id) AS rownum FROM books b1 ORDER BY rownum;
id          title           price       rownum    
----------  --------------  ----------  ----------
3           Art with Basis  600         1         
4           Book List       990         2         
1           Civilizations   1000        3         
2           Dream Post      1200        4         
5           El sant magina  1500        5         
※ ORDER BY rownum は見やすさ重視のためにつけたもので、必須ではありません。

もう 1 点、この方法では 1 行毎にサブクエリで行番号をカウントするため、参照性能に問題があります。MySQL では悪名高き DEPENDENT SUBQUERY にあたるためです。
続きを読む WEB 技術  コメント (0) 2017/02/01 19:45:13

Ionic 2 を試してみた

あけましておめでとうございます。
年の瀬に Maven Resources Plugin の記事 を書き、お正月だからとだらだらしていたら 3 年経ってしまいました。

それはともかく、少し時間ができたのでスマホアプリの技術でも触ってみようかと思い、Ionic 2で遊んでみました。今回は Ionic 2 のインストールから空のプロジェクトを作ってブラウザから動作確認をし、独自の新ページを追加するところまでです。

スマホアプリというと Android や iPhone の実機をつないで都度ビルドしながらデバッグする、というイメージが強いですが、Ionic 2 などの最近のフレームワークは WEB ベースの技術が組み合わさっているため、実機がなくてもブラウザから動かすことができます。簡単なページは JavaScript や CSS を使って WEB アプリ的に実装し、それで実現できない部分は端末固有の実装として Java や Swift で書いたプラグインに任せよう、という設計思想だそうです。確かに、ゲーム系でないスマホアプリは、突き詰めてしまえばボタンを押しながら画面遷移していくだけの事が多いので、WEB アプリに似せた開発ができるというのは効率的なのだと思います。

Ionic 2 は Cordova というマルチプラットフォーム向けのフレームワークに覆いかぶさる形で作られています。なので Cordova 同様、Ionic 2 で書いたアプリも Android や iOS 用にビルドすることができます。また Ionic 2 の特徴として、AngularJS と切っても切れないほと密接に連携していて、その特徴を色濃く受け継いでいます。データとデータを取り扱うロジック部分をビューから切り離し、そのデータをビューに対して自動的に埋め込ませることができます。このあたりの考え方は、WEB アプリを作ったことのある人には、馴染みの深い MVC モデルの応用のように聞こえますが、MVC モデル自体がデスクトップアプリケーションに端を発しているものなので実際は逆輸入なのかもしれません。

さて、今回の目標としては、似非商品検索アプリを作ってみようと思います。トップ画面から検索画面に遷移し、そこで入力したキーワードから、キーワードを商品名に含む商品の一覧を表示する、という感じの動きです。ただし、今回は実際に DB や WEB サービスから検索するわけではなく、キーワードを商品名っぽく加工して表示するだけとします。
こんな感じの仕上がりを目指していこうと思います。
続きを読む WEB 技術Ionic 2  コメント (0) 2017/01/24 19:19:22

Pushy Grandma ver 0.3 を公開しました

一度中毒症状から抜け出しても、ふとしたきっかけで再びクッキーを焼きたくて焼きたくて仕方なくなってしまうという恐怖のクリックゲーム Cookie Clicker にて、せめてプレイヤーの身体だけは守ろうというコンセプト(嘘)で去年公開したPushy Grandma をバージョンアップしました。
Pushy Grandma は Cookkie Clicker のクッキーを自動でクリックし続ける Grease monkey スクリプトです。
pushyGrandmaVer0.3.png

今回のアップデートでは通常のノーマルクッキー、ゴールデンクッキーに加えてクリスマスのトナカイが自動クリックされるようになりました。
おばあちゃんがトナカイを屠るようになりますので、ぜひぜひご利用の方はアップデートしてみてください。

ダウンロード

Greasemonkey 用 Cookie Clicker 自動クリックスクリプト
Pushy Grandma ver 0.3

インストール手順は前回と同様になります。
そのまま ver 0.3 のリンクを開いてもらえればバージョンアップできるかと思いますが、もしうまくインストールできないようでしたら、一度 Pushy Grandma を削除してから再度インストールしてみてください。

続きを読む WEB 技術  コメント (7) 2014/04/26 13:55:39

Pushy Grandma ver 0.23 を公開しました

高確率でクッキー中毒(もしくは Grandma の虜)になってしまうという Cookie Clicker プレイヤーの手の健康を守るべく(言い訳)、昨日作成したPushy Grandma をバージョンアップしました。

これまでは画面内のノーマルクッキーと金のクッキーを音もなく自動クリックし続けていましたが、あまりに BOT 的で味気ないので、クッキークリック時の画面エフェクトを追加してみました。(画面エフェクトがあろうとなかろうと BOT っぽいですが……)

皆さん考えることは同じのようで、世の中にはもう結構な数の自動クリックツールが出回っているようです。なので Pushy Grandma では視覚的な面白さも加えてみようということで(完全趣味の方向に)手を入れています。

pushyGrandma01.png

画面効果以外の機能はほとんど変わっていませんが、細かいバグを直したりしているので、できれば最新版へのバージョンアップをお勧めします。

ダウンロード

Greasemonkey 用 Cookie Clicker 自動クリックスクリプト
Pushy Grandma ver 0.23
※ 2014/04/26 ver0.3 を公開しました

なお、インストール手順は前回と同様になります。
バージョンアップには、そのまま ver 0.23 のリンクを開いてもらえればいいと思いますが、もしうまくインストールできないようでしたら、一度 Pushy Grandma を削除してから再度インストールしてみてください。

続きを読む WEB 技術  コメント (6) 2013/09/18 22:44:29

Cookie Clicker で自動クリックする Greasemonkey スクリプトを書いてみた

『気づいたら朝になっていた』『腱鞘炎患者製造機』と一部で人気のブラウザゲーム Cookie Clicker をはじめてみました。

cookieClicker00.png
このゲームの目的はただひたすらにクッキーを作ることです。
画面左の大きなチョコチップクッキーをクリックすることで、おいしそうなクッキーが1枚手に入ります。
作ったクッキーとひきかえにアイテムを買うことでクッキーの生産効率がアップし、さらに多くのクッキーを作れるようになります。
クッキーを何個作ったら何かが起こるとか、そういうのはありません。(PS3 的な実績はありますが。)本当にそれだけ。

……なぜそうまでして人はクッキーを作り続けるのか……。
……このクッキーにいったいどれだけの意味があるというのか……。
しかしあなたに悩むための時間はありません。
「おい新入りィ!!手が止まってんぞォッ!!」
どこからか親方の声が聞こえてきます。
そう、考える暇があるのなら、ひたすらクッキーをクリックし続けるのです。
この宇宙をクッキーで埋め尽くすために……。

―――以上クッキー中毒者の脳内ストーリーより。


という感じで怪しいくらいにはまってしまう Cookie Clicker ですが、いい加減マウスが壊れそうになってきたので、自動でクリックしてくれるグリモンスクリプトを書いてみました。(ようやく本題)
画面左に表示されるクッキーだけでなく、稀に出現するボーナスアイテム: 金のクッキーも自動でクリックしてくれます。

注意
このスクリプトによって Cookie Clicker のゲームバランスを壊したとしても、当方は一切責任を負いません。
ご自身で心ゆくまで手作りクッキーを焼いた上で、自己責任のもとご利用ください。


Cookie Clicker からクリックをとったらただの Cookie ですからね…。

ただ、クリックで作れるクッキーの数は、自動生産されるクッキーのだいたい 3 % くらいのようなので、クリックを自動でまわしても極端に有利になるということもなさそうです。1 秒間に 33 回クリックしてやっと自動生産量と同じになる感じ。


続きを読む WEB 技術  コメント (2) 2013/09/17 12:30:35

Html5 Outliner Extended

HTML5 で追加された article, aside, nav, section タグはセクショニング・コンテンツと呼ばれています。これらのタグは WEB ページのデータ的な構造を表すために使用されます。ただ、これらのセクショニング・コンテンツによって表されるページ構造のアウトラインは、デザイン(CSS など)をあてるためのタグ構造と必ずしも一致している必要がなく、視覚的にも確認しづらいものです。

ページのアウトラインを確認するツールとして、HTML5 Outliner  という Chrome 拡張があります。
これは表示しているページの HTML を読み込んで section や article などのタグからページのアウトラインをツリー構造で表示してくれるものです。

わたし自身もこれにだいぶお世話になっているのですが、使っているうちにもう少し使いやすくできたらと思うようになり、ちょっとした機能ではあるのですが拡張バージョンを作ってみました。
Html5OutlinerExt.png
HTML5 Outliner のオリジナルバージョンは MIT License でソースコードも公開されています。作者は dymonaz ( Dominykas Blyžė ) さんという方です。

本来ならオープンソースのプロジェクトらしくパッチを送って取り込んでもらえばいいのでしょうが、チキンなのでなかなかそこまでは踏み出せず、fork した形で公開することにしました。ここに置いてあるものは、オリジナルの HTML5 Outliner を独自に機能拡張した野良バージョンとなります。

 最新バージョン

ダウンロードはこちらからどうぞ。
html5outlinerExt.0.5.1.crx
HTML5 Outliner ver 0.5.1 相当です。

続きを読む WEB 技術  コメント (0) 2013/08/13 00:28:16
プロフィール HN: ももかん
ゲーム作ったり雑談書いたり・・・していた時期が私にもありました。
カレンダー
<<2024, 12>>
1234567
891011121314
15161718192021
22232425262728
2930311234