サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブラックフライデー
blog.emattsan.org
まず始めに。 ネタ記事です。 ひさびさのネタ記事です。 ネタプログラミングです。 とはいえ。 黒魔術を使うことはなくても、このようなしくみを知っていると、その知識が役に立つときが来るかもしれません(来ないかもしれません)。 Level 1, Medium: Port.open/2 で Ruby を起動する まずは定石の範囲で。 Port.open/2 を使って Ruby のプロセスを起動します。 外部プロセスの起動には System.cmd/3 という関数もありますが、 Port.open/2 の方が制御を細かくできるのでこちらを利用しすることにします。 ちなみに System.cmd/3 も内部では Port.open/2 を利用していました。 path = System.find_executable("ruby") port = Port.open({:spawn_executabl
Arduino! 最近、Arduino にはまっています。 Arduino - Home エントリモデルである Arduino UNO R3 や、それと同等の構成で小型化した Arduino NANO は Atmel の ATmega328P というICを使っていますが、このワンチップは私がプログラミングに本格的に没入した頃に使っていた PC と遜色ない性能を持っています。Arduino に触っているとその深みにハマったときの感覚が蘇ってきます。 そして Arduino の深みにはまっていくと、Arduino IDE でちまちまとスケッチを描いていくのがおっくうになりコマンドラインで管理できる方法がないかと探すことになります。 見つけたのが PlatfomIO 。 An open source ecosystem for IoT development · PlatformIO Ardui
XP祭り2014で、Re:VIEWを使った書物の作成について話を聞きました。 Re:VIEWとその周辺とツールを使うことで、markdownでマークアップしたテキストをPDFやePubにできるとのこと。 今回、仕事の納品物のドキュメントを作成するにあって、ツールに何を使ってもOKという許可がおりたこともあって、試しにRe:VIEWでドキュメントを書くことにしました。 その記録を兼ねた記事です。 まずは細かい話を省略して、準備からPDF生成まで。 ツールの用意 ツール 説明 参照サイト md2review markdownからRe:VIEWへ変換するのに利用します GitHub - takahashim/md2review: a converter from Markdown into Re:VIEW, using redcarpet Re:VIEW Re:VIEW本体 GitHub - k
ふつうに ブラウザがインラインのSVG表示に対応していれば、HamlでSVGを書くとそのまま表示してくれます。 app/controllers/circles_controller.rb class CirclesController < ApplicationController def index @circles = 30.times.map { {x: rand(500), y: rand(500), r: rand(100)} } end end app/views/circles/index.html.haml %svg{'xmlns' => 'http://www.w3.org/2000/svg', 'xmlns:xlink' => 'http://www.w3.org/1999/xlink', 'viewBox' => '0 0 500 500', 'width' => '
単票を作るために、Ruby で PDF を生成するライブラリ Prawn を試してみました。 Prawn: Fast, Nimble PDF Generation For Ruby Prawn by example (PDF) repository (GitHub) 以下、Prawn を使って PDF ができるまでの様子です。 Prawn を導入する RubyGem で提供されているので、それインストールします。 $ gem install prawn PDF ファイルを作成してみます。 require 'prawn' Prawn::Document.generate('sample.pdf', page_size: 'A4') do |pdf| pdf.text 'Hello, Prawn!' end これで sample.pdf というファイル名の A4 サイズの PDF ファイルが作
グラフを木分解します。 …。 木分解。わたしもひと月前まで聞いたこともありませんでした。 木分解とは。おおざっぱに言うと、グラフからルールに従って部分グラフの集合を取り出し、その部分グラフを木構造のノードとする木を作ること。 くわしいことはこことかを参照してみてください。 なぜこのようなことをやっているかというと。仕事でアルゴリズムの実装というのを引き受けまして。これがグラフ理論の論文でして。このひと月ほど集中的にグラフ理論の勉強をしているとこでして。 そのアルゴリズムの実装に木分解が必要になり、木分解のアルゴリズムのひとつである最小次数法というのを実装してみた次第。 Graphクラスを定義した graph.rb を用意します。 require 'Set' class Graph attr_reader :edges, :vertices def initialize @edges = {
#include <stdio.h> void putStrLn(const char* s) { printf("[%s]\n", s ? : "null pointer"); /* 条件演算子 ( ? : ) の第2オペランドを省略 */ } int main(int argc, char* argv[]) { putStrLn("hoge"); putStrLn(""); putStrLn(NULL); return 0; } 実行結果。 [hoge] [] [null pointer] 条件演算子(三項演算子とも)である ? : の書式は、 operand1 ? operand2 : operand3 ですが、このうち第2オペランドを省略すると、第1オペランドの値が真の場合、式の値は第1オペランドの値になる…というのがありまして。これをどこで覚えたか忘れてしまい、そもそもこれは仕様
「第7回オフラインリアルタイムどう書くの問題」を解いていて気がついたこと、学んだことを明日のじぶんのために、記録。 のんびり座りたい 〜 横へな 2013.2.2 いろいろ問題をコネているうちに、この問題はパタンマッチングで解けることに気がつきました。正確に言うと、最初にC++で解いたコードを読み直していて、パタンマッチングとバックトラッキングそのものだということに気がつきました。 マッチングに失敗したら条件を替えてもう一度最初からマッチングを試みる、というバックトラッキング。 以下、C++とPrologとHaskellでどうするか、整理してみたものです。 設問 まず、パタンマッチングの部分だけが見やすくなるように、「どう書く」の問題からいろいろ取り去ってより簡単な問題を作りました。 要素を格納する順序付きのコンテナを考える。先頭の位置は0とする。 コンテナ中にある指定された要素が3つ連続
ネット上にテキストを保存してくれるSimplenoteというサービスがあります。iPhoneアプリケーションもあるので、わたしの場合iPhone上では標準のメモの代わりに利用しています。 さらにそのSimplenoteのテキストをバックアップしてくれるサービスSimplenote Backupというのがあります。こちら、ソースコードが公開されています。 http://github.com/al3x/simple-backup/tree コードを読んでいくとSimplenote.pyというファイルにSimplenoteへアクセスするための機能がまとめられているのがわかります。 PythonよりRubyの方が性に合っている、という個人的な理由のもとにこれをRubyに書き換えられないかと試みたんですが…。SSLの壁に阻まれてあっさり挫折。Rubyに標準添付されているライブラリnet/httpsで
恥ずかしながら。ごく最近までHaskellにUnitTestのライブラリがあるのを知りませんでした。恥ずかしい。 調べてみたところ、思ったよりも簡単にUnitTestを書けることがわかったので、ちょっとまとめてみました。 間違いありましたらご指摘いただけるとたいへんありがたいです。 詳細についてはリファレンスをあたってみてください。 Test.HUnit Test.HUnit.Base Test.HUnit.Text HUnitのインポート HUnitを使うにはTest.HUnitモジュールをインポートします。 import Test.HUnit GHCiで利用するばあい。 $ ghci Prelude> :m Test.HUnit Prelude Test.HUnit> アサーション アサーションは基本的に、常に失敗、Falseのとき失敗、不一致のとき失敗、の3種類です。それぞれ通常の関
PrologとHaskellで同じ問題を解いてみました。Prologで同程度の問題を解けるくらいのプログラミングができたのは初かもしれない…。 お題は鍋谷さんが開催されている「オフラインリアルタイムどう書く」の第4回のお題を利用させてもらいました。 テトロミノ認識〜 横へな 2012.10.6 わたしが回答した例はGitHubにもアップしてあります(このエントリで取り上げるコードもアップされています)。 GitHub - mattsan/ord4tetroid: 第四回 オフラインリアルタイムどう書く「テトロミノ認識」 コードが、というか、そもそも解き方がアレでナニで不細工ですが、今回の話題の中心は別のところ――HaskellとPrologを比較してその違いを知りPrologの理解を深める――なので大目に見てください。 PrologとHaskellを比較する コードの全体は後半にありますの
去る7月6日。「第一回 オフラインリアルタイムどう書く」が開催されました。 第一回 オフラインリアルタイムどう書く : ATND 地理的時間的にわたしは参加できなかったのですが、お題が公開されたので解いてみました。 問題 三目並べ( tick-tack-toe )の手を入力とし、勝敗を出力する。 先攻がo、後攻がx すでに打ってある場所に打った場合、反則負け x が反則をした場合、「Foul : o won.」と出力 縦横斜めのいずれかで一列揃ったら、揃えた方の勝ち x が揃えた場合、「x won.」と出力 9マス埋まっても揃わなかったら引き分け 「Draw game.」と出力 勝敗が決した後の手は無視する 入力文字列は、先攻から順に打った位置を示す。盤上の位置と数の対応は下表を参照。 入力文字列が「91593」の場合、「oが9の位置、xが1の位置、oが5の位置、xが9の位置→xの反則負け
mrubyをためしています。びっくりするぐらい情報が少ないので、ためしたことおぼえたことをまとめる意味で、ブログに書きつつmrubyの核心に這いよっていきたいと思います。 しかしなんですね。あの名を知ってからおよそ四半世紀、「這いよる混沌」の名をこんなにも耳にする時代が来るとは思ってませんでした。ルルイエは南太平洋にあるのでなく、北太平洋の西端の島国のことだったんじゃないかと思う今日この頃。 閑話休題。 エントリを書く中で断定的な言葉づかいをしているところがありますが、手探り状態ですので、間違い、勘違い、メモリリーク、access violation等々の欠陥が潜んでいる可能性があります。その点はご容赦ください。 またコードの全体はGitHubに登録してあります。 GitHub - mattsan/tesaguri_mruby: log of learning mruby 準備 まず指定し
第一回 オフラインリアルタイムどう書くの参考問題 - Qiita (via 鍋谷さんの参考問題: へなちょこ解答(Java) - 虎塚) こういう面白そうな話題は、まぜてくださいー。 あ、残念ながらオフラインのほうの参加はちょっと無理。ほんと残念ながら。 先に結果。 poker1.cpp · GitHub 以下、自分のコードの解説。 C++ わたしも最初struct Card { char suit; int rank; };と書き始めたのですが、虎塚さんのエントリの最後の方に、Rubyで3行、と書かれていたのを見て、これは手続き的に書いたんじゃだめだ、と方向転換。 例題をよく読むと、スートは役に関係していないことがわかり、ということはスートの文字を区切り文字にして文字列分割すればいいというところまでは思いついたものの。C++にそんなのないので、for_eachテンプレートでスートの文字を
Google Testが取り持つ縁で、このようなエントリに出会いました。 GoogleTest で標準出力、標準エラー出力をテストする - 質のないDiary H おぉ。Google Testで標準出力をテストする。ナイス! …。でも。 名前空間を「internal」にしてあるように、そこは触れてはいけない空間ではないかという雰囲気です。ドキュメントに載ってないのもそのためかと。 とはいえ。Google Testで標準出力の内容をテストするというアイディアをほっとくのはもったいないので。記憶を頼りに標準出力について調べてみました。 と、いうわけで。仕様的にも問題ない操作で標準出力の内容を取得する方法です。 C++のストリームはstreamとstreambufからできている C++のストリームは2段構えで、ユーザ側のインタフェースのstreamクラスと、デバイス側のインタフェースのstrea
Lua側から見た場合の差異。C言語向けのAPIの差異はいずれまた。 詳しくはリファンレスマニュアルの「Incompatibilities with the Previous Version」を参照してみてください。 言語構造の変更 制御構造に変更がありました。gotoの追加です。 gotoはジャンプ先のラベルの名前を指定しますが、ラベルは名前の前後それぞれにコロンを2つ繋げたものになります。 goto foo -- ... ::foo:: 削除されたLua 5.1の基本関数 次の関数が削除されました 関数 理由 getfenv コンセプト変更にともない削除 setfenv コンセプト変更にともない削除 module コンセプト変更にともない不要になった loadstring loadに統合 unpack table操作関数に組み込まれた コンセプトについてはマニュアルに次のようにあります。
昨夜は @emattsan さんのLuaとIOの話から始まり、 @crashpon さん交えてアセンブラに寄り道しつつ、最後 @maccha がPrologについて熱く語り、その全てを @torazuka さんが熱心に聞く、という稀有な展開。オイラはその展開自体をメタに楽しんだw— あまのりょーさん (@beakmark) 5月 11, 2012 そんなこんなで。@crashponさんから「言語オタク」の称号を頂戴致しましたw。 そんな中で「C++のtemplate で問題を解く」という話をしたら、( ゜д゜) な顔をされてしまいましたので、久々に「プログラミング言語 C++のtemplate」ねた。 C++マスターの面々はもっとすごいことをやっているので、マスターの方がここを見ていましたら「こいつ、またやってる」ぐらいに思って頂ければと。 道順を数える 残念ながら2年ぐらい前に事実上活動
Io話を続けるつもりだったのだけれども。ネタを仕込んでいる間にわけあってLuaに手を出すことになり。そういや昨年末に新しいバージョン、Lua 5.2がリリースされたっけ、と思って調べてみたら。気をつけないとならない互換性のない変更があるのを見つけたので、それのめも。 ライブラリの登録の方法が変更になりました バージョン5.2とそれ以前のバージョンとの非互換の部分について、リファレンスマニュアルの中に「Incompatibilities with the Previous Version」という項目があります。そこに「Function luaL_register is deprecated.」と、さらっと書かれています。 この[http://www.lua.org/manual/5.1/manual.html#luaL_register:title=luaL_register]という関数はラ
「2日目」のつづきのつづき。念のためもう一度言うと、「2日目」というのは、Ioのエントリを書き始めて2日目という意味でなくて、本の章の名前です。今日は「2日目」の3日目です。 7つの言語 7つの世界 作者: Bruce A. Tate,まつもとゆきひろ,田和勝出版社/メーカー: オーム社発売日: 2011/07/23メディア: 単行本(ソフトカバー)購入: 9人 クリック: 230回この商品を含むブログ (64件) を見る メッセージ Ioはオブジェクト指向なので、「オブジェクトにメッセージを送る」というのがプログラムを駆動する基本になります。 メッセージの内容を知りたいばあい、メソッド内でcallメソッドが使えます。 Io> Object myMethod := method(call println) ==> method( call println ) Io> Object myMe
久々にGoogle Testネタ。 以前ちょっとふれて宿題としておきながら放置していたことを思い出したので、そのフォロー。 fused source files are included. バージョン1.5.0の時点で新機能(?)として「fused source files」が追加されています。先のエントリを書いた時点では調査不足でわかっていなかったんですが、名前から予想したとおり、「コピーしてincludeてコンパイルしてリンクすりゃOK」というものでした。 Fusing Google Test Source Files 現在最新のリリースである1.6.0のzipファイルを展開すると「fused-src」というフォルダがあり、その中に「gtest」というフォルダがひとつだけ入っています。 gtest-1.6.0/ fused-src/ gtest/ このフォルダの中に行数が約2万行の「g
こちらのエントリとコメントを読みながら、「ふだんはgood関数を使ってるけど、どんなときに『good』なんだろう?」と調べはじめたら。予想以上に知らないことが多かった。 ストラウストラップのプログラミング入門(2) 第3章 - 虎塚 >>演算子から始まって、わかったことを少しまとめてみました。 istream::operator>> - C++ Reference ストリームの状態を示す値について ios_base::iostate - C++ Reference フラグ 内容 eofbit ファイルの終端に達した failbit 内部動作が原因で入力操作が失敗した badbit ストリームバッファの入出力操作が失敗した goodbit エラーなし(値としてはゼロ) 入力の失敗ではfailとbadがありうるようです。これは知らなかった。 実際に入力された文字列が、取り出そうとした型(変数の
RC2が公開されたのでブログでコメントしておこうと思いつつ。うかうかしていたら、あっというまに正式リリース。 GitHub - google/googletest: Google Test 最近はC++でまともにプログラミングをしていないのもあって、Google Testもトピックがあったときにちょこっと言及するぐらい。以前まとめを書いたのがバージョン1.3.0のときだから、それから3つもバージョンが上がってしまった。 googletestまとめ - エンジニアのソフトウェア的愛情 アナウンスはこちら。04/18付け、日本時間では今朝のリリース。 Google グループ まだダウンロードしただけでキチンと触れていないんですが、おさらいも兼ねて変更点を書いておきます。せっかくなので1.3.0以降の変更点をまとめて一覧。 ドキュメントやコードを読んでみた内容も合わせて書いてみますが、実際に使っ
前回のエントリにたいして、名のあるEvernote使いのお一人であるrashitaさん(@rashita2さん)からお礼の言葉を頂いてしまいました。とても光栄です。自分が書いたもので喜んでもらえると素直にうれしいものです。 実際のところは「『コードおたく』が新しい手法を見つけたのでよろこんで遊んでいたら達人の目にとまって、大勢の前で紹介してもらってしまった」というのが近い気がするんですが。「これが『キュレーションの時代』なのか」と思ってみたり、みなかったり(はてなダイアリーはリンクを貼ると自動的にトラックバックがとぶので、気が付かれてはいたのではないかとは思いますが)。 ともかく。ネットがなければこうやって情報が交換されることもなかったわけで、やっぱり感慨深いものがあります。 rashitaさん曰く「何か不満があるとすれば、ファイルを保存しないままウィンドウを閉じるので、『保存してないけど
こちらの記事でEvernote for Mac(EvernoteのMac OS X用のクライアントソフト)はAppleScriptで操作できるということを知りました。 Mac中にEvernoteにメモを送るためだけのアプリ『goEvernote』(仮) – R-style おやくそくのように。CotEditorからEvernoteへ、に挑戦。 情報収集 まず、AppleScriptそのものについてはこちら。 AppleScript Language Guide CotEditorについてはこちら。 http://sourceforge.jp/projects/coteditor/ また、CotEditorをインストールすると下記の場所にAppleScriptについてのドキュメントが格納されます。 /Applications/CotEditor_1.0.1/Script/AppleScrip
ちょっとつまずいたので記録。 経緯。 http://textile.thresholdstate.com/でマークアップしたテキストをウェブブラウザで表示できないかと考えた(性懲りもなくまた無節操にいろいろ手を出してます)。 Textileを解釈してHTMLに変換してくれるJavaScriptのスクリプトを見つけたので、これを使おうと考えた。 Textileでマークアップしたテキストは表示するHTMLファイルとは別ファイルにしようと考えた。 そこでブラウザで表示されたときにjQuery.getメソッドでTextileで書かれたファイルを読み込もうとした。 Google Chromeを使ってテストしたら表示されなかった。ChromeのJavaScriptコンソールを開いてみると「XMLHttpRequest cannot load file:///(中略)/sample.textile. O
タイトルのことですが。 「エンジニアのソフトウェア的愛情」というのは、もちろんキューブリック監督の作品「博士の異常な愛情」のパロディなわけですが。このあいだ、一行紹介の「〜を・愛する・ように〜」のところの点の打ち方が面白いと言われました。 これもまた同映画の正式な邦題「博士の異常な愛情 または私は如何にして心配するのを止めて水爆を・愛する・ようになったか」をそっくりマネたわけなんですけれども、今回それを確認したところ、現在販売されているDVDなどの商品では点がない。どこを探してもやっぱりない。「もしかしてまたなにか勘違いしたか?」と検索を続けてみたら、版元のソニーピクチャーズのサイトの古いページで点ありの記述を見つかりました。版が新しくなったときに変更された模様。 でも。「博士の異常な愛情」がもとネタなのは確かなもの、直接には「岸和田博士の科学的愛情」から拝借したというのが実のところ。 博
前回の続きです。 前回は BDF ファイルをパースして読み込む話をしました。 そして、BDF ファイルは単純なテキストファイルだし、Nerves アプリケーションへそのまま持っていっても大丈夫だろう、と高を括っていたのですが。 Raspberry Pi ZERO W の非力さを甘くみていました。 起動時に BDF ファイルを読み込ませるようにしたら、電源を入れてもなかなか入力に反応しない。 何かを壊したかとあせりもしたのですが、結局テキストのパースに時間がかかっている様子でした。 一旦読み込み終えてしまえば、あとはメモリ上のアクセスのみになるので、その後の動作には影響しません。 しかし電源を入れてから使えるようになるまで時間がかかるのは問題です。 そのため、読み込んだデータを別の形式で保存しておきすぐに読み出せるようにできる方法を模索しました。 せっかくなら文字コードをキーにアクセスできる
「書く書く詐欺」になりつつあった、googletest 1.5.0の解説。ようやく着手です。 今までは、「./configureしてmakeしてsudo make installすればOK」…という具合にやってきていたんですが、Version1.5.0ではこの方法を正式には採用しない方針に変更したようです。 そのように考えた理由がここに書かれています。 Google グループ 要は。コンパイル済みのライブラリを作ってしまうと、コンパイル条件を変更したいときとかに追従できなくていろいろ悪さする可能性があるから、ということのようです。で、テストをビルドするときにgoogletestのコードも一緒にコンパイルしてくださいな、ということみたいです。 READMEファイルの内容とgtest-1.5.0/src/Makefileの焼き直しですが、Version1.5.0のビルドの仕方を簡単に説明。 直
目鼻がつきました。 GitHub - mattsan/BitOperation: operating bits classes (2010/03/10追記:上記のリポジトリは随時更新しています。この記事を書いた当時の内容はこちらへ) これはなに? 以前にも書いたことがあるように、いまの仕事では通信がらみということもあり開発するソフトでもビット列を扱うことが多々あります。 で、ビット操作が何度もソースコードに現れるんですが。一貫性のあるスッキリした書き方がなかなかできない。書き方に限れば書式のルールを決めることで多少は一貫性のあるコードにできるとは思いますが、それでも面倒くさいことには変わりなく。 そんなわけで。もっと楽に扱えるようにするクラステンプレート(と関数テンプレート)をC++で書いてみました。 使うために ソースファイルは上記のGitHubのサイトから入手してください。本体はBit
次のページ
このページを最初にブックマークしてみませんか?
『エンジニアのソフトウェア的愛情』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く