サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
d-kami.hatenablog.com
以前カーネル/VM探検隊でx86エミュレータの開発をやめた理由を発表したが本当の理由を喋っていない。結局病気が原因で統合失調症に勝てなかったことが全てだが、自分で認識してる理由だけでも書いていこうと思う。私にでている症状は陰性症状と認知機能障害である。 統合失調症 - Wikipedia 理由その1 作業時間の低下 以前のエントリにも書いたが今の私は1日2時間程度しか作業できず、現在、2時間を超える仕事をしているため、家ではほとんど作業ができない状態が続いている。この作業はプログラミング以外では若干ゆるいらしく、作曲が微妙にできたりするが、家でのプログラミングはかなり絶望的な状況となっている 理由その2 資料が読めない 私は長文を読解することができない。長い文章は文字として認識はできるけど文章として頭に入ってこない。データシートやIntelのマニュアルは部分的にしか読めない。説明書や契約書
VPNServiceを使ったソースコードを公開します。起動するとネットに繋がらなくなるけど、端末から飛んでいくパケットが途中まで(現在最初のパケットのみ)見れます。VPN関係のライブラリの使い方が正しいか不明。Android 4.0からが対象。また、AndroidManifestに以下のパーミッションが必要。このプログラムを起動するとまず、ダイアログが表示されるのでOKを押します。あとは端末でブラウザ開くなりするとパケットを解析した結果がログに流れますので、それを見て興奮するためのものです。終了方法は通知にある鍵アイコンから切断を選ぶことで終了します。 <uses-permission android:name="android.permission.INTERNET"/>あとAndroidManifest.xmlのapplication内に以下の記述が必要 <service androi
追記: 共著のuchanさんによる詳しい紹介があります 出版のお知らせ 『自作エミュレータで学ぶx86アーキテクチャ』 はい、重大発表です。x86な本を出すことになりました。なんとx86エミュレータな本です。いやー凄いですね...多分日本で唯一(?)のx86エミュレータ本ですよ、多分。私は、この本の中で扱うx86エミュレータ作ったりしてました。かなりマニアックな本な気がしますが、このブログを読んでいる人なら気にせず買えるでしょう。頑張って買ってください。お願いします。ちなみにこのブログで紹介しているようなエミュレータはJavaで書いていますが、この本用にC言語で書いてあります。2015/08/12 5:58追記: まだ詳細は不明ですが電子書籍版も予定しております 自作エミュレータで学ぶx86アーキテクチャ-コンピュータが動く仕組みを徹底理解! 作者: 内田公太,上川大介 出版社/メーカー:
predator.gl.enchant.jsを作りました。これを使えばgl.enchant.jsでSprite3Dをプレデターにできます。背景に模様が無いと全く見えません。 まずはpredator.gl.enchant.jsを読み込みます。注意: gl.enchant.jsよりあとに読み込まないとエラーになります。 <script src="predator.gl.enchant.js" type="text/javascript"></script> 次に作ったScene3DのinitBufferというメソッドを呼びます var scene = new Scene3D(); scene.initBuffer(); 次に表示するプレデターにしたいSprite3Dで以下のようにします。 sprite.program = new Shader(PVSHADER, PFSHADER); spri
htmlファイルに以下の内容を書き、Firefoxで開く。表示されたリンクを右クリックしてブックマークに登録。そして任意のページで、そのブックマークをクリックすると画像が全て可愛いGlendaになるよ! <a href="javascript:(function(){function setImage(element){if(element.nodeName == 'IMG'){element.setAttribute('src', 'http://plan9.bell-labs.com/plan9/img/spaceglenda37.jpg');}for(var i = 0; i < element.childNodes.length; i++){setImage(element.childNodes[i]);}}setImage(document);})();">glenda</a>
上が第1回目の資料で下が第2回目の資料です d-kami_x86study_1.pdf d-kami_x86study_2.pdf
皆に支えてもらってx86勉強会が無事に終了した(俺の出番は少なかった)。x86勉強会としては成功だったが、自分の発表だけを見ると失敗だったと思う。途中から何を言ってるのかよくわからない状態になってしまった。練習が足りなかったんだな。次があるかどうかは知らないが次があればもっと頑張りたい。そしてhdk_2さんやsuper_rtiさんなどの素晴らしい発表が続き、最後はVimだった。 Vimだった。録画映像はこちら http://www.ustream.tv/recorded/22855726
twitterで@a4lgが始めたブートセクタプログラミング。バイナリを512バイトにするという制限の中でプログラムを組むというもの。あと基本8086。前からやろうとは思ったけど行動を起こせなかった。@a4lgに刺激を受け、挑戦することにした。ただ、いきなり大きなプログラムは作れないので、まずはデモ的なものから。このプログラムは画面上に1ドット表示して、それをキーボードのAとDで左右に動かすというもの。ここからゲームっぽいものを目指す cpu 8086 bits 16 org 0x7C00 %macro draw 3 mov ax, %1 mov cx, %2 mov dx, %3 int 0x10 %endmacro xor ax, ax mov ds, ax ; si is x ; di is y mov si, 320 mov di, 400 ; init display mov a
この記事はカーネル/VM Advent Calendarのネタとして書きました。 さて、今回はタイトルの通りJavaで書くブートローダです。すでに過去のエントリで書いてたりしますが、使いまわします(おい。まぁ、ブートローダと言ってもまだディスクの読み込みもできてないので、ブートセクタで動くプログラム程度の物です。でもJavaで書きます。あえてJavaで書きます。やり方は Javaでプログラムを書く Javaでバイトコードをx86バイナリに変換するプログラムを書く Let's 変換 という流れです。まずJavaでプログラムを書きます。まずBIOS.javaです。とりあえずメソッドだけを定義しておきます。putCharacterメソッドはこの段階では何もしません。これはコンパイラにこんなメソッドがあるんだよ!と伝えるためだけのクラスです。 public class BIOS{ public s
Android 2.0から備わっているというBluetooth用のAPIを使ってみようと思い、通信まで頑張ろうとしたが今日は探索までしかいかなかった。そしてListViewの使い方を俺がわかってない。 とりあえず探索までのながれ BluetoothAdapterを取得する BluetoothAdapterが利用可能ならデバイス探索、そうでなければ利用許可をユーザに求める 利用許可をユーザから貰えたら探索開始 BroadcastReceiverで見つけたデバイスを受け取る という感じ。Android SDKのサンプルにBluetoothチャットがあるのでそれ見ながら作成した。android.permission.BLUETOOTHとandroid.permission.BLUETOOTH_ADMINが必要なpermissionになっている 以下ソースコード package test.blue
カメラのプレビューを自分で描画するプログラムを作った。使ってるうクラスの関係でAndroid 2.1以降で動くと思われる。必要なPermissionは android.permission.CAMERAとなっている。あとandroid:screenOrientation="landscape"を忘れずに。今回はプレビューで取得した画像をモノクロ画像に変換して描画してみた package camera.test; import java.util.List; import android.hardware.Camera; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import and
http://developer.android.com/reference/android/media/MediaRecorder.htmlを参考に動画を撮るプログラムを作成してみた。なんとなくカメラを使う感覚でSurfaceViewやSurfaceHolder.Callbackを使ってみたが、これでいいのだろうか?とりあえず動画を撮ることができる。MediaRecorderのstartを呼び出してからstopが呼び出されるまでの間がsetOutputFileで指定したファイルに保存されるらしい。 実行するために以下のパーミッションが必要。カメラ用と録音用とファイル保存のため android.permission.CAMERA android.permission.RECORD_AUDIO android.permission.WRITE_EXTERNAL_STORAGEpackage
前に公開したWeb版x86エミュレータのHello Worldを載せておく。ディスプレイボタンを押してディスプレイを表示させた状態で、テキストエリアに下記のコードを入れて実行すればHello Worldが表示される b003b400cd10be207c8a0481c6010008c0740ab40ebb1500cd10 e9ecffe9fdff48656c6c6f20576f726c64210a 前に公開した段階では背景色と文字の色が同じになっていて、そのままでは読めないという問題があったが、今回修正した。それによってHello Worldが表示できるようになった
Web版x86エミュレータをアップロードして公開することにした(http://web-d-emu.appspot.com/)。一部の機能でCanvas使ってるのでFirefox、Chromeで動作確認、Chrome推奨。現在の所、アセンブラ機能がないので、テキストエリアに機械語を16進数で入れて、実行ボタンを押すと開始。停止で実行中のプログラムを止める。ステップ実行は押す度に1命令だけ進める。レジスタボタンやディスプレイボタンは1度押すとポップアップウインドウで表示され、もう一度ボタンを押すと非表示になる。レジスタウインドウは全ての内容を非表示にした場合のみウインドウが消える。 動作は16bitモードで開始して、機械語はメモリの0x7C00番地へコピーされる。実行後EIPは0x7C00になる。頑張れば32bitモードにできる。対応してる命令はオペコード単位で200はあるはずだが、非対応の命
Android 2.2からXPathが使えるようになったので使ってみた。使うまでがめんどいけど、XmlPullParserより使いやすいと思う。以下のXMLを対象にXPathを使ってみた。あまり詳しく書かないけど、少しだけ解説を載せたあと、ソースコードを載せる <memo> <contents name="チラシの表">Hoge</text> <contents name="チラシの裏">Piyo</text> </memo> XPathの例: memoの1つ下のcontentsを取得する /memo/contents memoの1つ下の複数のcontentsの中から属性値が"チラシの表"のノードを取得する /memo/contents[@name="チラシの表"] memoの下の複数のcontentsの中から属性値が"チラシの表"の下のテキスト(Hoge)を取得する /memo/cont
作った物 カーネル/VM Advent Calendarの俺の番が回ってきた。元々用意していたネタが準備不足により使えなくなってしまったのでリアルモードでBrainfuckしてみようとなった。リアルモードBrainfuckといってもただnasmで書いただけのような気もするが、気にしないで話を進めよう。 リアルモード BrainfuckとはCPUのリアルモードで動かすBrainfuckである。今回は自作(コピペ)ブートローダから直接呼び出すようにした。構成はブートローダ、メインプログラム、Brainfuckのソースコードからなり、ブートローダとメインプログラムをバイナリにしたあと、できたバイナリとBrainfuckのソースコードをcatで繋げたものとなっている。 とりあえず解説 ブートローダはINT 0x10でディスプレイを初期化して、INT 0x10でメッセージを表示後、INT 0x13で
そろそろ手を付けなければいけないと思っていたMessagePack-RPCを使ってみる。そのうち使い方が変わるかもしれないがversion 0.5を試す。http://github.com/msgpack/msgpack-rpcにソースが上がってるので、 git clone http://github.com/msgpack/msgpack-rpc.gitする。msgpack-rpcディレクトリの中のjavaに入り mvn compile mvn packageでjarができるとREADMEには書いてあったのだが、読まなかったは俺はmvn installとやってしまった。しかしtargetというディレクトリができて、中にmsgpack-rpc-0.5.0.jarができてたのでめでたしめでたし。そしてMessagePack-RPCを使うのに必要なjarだが、以下の通りである。M2_REPOは
とりあえず勉強中のAndroidでのプログラミング。XMLの解析をしてみたくなったのでXmlPullParserを使ってRSS2.0のエントリのタイトル一覧を取得して表示をやってみた。今回はhttp://d.hatena.ne.jp/d-kami/rss2から取得した。追記: ちなみにAndroid 2.2からはXPathが使えるので、そっちの方が楽かも[Android]AndroidでXPath package test.rss; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; import android.util.Xml; impo
3G回線で繋がっている状態でServerSocket開いて、getInetAddress()したらアドレスが0.0.0.0となっていた。困ったのでInetAddressのgetLocalHost()でアドレス取得したら127.0.0.1となっていた。なので今度はNetworkInterfaceのgetNetworkInterfaces()経由で取得して、127.0.0.1と0.0.0.0以外のアドレスを取得するようにしたらうまくいった。以下がそのソースコード。アドレスが見つからなかったら127.0.0.1を返すようにしている。 private static String getIPAddress() throws IOException{ Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterf
よくあることといいつつ、前にいた大学でのできごと。授業を受けてたときの出来事 Javaの授業のときに難しいんで… 例外処理の説明は省略します… Javaの授業で使うサンプルに書いてある禁句… catch(Exception e){ System.exit(0) } プログラミングの課題をC++で書くと加点しますと書いておきながら… 教授がC++をわからないのでCで書き直すように言われた人が… Cの実習で… 教授がプログラミングできない。ハードウェア屋さんだったから仕方がないのか? 実習で使うサーバーが… 5分毎に落ちる…Cで自作したようだが… TAやってたときの出来事 プログラミング課題で結果の出力フォーマット指定してるのに… 半分以上は従ってない。 やっぱり… 8割はコピー。コピー元は差別化しようとしてるので、すぐわかる。変数名だけ変えても…そこじゃないんだよな… 比較回数、実行時間が…
RubyでTwitter APIを使って投稿するプログラムを作ってみた。また、認証や投稿されたメッセージ一覧を取得する機能も持たせておいた。変数のusernameとpasswordに自分のやつをいれれば動く。投稿するメッセージは下の方のtwitter.updateの引数で指定している。usernameがメールアドレスだと一部動かない機能あり。投稿する部分でsource=testとなっているけど、無視されているもよう #! /usr/bin/ruby -Ku require 'net/http' require 'rexml/document' require 'uri' username = '****' password = "******" class User attr_reader :id attr_reader :name attr_reader :screen_name att
RubyでTwitter APIを使い、Twitterにログインするプログラムを書いてみた。ユーザー名を表示するようにした。emailとpasswordが正しいことを信じてるプログラムなので間違った情報を入れると正常に動かない require 'net/http' require 'rexml/document' email = '*********@*******.ne.jp' password = "*******" class User attr_reader :id attr_reader :name attr_reader :screen_name attr_reader :url attr_reader :followers_count attr_reader :friends_count def initialize(id, name, screen_name, url, f
mixiにログインするプログラムを作ってみた。ただログインして終わりじゃつまらないので、足あとを取得してみた。Mixi、AuthenticateException, FootPrintという3つのクラスを作った。Mixiクラスはmixiにログインするメソッドと足あとを取得してくるメソッドを定義していて、AuthenticateExceptionはログインに失敗したり、ログインしてないのに足あとを取得しようとすると発生する例外。FootPrintは足あとの情報を保持するクラスとなっている。これくらいだとJavadocやインテリセンスはなくてもテキストエディタだけで頑張れる import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.OutputStreamWriter; import java
第127回 Ruby vs Java ダックタイピングとインタフェースで見る多態性を読んで、なんとなくリフレクションを使ってみたくなったので、リフレクションを使ったJavaのコードを書いた。C++のtemplateを使った人がいたので、俺はリフレクションを使うんだー!という勢いで書いた。 public class Human{ public void touch(Object obj) throws Exception{ obj.getClass().getMethod("say").invoke(obj); } } class Duck{ public void say(){ System.out.println("ガーガー"); } } class Dog{ public void say(){ System.out.println("ワンワン"); } } public class
RubyでRawSocketを使ってみた。表示するのはEtherヘッダーとIPパケットならIPヘッダの一部を表示する。C言語と違って、1回で複数のEthernetフレームを読み込んでしまうらしく、(readを使ってるため、1回で複数のフレームを読み込んでしまっている。recvfromなら1回で1つのフレームを読み込むことが出来る)ループさせたりするのはめんどくさいので最初の1つだけを表示するようにした。root権限でないと実行できない require 'socket' class EtherHeader attr_reader :ether_dhost attr_reader :ether_shost attr_reader :ether_type def initialize(frame) @ether_dhost = mac_tos(frame, 0) @ether_shost = m
Rubyでmixiにログインするプログラムを書いてみた。足跡の表示まで行うようにした。emailとpasswordが正しいことを信じてるプログラムなので間違った情報を入れると正常に動かない #! /usr/bin/ruby -Ku require 'net/http' require 'kconv' email = "*****@*****.ne.jp" password = "******" class User attr_reader :id attr_reader :name def initialize(id, name) @id = id @name = name end end class Mixi def login(user, password) http = Net::HTTP.start('mixi.jp') response = http.post('/login.p
マイミクシィ最新日記のタイトル一覧を取得するため、[Ruby]mixiにログインするプログラムのMixiクラスに以下のメソッドを追加した。 def getNewDiaryTitles() http = Net::HTTP.start('mixi.jp') response = http.get('/new_friend_diary.pl', 'Cookie' => @cookie) body = response.body.toutf8 titles = Array.new body.scan(/<a href="view_diary.pl\?id=(\d+)&owner_id=(\d+)">([^<]+)<\/a>/){|id, owner_id, title| titles << title } return titles end 使い方は以下の通り mixi = Mixi.new m
昨日、Wicket勉強会に行ってきた。奴時迷わず会場に行くことができた(そりゃ、まっすぐ進むだけだったし)。それでプレゼンはAjaxの話が中心だった。 まずヨシオリさんがAjaxComponentの作り方を教えてくれた。自分で作ったJavaScriptを読み込ませるには、HeaderContributorのforJavaScriptにJavaScriptReferenceを渡せばいいとか、実はJavaScriptを書かなくてもWicketの機能だけでAjaxComponentを作れてしまうとか。そしてevalの発音のしかたなど(違。 次にたけうちさんのプレゼンは、とにかくデモがすごかった。作ろうと思えばあんなこともできるとは…縦スクロールとか横スクロールとかプログレスバーとか。Wicketがすごいというより作る人がすごい気がした。 ライトニングトークでは、実際に運用するときの注意点みたいの
土曜に仕事したぶん、今日は休みが取れたのでいろいろやろうとしていたが仕事の疲れが残っていたらしくあまり作業は出来なかった。土曜日は仕事中に他の人に「疲れているように見える」と言われていたので当たっていたかもしれない。とりあえず今日はギター練習を2時間で切り上げあとは休んでいた。意図的に休んだというよりは何も出来なかったというのが正しいかも。今日、休み取れなかったらやばかったかもね どきどき…Amazonギフト券が欲しいです。『きっと君なら大丈夫』も『笑顔になろう』のリメイクも頑張った。賞が貰えなくても全力で頑張ったことには間違いない。 www.ssw.co.jp 少しずつパワーコードでは曲が弾けるようになってきてギターソロなんかも練習しています。いろいろやることがあったりリズムだったり指の動きに泣きそうになりながら頑張っています。泣いてはいません。メトロノームは友達。あとは自分の曲のコード
このページを最初にブックマークしてみませんか?
『マイペースなプログラミング日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く