サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
blog.bitmeister.jp
Linuxでは、カーネルのモジュールをロードしようとした際に、カーネルモジュールの整合性の検証が行われます。整合性の検証には、vermagicが使用されていると記憶していたのですが、最近のLinuxではmodversionsによる検証が行われているようです。 このmodversionsによる整合性の検証について調査した内容を備忘録としてまとめておきます。 注意点 本内容にあるカーネルモジュールのロードには予期せぬ挙動を示す可能性がありますので、必ず自己責任の元で作業してください。 環境 ディストリビューション Ubuntu 12.04.2 LTS カーネルバージョン 3.5.0-27-generic、3.5.0-23-generic 調査対象カーネルモジュール net/ipv4/tcp_bic.ko vermagicによる整合性検証 従来のvermagicによる検証では、カーネルコンパイル
従来、LinuxでMPTCPを利用する場合「Linux Kernel MultiPath TCP project」が公開しているLinuxカーネルを使う必要がありましたが、アップストリームのLinuxカーネル 5.6以降でMPTCPが利用可能になりました。 現在、MPTCPの仕様は「RFC6824」で規定された”MPTCP v0″と「RFC8684」で規定された”MPTCP v1″の2つのバージョンが存在します。従来版は”MPTCP v0″にのみ、アップストリーム版は”MPTCP v1″のみに対応しており、”MPTCP v1″は後方互換性を持たないので、現時点では従来版とアップストリーム版でMPTCP通信を行うことができません。 従来版および”MPTCP v0″については、本ブログでも過去に以下の投稿しています。 「Multipath TCP(MPTCP)」 「MPTCPのパケットを眺めて
PostGISとGeoDjangoを使ってLeafletでGeoJSON Tile Layerを表示してみる(1) – インストール編 – いつのまにやらOpenLayersじゃなくてLeafletとかでてきたり、DjangoでPostGISが使えるとか、知らないことが多すぎたので時代に追いつけ追い越せということで試してみました。なお、そこそこの長編になりましたので分割してお送りします。 はじめに 今回の登場人物を整理しておきましょう。 PostGIS PostgreSQLにGIS機能を追加したもの。最近はMySQLとかSQLite(SpatiaLite)でも地図データを扱えるようなのですが、機能的に一番充実してると思うのでPostGISを使うことにしました。 Django(GeoDjango) PythonのWebアプリケーションフレームワーク。いつの間にかGIS関連の対応をしており、そ
一昔前はビッグエンディアン・マシンが秋葉原にたくさん転がってた。Apple PowerPC Mac、Sun Blade、SGI O2 等々。でも今どきは、IntelとARMばっかり。ビットフィールドのオーダーを確認したいとか、ビット演算が正しく動作するかとか、ただただ機械語を眺めたいとか、そういうときに手頃なビッグエンディアンの環境が欲しい。 よろしい、ならばエミュレーションだ。 準備 ホストの環境 Arch: AMD64 OS: Debian 8.0 Jessie Emulator: QEMU emulator version 2.1.2 パッケージを更新 更新しない方がよい心当たりがなければ、しておくこと。 # apt-get update # apt-get upgrade QEMU、tunctl、brctlをインストール QEMUとネットワーク関連パッケージをインストールする。ネッ
Unix系OSのルートディレクトリ直下にある “/usr” はなんの略なのか。 巷の意見はおおよそこんな感じです。 「もちろん “USeR” の略でしょ。」 「あまいな。 “User Services and Routines” の略だ。」 「その “User S*R*” の略だっていうソースはあるの?」 どうもはっきりしません。そこで調べ始めたら、思いのほか深入りしてしまったので、今回調べたことを書いておきます。 0. Unixユーザグループの機関誌に載っていた説 Unixユーザグループの機関誌に “User Services and Routines” の略だと書いてあったという情報が散見しますが、ここではそれをソースとして認めません。その記事に「XXXのドキュメントに書いてある」とか、「IEEE NNN.N で決まっている」とか書いてあれば一件落着なのですが、原典を見つけることはでき
無線通信をするアプリケーションのテストのために、帯域や遅延といった、ネットワークの状態をシミュレートしたいことがあると思います。 本記事では、Linux上で、ネットワークインタフェースに対する帯域制限と遅延の設定方法を説明します。 設定にはtcコマンドを使います。 tcコマンドとは、Traffic Controlコマンドのことで、Linux Kernel内の通信を制御します。 動作環境 本記事での動作環境を以下に示します。 ディストリビューション $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS" Linux Kernel $ uname -sr Linux 3.16.0-30-gener
TCP通信の状態を監視していたところ、スロースタート閾値の初期値が、カーネル内で定義されている初期値と異なっていることがありました。調査したところ、Linuxに実装されているtcp_metricsが原因でした。本記事では、tcp_metricsの無効化方法について説明します。 Linuxカーネル2.6.6以降のTCP通信にはtcp_metricsという機能があります。tcp_metricsは、スロースタート閾値や輻輳ウィンドウサイズ、RTTといったTCP情報を送信先IPアドレスと関連付け、TCPコネクション終了時にキャッシュします。そして、キャッシュされた送信先IPアドレスへTCPコネクションを開始する時に、キャッシュしたTCP情報をその通信の初期値に設定します。 送信先IPアドレスのTCP情報をキャッシュすることで輻輳を防ぐことができる機能ですが、例えばiperfなどを使ってスループット
現在、弊社でもSlackを試験的に利用しているのですが、RTM APIを使えばローカルでもbotが作成できることを知ったのでPythonで作ってみようという記事です。 今回は第1回目です。 さて、SlackのBotといえば… なのですが、残念ながらこのBot君はマスコット的なものなので任意の言葉に反応する程度のカスタマイズできません。もっと賢いBotを作成したいという場合は、SlackのAPIを通じて連携するBotを作成する必要があります。 Slackのbot作成といえばhubotでの作成例が多いのですが、RTM(Real Time Messaging) APIを利用すればWebSocketを用いたイベント受信が行えるので社内PC上でSlack botを稼働させることができます。 Real Time Messaging API | Slack Slack Botアカウントの作成 まずはとも
ある晴れた春の昼下がり、ぼくは気づいた。 「おや?スピーカーから流れだすゆかりんの声がいつもよりかわいいぞ」 いつもゆかりんは世界一かわいいのだが、その日はいつにも増して、艶かしく繊細で麗しげに聞こえたのだ。決して私がゆかり王国民だからということではない。いつものように、ただLinuxのsambaサーバに置いたALACファイルを再生していたに過ぎない。ただひとつ、TCP輻輳制御アルゴリズムを変更していたことを除いては。 そう、ぼくは気づいたのだ。TCP輻輳制御アルゴリズムによって音質が変わるということを。敏感な人ならカーネルソースのコメント行の有無で音質の違いを感じることができるというのに、これまでなぜネットワークオーディオ環境における輻輳制御アルゴリズムの重要性に目を向けなかったのだろうか。否、耳を傾けなかったのだろうか。 そこで今回、輻輳制御アルゴリズム毎に音質の違いを聴き比べてみた。
Roombaには、外部からのコマンドを受け付けるInterfaceが用意されていて、モータを駆動させて移動させたり、登録済みの音楽を鳴らしたりといったことがシリアル通信を通じて実行できます。 nobbyさんからJoystickで自由に動かせるようにしてほしいという依頼を受けたのでやってみました。 早速動画です。 Joystickのトリガーを引くとブラシが回転するようにしています(2秒間。引き続ければ回転したまま。)。 Joystickの手前のレバーで速度を調整することができます。 非常に残念ですが、暴走モードは実装されておりません。 以下、補足です。 Roombaのinterfaceは正式には、Roomba Serial Command Interface、Roomba SCIと呼ばれており、以下のURLで仕様が公開されています。 http://www.irobot.com/images/
Xvfbというコマンドをご存知でしょうか? 通常、Xサーバはディスプレイに表示するものですが、Xvfbはディスプレイに表示を行わず、メモリ上に仮想的に表示を行うXサーバです。 Xvfbの、vは仮想(Virtual)、fbはフレームバッファ(Frame Buffer)というわけです。画面を持たないサーバマシンで画像を扱うときに使われることがあります。 ちなみに、そもそも「Xサーバとは?」という方はこちらを参考にしてください。 今回、一つのPC上で、複数の仮想ディスプレイに表示した画面をひとつのディスプレイに出力するものを作っていたのですが、この「複数の仮想ディスプレイ」を実現させるため、Xvfbを使用しました。 動作確認で使用した環境 Ubuntu 10.04 DesktopおよびUbuntu 11.04 Desktop Xvfbの出力はメモリ上に行われるのですが、その出力されたイメージを実
私の開発機がWindowsなので、Androidをadb shellで操作するのは結構なストレスだったりします。じゃあMac使えとかVMでUbuntu入れればいいじゃないかとかいう話もありますが、そこをあえてWindowsで頑張るというストイックな道を選んで日々試行錯誤しています。半年程前にadb対応puttyというのがあり、これを使うことで今までより快適な作業を行っていたのですが、ひとつ問題がありました。業務上複数のデバイスに同時にネットワーク経由でadb接続したいのですが、今使っているadb対応のputtyではできなかったのです。で、もうすぐ2014年にもなるというのにようやくそれが実現できるputtyに出会ったのでついついブログに投稿してしまいました。 と、前置きが長くなりましたが結論からいうと「PuTTYTray」で解決です。 以下に簡単な接続方法を書いておきます(puttyの使い
前回に引き続きMac OS Xの話です。 Mac OS X v10.4で導入された画像処理テクノロジー「Core Image」を使うと、画像に様々なエフェクトを簡単にかけることができます。 前回話に出たアプリケーションでは、「歪みエフェクトフィルタ(Distortion Effect Filter)」の「バンプ(凹凸)歪み」フィルタを使って画像にエフェクトをかけています。 このフィルタの実行をCore Animationを使って、次のようにアニメーション化しています。 - (IBAction)done:(id)sender { // レイヤーを取得する CALayer* layer; layer = [[[imageView layer] sublayers] objectAtIndex:0]; // フィルタを作成する CIFilter *filter; filter = [CIFilt
usersテーブルとbooksテーブルが1:nとなる構成で、 booksテーブルのrend_user_id、reserve_user_idがusersテーブルのidを指しているものとします。 このような場合にbooksからusersに対してアソシエーション定義するには、以下のようにします。 bookクラス(model)に以下を追加 belongs_to :rend_user, :class_name => 'User', :foreign_key => 'rend_user_id' belongs_to :reserve_user, :class_name => 'User', :foreign_key => 'reserve_user_id' するとrend_user_id、reserve_user_idそれぞれに対してusersを関連付けることができます。 controllerで呼び出
昨年、JavaScript開発でWebStormを使ってみてから、JetBrains製品を気に入りIntelliJ IDEAユーザになりました。 当時はIDEA11を購入し、昨年末のマヤ歴の終りセールで勢いでIDEA12に乗り換えたのですが、エディタのフォントを自分の好みのものに変更すると、コード内の日本語の表示がおかしくなる問題がありました。(そもそも日本語コメント、いや…コメントをあまり付けないので気にしていませんでしたが) この問題の対処方法についてとりあえず発見したのでメモしておきます。 なお、私の試した環境はWindows7(64bit)なので予めご了承ください。 まずは、IDEA12デフォルトのフォント(Monospaced)だとこのような感じです。 そのままでも実用上問題はないのですが、やっぱり自分の好みのフォントを使いたいですよね。 ということで、設定でフォントを「Cons
今回は、auの通信デバイスDATA07をLinuxに自動で認識させるための方法です。以前、似たような内容を書きました(LinuxでusbserialモジュールにL-02Cを自動で認識させる)が、至るまでの過程が異なりますので、まとめておきます。 前提条件 カーネルのバージョンは、linux-2.6.37です。 カーネルおよびカーネルモジュールのコンパイル等の知識を保有していることが前提です。 カーネルおよびカーネルモジュールの入れ替えには起動しなくなる等の可能性がありますので、自己責任で作業してください。 auのDATA07は環境により、productIDが0x1446として認識される場合と、0x1506として認識される場合があります。以下の内容は、productIDが0x1506として認識された環境で行ったものですが、0x1506を0x1446に置き換えても問題なく動作すると思います。
みなさんはOpenStreetMapをご存知ですか? 私は今まで実際に使ったことはなかったのですが、先日日本語版の利用者ガイドがリリースされたのでとりあえず目を通してみると、どうもOpenStreetMapデータを使って自前で地図サーバを公開できるという記載があったので試しにやってみたところ、いくつかマニュアル通りにはいかない部分があったものの構築に成功したので記事にしてみました。 今回参考にしたのは「OpenStreetMap 利用者ガイド(v1.0)の「あなたのウェブサイトでマップを提供する」(P.105)です。 「システム要件」 「一般的には、要件は10-20GBのストレージで4GBのメモリ、都市サイズの地域用には最近のデュアルコアプロセッサーを300GB超の高速ストレージに、24GBのメモリ、そして全世界用にはクアッドコアプロセッサー、といった範囲になります」 とありますが、全世界
Javaのアクセス修飾子protectedで少しハマったので、調べた内容をメモしておきます。 通常、protectedと指定されたフィールドやメソッドは「同一package内と、そのクラスを継承したサブクラス内からアクセスできる」と説明されます。私自身も同様の理解だったのですが、次のようなケースで予想外の挙動となりました。 クラスBaseとChildが別のpackageに属する場合、 package base; public class Base { protected void baseMethod() { System.out.println("Base method."); } } package child; import base.Base; public class Child extends Base { public void childMethod(Base base)
OpenFlowでは、Controllerというソフトウェアで、対応したスイッチングハブが受け取ったすべてのパケットのコントロールができます。 Controllerを自作することで、スイッチングハブにいろんな機能を持たせることができます。 今まで、 VMWare Serverで、OpenFlowの環境を作ってみた[1/2] VMWare Serverで、OpenFlowの環境を作ってみた[2/2] とOpenFlowの基本的な環境を作りましたが、普通のスイッチングハブと同じ動作のサンプルなので、面白みがありません。 そこで、ちょっとした負荷分散機能をNOXというフレームワークを使って実装してみます。 (あくまでサンプルなので、実用性や性能は考慮していません。あしからず。) なお、本記事ではControllerのプログラム言語にPythonを使用しています。 仕様 DNSラウンドロビンという
IPv6シリーズ第2弾(第3弾があるかどうかは未定)。 TUN/TAPを使って、IPv6の仮想デバイスを作ってそこでIPv6のパケットをキャプチャするサンプルを作ってみました。 ちなみに、単純にパケットの内容を見たい場合は、tcpdumpなどをご利用ください。 プログラムにIPv6パケットを取り込んでなんとかしたい人は参考にしてください。 ではさっそくサンプルプログラム。簡単な解説はそのあとに書きました。 ipv6dump.c #include <stdio.h> #include <stdlib.h> #include <fcntl.h> /* O_RDWR */ #include <unistd.h> #include <string.h> #include <sys/ioctl.h> #include <sys/socket.h> #include <sys/types.h> #in
OpenFlowというのに興味があったので、手元のVMWare Serverを使って動作環境を構築してみました。 OpenFlowというのは、簡単にいうと、たくさんのスイッチングハブを一つのコントローラアプリケーション(ソフトウェア)で制御するための仕様です。 普通のユーザにはあまり関係のないものだと思いますが、ネットワークの研究をする方には、いろんなネットワークを構築しやすくなるので、便利なしくみだと思います。 私もかじり始めたばかりで、あまり偉そうに説明できないので詳しくはOpenFlowのサイトを見たり、検索してみてください。 今回は以下のサイトに記載されている手順で環境を作りましたが、OpenFlowが動作するUbuntuは現時点で最新の11.04を使用しました。 Setting up Userspace OpenFlow switch on VMWare http://www.o
moatextを作っていて気がついたのですが、InternetExplorer8ではCSSで指定した要素をうまく透過できない場合があります。 通常、HTML文書でCSSを使って要素を透過させると、次のようになります。 透過なし このように表示させるには、ブラウザ毎に対応したCSSを書く必要があります。 IEの場合は、”filter:alpha(opacity=50)”のようにします。(50は不透明度。0が完全透過。100がまったく透過しない。) 詳しくはこちら「IE・Firefox・Opera・Netscape・Safariで表示可能な半透明CSS/Opacityテクニック」やこちら「CSSで半透明を実現(IE,Firefox,Opera,Safari対応)」をご覧ください。 で、moatextでは文字のひとつひとつにspan要素を設定して不透明度(opacity)を設定するのですが、なぜ
嫁さんのノートPC(5~6年前に買ったWindowsXPマシン、LaVie LL350というやつ)が起動しなくなりました。 ちょっと前から起動後にすぐ電源が落ちる、といった症状がまれに出ていたのですが、そのまま使っていたらついに立ち上がらなくなってしまいました。 通常起動でもセーフモードでも、起動はするのですが起動シーケンスの途中で一瞬ブルースクリーンになって電源が落ちる感じです。 あれやこれやしていたら、とりあえず以前の状態に戻せたので、それまでの経緯をメモします。 (ちなみに、嫁さんが使っていたものなので、raidとか暗号化とか複雑なことはしていませんでした。) ディスクイメージのサルベージ まず、症状からハードディスクの故障が考えられたので、できる限り壊れたハードディスクの中にあるデータを吸いだして、他のPCに移す方法を考えました。 デスクトップPCなら、故障したハードディスクを別の
前の記事で慌てて訂正したとおり、当初sqlite3ではテーブル名が列挙できないと思っていたのが実はできることがわかりました。 http://www.sqlite.org/faq.html#q7 オフィシャルサイトのFAQに載っていたんですね…はずかしっ! 具体的なテーブル名の取得方法は上記サイトに書いてあるとおりです。 で、この情報をもとに前の記事で掲載したCGIを改良しました。 sqtest2.py ソース抜粋 cur = con.cursor() cur.execute("select name from sqlite_master where type='table'") for catalog in cur.fetchall(): � tableName = catalog[0] � columnIndex = 0 いちおう、使い方を書いておきます。 まず、DBがない状態の場合、テ
最近、ActionScript3.0でコードを書いています。当然、今まで使っていた言語とは様々な仕様上の違いがあるのですが、その中でちょっと困ったのは、コンストラクタにprivate属性を指定できないこと。Singletonパターンなどを実装しようとしてprivateなコンストラクタを宣言すると、コンパイル時に「A constructor can only be declared public.」というエラーが発生してしまいます。 小さなプロジェクトであれば「インスタンス化しないように注意する」ということでもなんとかなりますが、やはりどうしても寝覚めが悪いので、対策を考えてみます。 まずは、毎度お馴染みのGoogle先生によると、どうやら次のようなコードが定石のようです。 package { import flash.errors.IllegalOperationError; public
次のページ
このページを最初にブックマークしてみませんか?
『ビットログ – このサイトはビットマイスターの中の人が書いてます』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く