iMacを手に入れてまずやったことのメモ
初めて行った作業ばかりだったので、設定や入れたものなどを忘れないための備忘録的な意味も含めて、iMacを購入後の設定手順をメモっておきます。
起動やユーザ登録、ネットワーク設定は全てすっ飛ばします。だってキャプチャ忘れたし…。
とゆうわけで、とりあえずソフトウェアアップデートしてから各種設定に入ります。
環境設定
左上のアップルのアイコンを押下して開く以下のメニューから選択するか、またはDockの以下のアイコンをクリック。(すみません、キャプチャ撮った時点ではDockがデフォルトじゃなくなってました)
マウスの設定
まずはマウスの設定から。
システム環境設定のマウスをクリックし、マウスの設定画面を開きます。
マウスの設定画面で、軌跡の早さをmax、スクロールをある程度の早さに変更。ダブルクリックの間隔は変えたか覚えてないです…。
27インチiMacなら、解像度の高さ的にも軌跡の早さはmax一択な気がします。
後やっぱり右クリックは欲しかった為、副ボタンのクリックにはチェック。
キーボードの設定
マウスの次はキーボード。
キーのリピート速度とリピート入力認識までの時間は最大値に。効果を発揮するのは上下左右の矢印で移動する時とか。これが遅いといらいらします。
すべてのキーを標準のファンクションキーとして使用にチェック。MacはデフォルトだとF1やF2をファンクションキーとして使いたい時にFnキーを押しながら押さないといけないようなので、ここは迷わず変更。
キーボードショートカットの変更はとりあえずなし。
まだデフォルトのショートカットも使いこなしていないので。
Dockの設定
最初の手順がモロにIT戦記の方の内容と被ってますが…(とゆうか参考にしたので被って当たり前ですが)
次にDockの設定を変更します。
デフォルトだとDockは下にあるのですが、左に変更。左を選んだのは単純にデスクトップのアイコンが右から並んでたため。
Dockを自動的に隠す、はオンにしました。
ただ、基本的にキーランチャーが好きなためDockはあまり使わなそう。
ExposeとSpacesの設定
カーソル移動させて何かが表示されるのはあまり好きではないため、Exposeのコーナーへの割当はなし。これはショートカットを使います。
Spacesはショートカットはデフォルトのままで、各アプリを4つのスペースに割当。
といってもまだそこまでアプリを入れているわけではないので、各スペースの役割だけ決めました。
- スペース1
- ブラウザやチャット、Twitterアプリ等のよく見る系
- スペース2
- Eclipseやastah、Flex、エディタといった開発系
- スペース3
- ターミナルやFTP等のサーバー系やファイラー系
- スペース4
- とりあえずiTunesNNDD用。
mac用のPhotshop買ったらちょっと割り振り考え直さないと。
Dashbord Widget
オフィシャルから下の3つだけ。いいのあんまりなかた…。これから探していきます。
ColourMod
カラーピッカー。RGBの色を取りたくなることってちょこちょこあるので。
http://www.apple.com/jp/downloads/dashboard/developer/colourmod.html
iStat nano
CPU、メモリ、ハードドライブ、IP/外部IP、帯域幅、CPUの温度、バッテリー、駆動時間を表示。
http://www.apple.com/jp/downloads/dashboard/status/istatnano.html
WidgetTerm
ターミナルのウィジェット。何となく入れてみたけど…ターミナルは常時普通に立ち上げてるので、あんまり使わなそう。
http://www.apple.com/jp/downloads/dashboard/developer/widgetterm.html
ツール
Dropbox
これが無いとしんじゃう。。。ノート2つとWinPCとの簡単なデータ共有は専らこれ。PG系はSVN、その他はNFS。
https://www.dropbox.com/
firefox
メインブラウザ。Safariもかなりかっこ良かったけれど、やはり使い慣れているfirefoxを選択。Safariは残念ながらWebクリップ専用機となりそうで、Dockからは既に削除済み(´・ω・`)
http://mozilla.jp/firefox/
Quicksilver
テキストランチャー。Windowsのbluewindのようなものを探していたらこれが見つかったので利用。これ使いやすいです。Spotlightも結構優秀なので、兼用しつつ様子見。
とりえずPC起動時に起動するようにチェック。
初期設定での起動ショートカットキーがCtrl+SpaceでSpotlightと被っていたので、QuicksilverはCtrl+Qに変更
Reset search afterにもチェック。
http://www.blacktree.com/
tweetie
Twitter用アプリ。2日使っているけれど結構使いやすいです。見た目もいいし、このまま使い続けると思います。
http://www.atebits.com/tweetie-mac/
TotalFinder
とりあえず今のところ最も不満なのがFinder。WinのX-Finder的なやつが欲しいのだけれども、今のところ見つからず。
できればフリーで探したいけれど、とりあえずTotalFinderのα版を利用しています。ただ、TotalFinderのα版は不安定らしく、自己責任&バックアップを取っておくようにという記事を見かけました。不安定ならまだしも、ファイルバックアップって…怖すぎじゃ。
タブ型ファイラーは今後の課題点。
http://totalfinder.binaryage.com/
google 日本語入力
ことえりがどのくらい使える子なのかまだ分かっていないうちに入れるのもあれですが、winでも使っていたので。
http://www.google.co.jp/intl/ja/ime/index-mac.html
MagicPrefs
Magic Mouseの設定を自由に変えれる便利ツール。
3本指クリック、4本指クリック、各指のタップ等の色々な操作にたいしてコマンドを割り当てられます。
Tracking Speedでマウスカーソルの移動速度も通常の設定より速い値に設定できるので、27インチだとかなり便利。
3本指でのクリックにDashboard、4本指でのクリックにExposeを割り当てました。
(タップに色々割り当てて使ってみたのですが、変に反応してしまうことが多かったのでタップは諦めました。)
Flip4Mac
WMVを再生できるようになります。
http://www.microsoft.com/japan/windows/windowsmedia/player/wmcomponents.mspx
Perian
QuickTimeコンポーネント。色々なコーデックに対応できるようになるみたいです。flvもこれで再生可。
http://perian.org/
開発系
Xcode
同梱のDVDからインストール。
サイトからDLをしたい場合は登録が必要な模様。
http://developer.apple.com/jp/technology/tools.html
MacPorts
Mac版のyumやapt的存在らしい。つまり絶対に必要になるであろうもの。
Snow Leopard用のdmpをDLしてインストールしました。
http://www.macports.org/install.php
eclipse
今までガニメテを使っていましたが、折角なのでガリレオに。今までは基本的にPleiadesのオールインワンを入れていましたが、Mac版は無いみたいなので通常のEclipseを入手。パッケージはJava EEのMac64bit版で、追加でとりあえずPDTだけ。日本語化は特にする予定はなし。
Eclipseの詳細なカスタマイズは別途。
http://www.eclipse.org/downloads/
astah-community
旧Jude。UMLツールとして愛用。ただastahになって、communityで画像出力した場合にロゴが入るようになってしまいました。後Javaソースのインポートもできなく…。
マインドマップも使いたいしastahUMLの購入を検討中なのですが、タイムドライセンスなのが本気で気に食わない。(communityは無料ですが、ユーザ登録が必要です。)
後、communityのMac版はサポート対象外で、自己責任の元に実行することとなっています。
EclipseのAmaterasを使ってみようとしてみたこともありましたが、あれ微妙過ぎ…。
http://astah.change-vision.com/ja/product/astah-community.html
Gauche
SICPの問題解く用に。MacPortsを利用して、Snow Leopard で MacPorts から Gauche をインストールのサイトに載っていた3行でインストール完了しました。
ターミナルに「gosh」と打って確認。
Carbon Emacs
Emacs系のエディタ。Gaucheの開発用として。
Emacs + Gauche で二兎を追う!を参考にさせていただきました。
http://homepage.mac.com/zenitani/emacs-j.html
firefoxのアドオン
firebug
もはや「俺がfirefoxだ!」と叫ばれても何の否定もできないくらい重要な存在。貴方が全てです。
https://addons.mozilla.org/ja/firefox/addon/1843
ColorZilla
カラーピッカーのアドオン。CSSやjsでの色指定をするときに、とりあえずこれで色を拾ってます。
https://addons.mozilla.org/ja/firefox/addon/271
FireGestures
マウスジェスチャー用アドオン。昔はかなり重宝していたのに、最近はショートカットばかりでめっきり使わなくなりました…。
https://addons.mozilla.org/ja/firefox/addon/6366
Google Toolbar for Firefox
Googleツールバーのアドオン。主にGmail確認とBookmark用。検索窓はfirefoxのデフォルトのと入れ替えています。
http://www.google.com/tools/firefox/toolbar/FT2/intl/ja/
Greasemonkey
これも定番。スクリプトは結構自分で書く事も多く、使ってないのも含めると30くらいあるかも。「お猿さん」って呼んでます。
https://addons.mozilla.org/ja/firefox/addon/748
Live HTTP headers
HTTP ヘッダの確認ができます。Webアプリ作ってると、ヘッダを確認したくなることが多々あるので。
https://addons.mozilla.org/ja/firefox/addon/3829
Tab Mix Plus
Firefox のタブ機能を拡張してくれるアドオンです。かなり使える子。
https://addons.mozilla.org/ja/firefox/addon/1122
この辺とかも簡単に設定できて最高。
Web Developer
これもフロント開発時にかなり重宝するアドオン。開発時に必須なのは、これとfirebug。
https://addons.mozilla.org/ja/firefox/addon/60
テキストリンク
某所を巡る時とか用。。
https://addons.mozilla.org/ja/firefox/addon/1939
YSlow
フロントのパフォーマンスチューニング等に利用するアドオン。こんなの提供してくれるんだから、Yahooって凄いですよね…。
https://addons.mozilla.org/ja/firefox/addon/5369
Total Validator
HTMLやCSSのチェック用。HTML Validatorを使っていたのですが、「Html Validator は MacOSX では利用できません」との文字が…。そんなのあるんですね…。
https://addons.mozilla.org/ja/firefox/addon/2318
gTranslate
テキストを選択→右クリックのメニューで翻訳が可能なアドオン。google翻訳を使っているのでそれなりによい翻訳をしてくれます。わざわざ翻訳ページを開くのが手間だったりするので。
https://addons.mozilla.org/ja/firefox/addon/918
SeoQuake
SEOの調査用アドオン。googleとyahooの以外のは基本オフにしてます。たくさん出てもうざいので…。ipは表示してる。
https://addons.mozilla.org/ja/firefox/addon/3036
EclipseでApache Ivyの利用 - 基本編(1) -
Apache Ivyとは
プロジェクトの依存関係を管理するためのツール。
antとの親和性が高く、antに組み込む形で利用できる。
よくMavenと比較されているようだが自分はMavenの利用経験がない為Mavenとの比較はここでは述べない。
情報名 | 情報へのリンク |
---|---|
公式サイト | http://ant.apache.org/ivy/ |
ダウンロード | http://ant.apache.org/ivy/download.cgi |
公式リファレンス | http://ant.apache.org/ivy/history/latest-milestone/reference.html |
Eclipseプラグイン | IvyDE |
ライセンス | Apache License 2.0 |
Apache Ivyの主な機能
- ライブラリの依存関係の管理
- Antのtargetの一つとして実行可能
- 依存関係をレポートとして出力(HTML)
- Mavenリポジトリ(http://mvnrepository.com/)の利用
- リポジトリのキャッシュ管理
Apache Ivyのインストール
事前条件
- Antが既にインストールされており、利用経験があること。
- Eclipseでの開発環境が整っていること。
インストール
- http://ant.apache.org/ivy/download.cgi よりbinaryファイルをダウンロードし、任意のディレクトリに解凍する。
(執筆時点での最新はapache-ivy-2.1.0-bin.tar.gz) - Eclipseを起動し、メニューバーから下記を選択
- ウィンドウ → 設定 → Ant → ランタイム → 「クラスパス」のタブを選択
- 「外部JARの追加」→先ほど解凍したディレクトリ直下に存在するivy-2.1.0.jarを指定
- 「適用」を押下で完了
これでインストールは完了。
Apache Ivyの利用
以下のような構成のプロジェクトがあったとする。
ディレクトリ名 | 内容 |
---|---|
src/ | ソースディレクトリ |
lib/ | 依存JARライブラリ |
bin/ | eclipseのビルド出力フォルダ |
lib配下のjarは以下の2つ。
- commons-lang-2.4.jar
- json-lib-2.3-jdk13.jar
1.ivy.xmlを書く
ivyの設定ファイル。依存関係をここに書く。
ivyはデフォルトでMavenのセントラルリポジトリに対応している為、http://mvnrepository.com/から必要なライブラリを検索してjarを探す。
例えばjson-libなら、json-libで検索するとhttp://mvnrepository.com/artifact/net.sf.json-lib/json-libが見つかるため、そのPOM Dependencyの項目を参考に以下のivy.xmlを記述する。
<?xml version="1.0" encoding="UTF-8"?> <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:e="http://ant.apache.org/ivy/extra"> <info organisation="valice" module="sample-ivy" /> <dependencies> <dependency org="commons-lang" name="commons-lang" rev="2.0" /> <dependency org="net.sf.json-lib" name="json-lib" rev="2.3" /> </dependencies> </ivy-module>
使用したタグの解説
項目名 | 説明 |
---|---|
info | このivy.xmlの基本情報 |
info@organisation | モジュールの所有者、企業、機構 |
info@module | モジュール名 |
dependency | 依存モジュールの宣言 |
dependency@org | pomのgroupId |
dependency@name | pomのartifactId |
dependency@rev | pomのversion |
2.build.xmlを書く
ivyはantのtargetとして実行できるため、build.xmlを書く。
今回はivyのみを使う非常にシンプルなものを容易。
<?xml version="1.0" encoding="UTF-8"?> <project name="ivy-sample" default="retrieve" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant"> <target name="retrieve"> <ivy:retrieve /> </target> </project>
3.Antを実行する
今回はとりあえず簡単に使ってみることが目的の為、以上で完了。
後は上記antのretrieveを実行すればOK。実行すると、libフォルダが作成され(デフォルト)、依存jarがそこに配置される。
初めて実行するときはMavenのセントラルリポジトリから依存ライブラリ群をダウンロードする為時間がかかるが、2回目以降はローカルフォルダにキャッシュされている為すぐに完了する。
★json-libで問題発生
だが自分はここでちょっとハマりました。
json-libの依存が上手く解決できず、json-lib-2.3.jarがダウンロードされない。
http://mvnrepository.com/artifact/net.sf.json-lib/json-lib
設定は確実にあっているはずだけれど、エラー内容で表示されるリポジトリを覗くと確かにjson-lib-2.3.jarなんてものはなく、-jdk13や-jdk15とかついているものしかない。
google先生に色々尋ねていたら、原因らしきものをmaven系のエントリで発見。
json-libは普通にdependencyに足すだけだとダウンロードに失敗する件 - tanamonの日記
ivyでclassifierを指定する為には、artifact要素の拡張属性を使用する必要があるらしいので、ivy.xmlの内容を下記の様に修正。
<?xml version="1.0" encoding="UTF-8"?> <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd" xmlns:e="http://ant.apache.org/ivy/extra"> <info organisation="valice" module="sample-ivy" /> <dependencies> <dependency org="commons-lang" name="commons-lang" rev="2.0" /> <dependency org="net.sf.json-lib" name="json-lib" rev="2.3"> <artifact name="json-lib" type="jar" ext="jar" e:classifier="jdk13" /> </dependency> </dependencies> </ivy-module>
修正内容は、json-lib用のdependencyにartifactを加えたことと、拡張属性の名前空間(xmlns:e="http://ant.apache.org/ivy/extra)の追加。
これで成功。
ただ…json-libが実行時には必要の無い依存jarまで大量に落としてくるので、libが凄いことに…。
絶対どうにかできるハズなので、次回の調査対象。
簡単なサンプルbuild.xml
今回のivyをコンパイルの工程に加えた簡単なサンプルbuild.xmlを作成。
たぶん普通はlib自体を消してそこに再配置とかしないのだろうけど、とりあえずサンプルとして。
これでコンパイルの度に依存を解決してくれる。
<?xml version="1.0" encoding="UTF-8"?> <project name="sample-api" default="all" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant"> <!-- set property --> <property name="bin" value="${basedir}/classes" /> <property name="build" value="${basedir}/build" /> <property name="src" value="${basedir}/src" /> <property name="lib" value="${basedir}/lib" /> <property name="version" value="0.10" /> <!-- default target --> <target name="all" depends="compile,jar,clean" /> <!-- init --> <target name="init" depends="clean"> <mkdir dir="${bin}" /> <mkdir dir="${build}" /> </target> <!-- compile --> <target name="compile" depends="init,retrieve"> <javac srcdir="${src}" destdir="${bin}"> <classpath> <fileset dir="${lib}"> <include name="**/*.jar" /> </fileset> </classpath> </javac> </target> <!-- clean --> <target name="clean"> <delete dir="${bin}" /> <delete dir="${build}" /> <delete dir="${lib}" /> </target> <!-- jar --> <target name="jar" depends="compile"> <jar jarfile="${build}/sampleoapi-${version}.jar" basedir="${bin}" /> </target> <target name="retrieve"> <ivy:retrieve /> </target> </project>
OpenIDとは?
今更ながらOpenIDを利用してみました。
と、実は今までOpenIDの事をよく分かっていなかったのですが、今後Webサービス側としての利用を考えているので、ある程度ちゃんと調べてました。
まぁ細かい仕組みや経緯はwikiにお任せするとして、今回は要はOpenIDって何なの?を簡単に書いてみたいと思います。
OpenIDについて
OpenIDとは?
要は色んなサイトで共通で使えるID。
OpenIDの発行元は色々あって、例えば「はてな」ですと、はてなユーザーであれば特別な手続きをすることなくOpenIDが発行されているみたいです。
■はてなのOpenID
http://www.hatena.ne.jp/{ユーザID}/
このOpenIDがあれば、OpenIDに対応しているサイトのログイン認証等をこのOpenIDのみで通過できるようになります。
例えばOpenIDを使ってこのゲーム・裏技・攻略 - ワザップ!にログインする場合だと
- 右上の「外部ID」をクリック
- 「OpenIDでログイン」の入力フォームに、はてなのOpenIDを入力
- はてなに未ログインの場合はここでログインを求められる
- ログイン成功後、ワザップの認証を許可するかの確認を取られます
- 許可した場合、わざっぷへのOpenIDでのログインに成功します
この「許可」は、「今回のみ」と「常に許可」を選択できる為、常に許可を選べば次回以降の確認は取られなく無くなります。
OpenIDをがあると何が便利?
個人的な感想ですが、パスワード管理の煩雑さから開放されます。
ログインが必要な複数のWebサービス単位でアカウントを作成する必要がなく、一つのアカウントを使いまわすことが可能になります。
OpenIDの発行元も、はてな、mixi、yahoo!やlivedoor等と色々な大手Webサイトが存在しますので、既に持っているアカウントで一手続き済ますだけで取得できることも多いかと思われます。
なぜOpenIDに対応しているWebサービスが増えているの?
Webサービス側で「認証処理の機能」と「ユーザ情報(ID・パスワード等)の保持」を行う必要がなくなるというリスク回避の面が非常に大きいのでは無いかと思います。
これ勝手な想像ですので、間違っていたり他にこんな理由がある等のツッコミがあれば、是非ご指摘ください。
認証を行うWebサービスにはどんな個人情報が渡されるの?
基本的にOpenIDとユーザ名以外の情報は渡されないようです。
ただし自分から提供してもよい属性情報として付加した情報は、Webサービス側に(対応していれば)提供されるみたいです。
ですので、個人情報保護法はちゃんと守られています。
ただ気をつけなければいけないのが、例えばmixiのOpenIDでログインした場合、OpenIDからmixiのユーザIDは分かる為、Webサービス側からすると「今mixiのOpenIDでログインしてきたユーザが、どのmixiユーザなのか」といった情報は伝わってしまいます。(ログを取っていればですが)
なのでmixiのプロフィールに個人情報を記述していれば、Webサービスの管理者はそれを見ることくらいは可能。
これははてなも同様で、はてなのOpenIDで何らかのWebサービスにログインすれば、ユーザIDからブログの特定くらいは可能。
そこはちゃんと考慮した上で利用する必要があります。
OpenIDを使ったサービスの提供をしたい!
これはそのうち記事にします。提供予定ですので。
より詳しく知りたい方はこちら
今回はかなり簡単にOpenIDの説明をしてありますので、より詳しく知りたい方は他のサイトをご覧ください。
仕様から学ぶOpenIDのキホン − @IT
特集:いますぐ使えるOpenID|gihyo.jp … 技術評論社
OpenID をブロガー向けに分かりやすく説明すると?:Goodpic
たけまる / OpenID に向いている認証と向いてない認証
SQLiteのコマンド
簡単にDBを構築したい場合に超便利なSQLite。
しかし趣味で偶にしか使わないので、毎回コマンドを忘れてしまうため備忘録として。
データベース系
データベースを作る or 接続する
sqlite dbname
dbnameのファイルが存在しなかった場合は新規に作成され、既に存在する場合はそのDBに接続する。
データベースの名前を見る
sqlite> .databases seq name file --- --------------- ---------------------------------------------------------- 0 main /home/sqlite/sample.db sqlite> .exit
現在接続中のDB(ファイル)のパスが表示される。
データベースの接続を切る
sqlite> .exit
又は、
sqlite> .quit
データベースのバックアップ
sqliteはデータベース毎にファイルが作成される為、そのファイルをコピーするだけでもバックアップが取れる。
.backupと.restoreコマンドを使う方法もある。
table系
tableの一覧を表示する
sqlite> .tables sample1 sample2
tableのインデックス一覧を表示する
sqlite> .indices sample name_index
tableのスキーマを確認する
sqlite> select * from sqlite_master; #*はテーブル名
下記の場合はCREATE TABLE文のみ表示される
sqlite> .schema [TABLE]
ダンプ&リストア系
ダンプコマンド
sqlite> .dump [tablename, ...] > dump.sql
tablenameは複数指定可能。指定しなかった場合は全てダンプされる。
コマンドラインからのダンプ
sqlite dbname .dump > dump.sql
リストアコマンド
sqlite> .read dump.sql
コマンドラインからのリストア
sqlite dbname < dump.sql
ファイルの入力&出力系
表示結果をファイルに出力する
sqlite> .output sample.txt #sample.txtは任意 sqlite> select * from sample; sqlite>
これでsample.txtに表示結果が出力されている。尚、出力されるフォーマットは設定値の通りになる。
つまり以下のような設定にすると、簡単なcsv形式での出力が可能となる。(エスケープ等の処理はされない)
.mode csvで出力した場合はエスケープ処理もされるが、そのままインポートが出来ないので注意が必要。
sqlite> .output sample.csv sqlite> .separator "," sqlite> select * from sample;
ファイルからデータをインポートする
sqlite> .import sample.txt sample #.import ファイル名 table名
ただし、区切り文字が設定値と一致しなければならない。
出力設定系
現在の設定値を表示する
sqlite> .show echo: off explain: off headers: off mode: list nullvalue: "" output: stdout separator: "|" width:
各項目は以下のコマンドで変更できる
実行したSQLを復唱する
OFFの場合(通常)
sqlite> .echo OFF sqlite> select * from sample;
ONの場合
sqlite> .echo ON sqlite> select * from sample; select * from sample; #復唱されている
explainの結果を見やすくする
OFFの場合(通常)
sqlite> .explain OFF sqlite> explain select * from sample; 0|Goto|0|13| 1|Integer|0|0| 2|OpenRead|0|2| ...
ONの場合
sqlite> .explain ON sqlite> explain select * from sample; addr opcode p1 p2 p3 ---- -------------- ---------- ---------- --------------------------------- 0 Goto 0 13 1 Integer 0 0 2 OpenRead 0 2 ...
.explain ON後は、headers: on、headers: onになっている為、通常のSELECT結果も同様の表示結果となる
SELECT結果でテーブルのヘッダーを表示する
ONの場合
sqlite> .header ON sqlite> select * from sample; id|user|type|name #これがヘッダー 1|root|A|vaice 2|dbuser|B|tanaka
OFF(通常)の場合
sqlite> .header OFF sqlite> select * from sample; select * from sample; 1|root|A|vaice 2|dbuser|B|tanaka
SELECT結果のフォーマットを変更する
sqlite> .mode [MODE]
[MODE]の種類は以下
MODE | 説明 |
---|---|
csv | CSV形式 |
column | 幅の揃ったテーブル形式で表示される |
html | TRタグ、TDタグを使ったHTMLのテーブルとして表示される |
insert | INSERT文で表示される |
line | clumn名 = value値 のペアで1行ずつ表示される |
list | デフォルト値。separatorの値で左詰で表示される |
tabs | タブ区切りで表示される |
tcl | tcl文法で表示される |
表示結果の出力先を変更する
ファイルに出力する
sqlite> .output sample.txt #sample.txtは任意 sqlite> select * from sample; sqlite>
詳しくは「表示結果をファイルに出力する」の項目を参照。
標準出力に戻す場合は以下。
sqlite> .output stdout
データがnullだった場合の表示を指定する
sqlite> .nullvalue "NULL" #デフォルトは""(空)
データの区切り文字を指定する
sqlite> .separator "," #デフォルトは"|"
カラムの横幅を指定する
modeがcolumnの時のみ有効。
sqlite> .width "10" #デフォルトは""
スペース区切りで左から順に指定可能。
sqlite> .width "5 5 10 10"
Javaのアノテーションを独自で定義する
徐々に利用する機会が増えてきたアノテーションだが、アノテーションベースのフレームワークで使われているのを使ったりすることはあっても自分でアノテーションを定義したことが無かった。
「業務用フレームワーク作る際も使えそうだよなぁ」と思っていたので、今後使いこなす為にも改めてちゃんと勉強しなおしてみた。
※「アノテーション」自体は、JUnit、Jaxb、Spring等によって使い慣れていることを前提。
アノテーション型
独自のアノテーションを作成する為には、以下のようなアノテーション型のクラスを作成する必要がある。
@interface Annotation名{ キーの型 キーの名前(); ... }
クラス名がアノテーション名、メソッド名がキー名となり、メソッドの返り値がキーに指定できる型となる。
アノテーション型はインターフェイス型と似ているが、通常のインターフェイス型に比べ、以下の制限がある。
- extends節を書けない
- メソッドは引数とthrows節を持てない
- メソッドの戻り値で使えるのはプリミティブ型、String型、Class型、enum定数、アノテーション型、それらの配列、のみ
- ジェネリクスは使えない
なお、@interfaceが指定されているクラスは、暗黙的ににjava.lang.annotation.Annotationインタフェースの継承クラスになる。
独自のアノテーション定義例
public @interface Hatena { int priority(); String user(); } public enum DiaryType {CATEGORY, DAY, NEW} @interface Diary { DiaryType value(); }
上記の場合は @Hatena と @Diary がアノテーションとして指定できるようになる。
この独自アノテーションを利用した例を以下に示す。
上記の独自定義クラスの利用例
@Hatena(priority = 1, user = "valice") public class SampleClass { public SampleClass(){} @Diary(DiaryType.CATEGORY) public void sampleMethod(){ ...省略 } }
メタアノテーション型Target
アノテーションを定義する場合に重要な点は2つあり
- 対象となる構文要素は何か(コンストラクタ、メソッド、ローカル変数等)
- どのような情報を記述できるのか
を記述する必要があるが、「対象となる構文要素は何か」に関しては省略することができ、省略した場合は構文要素の制限が無い状態になる。
最初の例のアノテーション定義ではそれらを省略しており、@Hatena と @Diaryはアノテーションを指定できる要素であればいかなる要素に対しても付加できることになる。
アノテーションを付加できる構文要素を制限したい場合は、メタアノテーション型Targetをを付与すればよい。
@Hatenaはクラス、@Diaryはメソッドにのみ付与できるようにしたい場合、以下のようになる。
独自のアノテーション定義例にTagetを利用したもの
@Target(ElementType.TYPE) public @interface Hatena { int priority(); String user(); } public enum DiaryType {CATEGORY, DAY, NEW} @Target(ElementType.METHOD) @interface Diary { DiaryType value(); }
ElementTypeで提供されている定数
ElementTypeは列挙型で、指定できる定数は以下。
定数名 | 構文要素 |
---|---|
ElementType.ANNOTATION_TYPE | アノテーション型宣言 |
ElementType.CONSTRUCTOR | コンストラクタ |
ElementType.FIELD | フィールド宣言、enum宣言 |
ElementType.LOCAL_VARIABLE | ローカル変数宣言 |
ElementType.METHOD | メソッド宣言 |
ElementType.PACKAGE | パッケージ宣言 |
ElementType.PARAMETER | 引数宣言 |
ElementType.TYPE | クラス宣言、インタフェース宣言、アノテーション型宣言、enum宣言 |
@Targetアノテーションのvalueキーは配列である為、以下の様に複数指定することができる。その場合はそれら全ての構文要素に付与できるようになる。
@Target({ElementType.TYPE, ElementType.METHOD}) public @interface Hatena { int priority(); String user(); }
デフォルト値
キーが複数ある場合でも、デフォルト値を指定することによってそのキーの指定を省略することができる。
public @interface Hatena { int priority() default 1; String user(); } @Hatena(user = "valice") public class SampleClass { ... }
マーカ・アノテーション
アノテーション型の定義においてメソッドが一つも無い場合、そのようなアノテーションはマーカ・アノテーションと呼ばれる。
マーカ・アノテーションは使用する際、以下のように括弧を省略することができる。
public @interface MarkerAnnotation {} @MarkerAnnotation public class SampleClass { ... }
これらは、標準アノテーションの@Overrideや@Deprecatedと同じ振る舞いである。(@Overrideや@Deprecatedもマーカ・アノテーションである)
その他のメタアノテーション型
メタアノテーション型Targetは既に紹介したが、その他の標準メタアノテーションであるRetention、Inherited、Documentedについても記載しておく。
Retention
アノテーションの有効範囲を指定できる。
定数名 | 有効範囲 |
---|---|
RetentionPolicy.CLASS | アノテーションの情報をクラス・ファイルに出力するが、実行時JVMにロードされない。省略された場合のデフォルト値。 |
RetentionPolicy.RUNTIME | アノテーションの情報をクラス・ファイルに出力し、実行時JVMにもロードされる。その為、リフレクションAPI経由でその情報にアクセスできる。 |
RetentionPolicy.SOURCE | アノテーションの情報はソース・コード上のみに保持され、コンパイル時によって破棄される。 |
@Retention(RetentionPolicy.CLASS) public @interface Hatena { int priority(); String user(); }
※Retentionはキーがvalueしか無いため、キー名の省略が可能
Inherited
アノテーションを利用したクラスにおいて、そのアノテーション指定を子孫クラスに継承させることができる。
指定は必ずクラス定義に対してする必要があり、それ以外に指定した場合は無効となる。
下記の例の場合、SampleSubClassにおいても@Hatenaアノテーションが有効となっている。
@Inherited public @interface Hatena { int priority(); String user(); } @Hatena(priority = 1, user = "valice") public class SampleClass { ... } public class SampleSubClass extends { ... }
※Inheritedはマーカ・メタアノテーションの為、括弧は省略可能
予告
今回は定義の仕方だけですが、独自のアノテーションの利用方法もそのうち書く予定です。その際はここにリンクを貼ります。
linuxの/procについて
/proc配下のファイル群は、アプリケーションからのアクセスに応じて動的に内容が生成される仮想ファイル群である。
proc自体はファイルシステムで、システム起動時にマウントされる。(mountで確認できる)
このマウントに関しては、/etc/fstabに書かれているが、実際はカーネルにハードコーディングされているのでマウントする必要はない。(らしい)
配下のファイルの種類は大きくわけて2つ。
ディレクトリ名がプロセスIDになっているディレクトリの中身
名前 | 内容 |
---|---|
cmdline | プロセスを起動したコマンドライン(bash等) |
cwd | 現在の作業ディレクトリ(/home/user等) |
environ | プロセスの環境変数 |
exe | 実況中のプログラムファイル(/bin/bash等) |
fd/ | プロセスが開いているファイルのファイル記述子(ファイルディスクリプタ)。シンボリックリンクのリンク先が開いているファイルになっている。 |
maps | プロセスのアドレス空間におけるメモリマップ |
mem | プロセスのアドレス空間の内容 |
root | ルートディレクトリ(/root) |
status | プロセス状態(属性や稼働状況) |
ディレクトリ名が数値(プロセスID)でないファイル・ディレクトリの一覧
名前 | 内容 | |
---|---|---|
acpi/ | 電力制御に関する情報 | |
asound/ | サウンドに関する情報 | |
asound/cards | 認識しているサウンドカードが確認できる | |
buddyinfo | メモリの分散化問題を解析するために使用される…らしい | |
bus/ | インストールされている各バスの情報 | |
cgroups | 資源コントローラの情報? | |
cmdline | カーネル起動時のオプション | |
cpuinfo | CPUの識別情報 | |
crypto | インストール済の暗号方法一覧(md5とか) | |
devices | デバイスノードに関する情報 | |
diskstats | 各ディスクデバイスのディスク I/O 統計情報 | |
dma | 登録されているISA DMAチャンネルの一覧 | |
driver/ | デバイスドライバが提供する情報表すファイルが置かれる | |
execdomains | 実行ドメインと、パーソナリティ範囲の一覧 | |
fb | フレームバッファデバイス、その番号、それを制御するドライバなどの一覧 | |
filesystems | 組み込まれているファイルシステムに関する情報を表すファイルが置かれる | |
fs/ | nfsを利用している場合はここに情報が表示される? | |
ide/ | 各IDEチャネルとそれに取り付けられている各デバイスの情報 | |
interrupts | デバイスが使用しているIRQ(割り込み要求)の一覧 | |
iomem | デバイスが使用しているメモリの一覧 | |
ioports | デバイスが使用しているI/Oアドレスの一覧 | |
irq/ | 特定のIRQ(割り込み要求)を1つのCPUにのみ接続、またはCPUがどのIRQも処理しないように設定したりできる | |
kallsyms | カーネルの外部シンボル定義一覧 | |
kcore | カーネルのメモリ空間全体にアクセスできる | |
key-users | 認証データをLinuxカーネルにキャッシュすることかできる「鍵保存サービス」で使われる | |
keys | 認証データをLinuxカーネルにキャッシュすることかできる「鍵保存サービス」で使われる | |
kmsg | カーネルからのログメッセージ | |
kpagecount | 中を見ても意味不明。何かのカウント? | |
kpageflags | 中を見ても意味不明。何かのフラグ? | |
latency_stats | レイテンシ情報?「Latency Top version : v0.1」こんなのが返ってきた | |
loadavg | ロードアベレージ | |
locks | ファイルロックとリースの情報 | |
mdstat | RAID設定の情報 | |
meminfo | メモリ使用状況 | |
misc | その他のメジャーデバイス上に登録されている その他のドライバを一覧 | |
modules | カーネルに組み込まれているモジュールの一覧 | |
mounts | 全マウントの一覧 | |
mtrr | システムで使用中の MTRR (Memory Type Range Registers) | |
net/ | ネットワークデバイスやデバイスの通信に関する情報 | |
pagetypeinfo | 今のところ謎。そして調査予定なし… | |
partitions | パーティション情報 | |
reserve_info | 「1:0 "total reserve" 0K 0/0」とだけ書いていた。今のところ謎。 | |
sched_debug | 未 | |
schedstat | 未 | |
scsi/ | SCSI情報(USBハードディスクはSCSIデバイスとして認識) | |
self | 自プロセスに関する情報。自プロセスのproc仮想ファイルへのシンボリックリンク。 | |
slabinfo | カーネル設定オプションCONFIG_SLABが有効の場合にのみ存在する。カーネルキャッシュ使用率の情報。 | |
stat | システムのさまざまな統計情報。最後に再起動された時以降のものが保持されている。 | |
swaps | スワップ領域の一覧 | |
sys/ | カーネルの調整可能パラメータ(チューニングで利用) | |
sysrq-trigger | このファイルにecho等で書き込むとSysRqキーを使うことができる。(rootのみ) | |
sysvipc/ | 現在システム上に存在するIPCオブジェクトの一覧 | |
timer_list | システム上の設定されたクロックとタイマの情報?なんのこっちゃいな… | |
timer_stats | カーネルのタイマを要求されているルーチンについての情報? | |
tty/ | ttyドライバとライン設定のサブディレクトリがある | |
uptime | システムが起動してからの経過時間 | |
version | カーネルのバージョン | |
vmallocinfo | 動的メモリ空間の情報 | |
vmstat | 仮想メモリの使用状況 | |
zoneinfo | メモリのゾーン (memory zone) に関する情報。仮想メモリの振舞いを分析するのに役立つらしい。 |
PC起動時のフロー - MBRとブートローダとパーティションテーブル
先日、Linuxを入れていたPCにWindowsを入れようとしたら上手くブートできなくなるという事態が発生したので、これを期にブート回りをちゃんと勉強しなおしてみました。
忘れないようにメモ書き。
PC起動時のフロー
MBRとは
マスターブートレコード(Master Boot Record)の略。
ハードディスクの先頭部分(セクタ)に置かれ、パソコン起動時に最初に読み込まれる。
PC/AT互換機におけるマスターブートレコードの構造は以下
アドレス | 内容 | サイズ |
---|---|---|
0000 | ブートローダ | 446 |
01BE | パーティションテーブル | 64 |
01FE | ブートシグニチャ | 2 |
ブートローダとは
またはブートストラップローダ、マスターブートローダ、マスターブートコード、イニシャル・プログラム・ローダ(正式な名称はない)。
電源を入れた後、OS起動までの一連の処理を行うソフトウェア。
ブートローダは多段階で使われ、MBRに記録されたプログラムがさらに別のプログラムを呼ぶ。
MBRに記録されているプログラムは非常に小さいが、OSをロードして起動するための別のプログラムをロードするには十分な機能を持っている。
パーティションテーブルとは
ディスクのパーティション情報を管理している領域。
4エントリあり、それぞれ以下の情報を持つ。
アドレス | 内容 | サイズ |
---|---|---|
0x00 | ブート可能かどうかのフラグ(「PC起動時のフロー」での起動フラグはこれ) | 1 |
0x01 | パーティションの開始位置(CHS方式) | 3 |
0x04 | パーティションのタイプ(NTFSとかFAT32とか) | 1 |
0x05 | パーティションの終了位置(CHS方式) | 3 |
0x08 | パーティションの開始位置(LBA方式) | 4 |
0x0C | 総セクター数(LBA方式) | 4 |
サンプル
自分のWinPCのMBRをダンプして、パーティションテーブル部分を抜き出してみたのが下記。
第1エントリ - 80 00 01 fe 07 ff ff 00 3f 00 00 ea cc 09 ff 00 第2エントリ - 00 ff c1 fe 0f ff ff eb 0b 09 ff ac f5 1b 42 00 第3エントリ - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 第4エントリ - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
第1エントリに起動フラグが立っていて、第2エントリは拡張DOS領域(拡張パーティション)となっている事等が分かる。(第3エントリ、第4エントリはnull)
ここで示されている各パーティションの先頭位置にはブートセクタ (PBR) が存在するが、拡張パーティションの場合はMBRと同じ構成の拡張ブートレコード (EPBR)が存在し、パーティションテーブルの最初の2エントリのみが使用される(拡張パーティションテーブル)。
この拡張ブートレコード (EPBR)は、第1エントリに自身のブートセクタ(PBR)の位置を、第2エントリに次のパーティションのEPBRの位置を管理することにより、入れ子になる形で多数のパーティションの作成が可能となっている。