サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
murakan.cocolog-nifty.com
今日、ふと悩んだ2次元配列を関数引数で渡す方法。 やりたいのはつまり... static void sub_func( ☆ ) { /* ここで2次元配列A[5][3]の各要素をA[x][y]のように読み書きする */ } void func( void ) { int A[5][3]; sub_func( A ); } という事。 問題となるのは「☆」の部分をどのようにすれば良いのか? いくつか方法を思いつきますね。 1. static void sub_func( int* a ) これはあくまで2次元配列の先頭アドレスをポインタ変数として受け取る形。この形式で渡すと2次元配列を格納したメモリにアクセスする事はできるけど、2次元配列である情報が渡らない。つまりA[x][y]のような形式でアクセスできない。 よく見かけるコートは、この方法でアドレスを渡して、その後中の要素番号を計算しつつ
さて、最後に英語/日本語フォント設定編です。 実はEmacsではこのフォント設定が一番の曲者。僕は職業柄、等幅フォントにこだわっていて、しかも英語/日本語混在字でも桁が合うように「全角文字幅=半角2文字分」という見た目にしたいわけです。しか〜し、これが中々大変。 というのも、フォントというのは元々デザインなわけで全ての等幅フォントが全ての文字サイズで桁合わせできるというわけではないのです。でもまぁ、TrueTypeフォントやったらフォントのレンダリング字に倍率を変える事で多少の調整が可能。せやけど、この調整も Try & Error で行う必要があるから、結構手間なわけですわ。 試行錯誤の結果、我が家の環境でバッチシやったのは以下の環境と設定です。 ディスプレイ DELL 24インチ(1920x1200) 半角文字サイズ 8pt 英字フォント さざなみゴシック 日本語フォ
前回の記事で書いた通り、最近Emacsのバージョンを23.2.1にアップデートしました。フォント周りとか日本語入力関係とか、最新の環境に合わせて.emacsを書き換えたので、覚書しておきまする。 まずはターゲットの環境について OS ubuntu 11.04 日本語入力 mozc (Google日本語入力) 文字コード utf-8が基本 こんな感じです。 ではまず日本語入力部分から。 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 日本語入力の設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (set-language-envir
さて、お次は文字コード編。 世の中ではメールでも平気で機種依存文字を使う人が多いし、しかもそういうメールに限ってiso-2022-jpで送ってきたりする。それから、テキストファイルをwindowsと共有したりすると、どうしても機種依存文字が問題になるんよね... ちゃんと文字コードを理解してから使ってくれれば良いのやけど、文字コードの種類も乱立してるし某M社なんかが訳の分からん独自仕様を標準化しようと押し付ける始末。さぁ大変! とりあえず我が家では以下の設定にしました。 cp5022x.elというM社の独自拡張をサポートしたEmacs lispがあります。これを使うとiso-2022-jpで丸付き数字など機種依存文字を含んだcp50220というコードページが使用できるようになります。 あと、文字コードのプライオリティを変更しておく必要があるね。 という事で、基本的にutf-8なんやけど、e
Emacsでプログラムとかメールとか書いてる時に(あ、あとツイッターもかな?)指定範囲の行数やら文字数やらを知りたいって事がままあるわけです。そんな時はリージョンを設定して、「M-=」もしくは「M-x count-lines-region」とやるとリージョン範囲の行数と文字数が表示できるのやけど、毎度タイプするのも面倒やなぁって思ってたら、こんなすばらしいelispを作ってる方がいらっしゃいました。 早速、使わせて頂くと共に紹介しまする。 再発明日記 リージョン内の行数と文字数をモードラインに表示する(範囲指定している時だけ) 実際に表示してみた感じは・・・ おぉ〜。ええやん。モードラインの左側にご注目くださいな。 表示フォーマットは format の後ろを変更すれば変えられます。 オリジナルのままだとちょっと長かったので、linesやcharsを無くして、さらに固定長にしました。指定した
最近C++でやたら演算子のオーバーロードをする事が多くて色々調べたり実験したりしていたんやけど、ここいらで覚書きをしておこう。 演算子をオーバーロードする目的には色々あるけど、主にオブジェクトに対して以下のような記述方法を使いたい時が上げられるかな? obj A; obj B; obj C; A = B; A += B; A = B + C; もちろん + 以外にも -(sub) *(mul) /(div) &(and) |(or) ^(xor) <<(lshift) >>(rshift) などなど色々あるわけでさ。 それからコピーコンストラクタにポインタ参照、キャスト演算子などキリがないね。 で、↑のようなオブジェクト同士の演算であれば結構簡単。 class obj { public: void operator = ( obj o ); obj& operator + ( const
ubuntuでのHDDのデータ消去方法。 ご存知の通り、HDDはファイルを削除したりフォーマットしたりするだけではデータを削除する事はできない。そこで、アメリカの軍でも使用されているような乱数値を全面に3回以上記録するという方法で消去する必要があります。 WindowsだとHDDに物理的にアクセスする事ができないため、専用のソフトが必要になるのやけど、Linuxならshredというコマンドを使うことで簡単にできます。 ちなみにデバイスファイルに直接アクセスするのでroot権限が必要です。 まず消去対象のHDDがどのデバイスファイルにマップされているかを確認する。 dfやmount、dmesgコマンドなどで調べておきます。 次にshredコマンドを使ってデータを消去すると... sudo shred -n 3 -v /dev/sdh -nオプションは書き込みの回数を指定します。例では3回繰り
以下の記事でstreamクラスのeofの扱いが難しいという記事を書いたんやけど、まぁこれやったらと許容できる方法を考えたので載せておこう。 【C/C++】ifstreamのeofメンバ関数(違和感のある挙動) ちなみに以前はifstreamについて書いたんやけど、調べてみるとstream系のeofは全て同じ実装みたい。 つまり、実際に最終要素にアクセスした後でないと、正確なeofを検出できないと。 そこで、以下のようにすると、うまく動きます。 ん〜、読み出し部分が2行あって気持ち悪いけど、一応これやったらちゃんと対応できてると思うんよね。 istringstream s(buff); string line; s >> line; <-- ミソ while( !s.eof() ) { 〜何らかの処理〜 s >> line; } 単純にwhileループをeofメ
別にubuntuだけの話ではないのやけど、我が家のubuntuサーバでmediatombを動かすようにしたのでその設定を覚書き。 以前はCentOSでmediatombを動かして、PS3から音楽やらフォトやらビデオやらを見てました。で、今回はサーバがubuntu 8.04に変わったんで、再設定を。意外と色々はまるもんですなぁ。 以下手順を。 mediatombのインストール config.xmlの設定 mysqlの設定 コンテンツ登録 MP3 IDタグの文字コード変換 1. のインストールはもうええよね。パッケージマネージャをつかって、mediatombを一式インストールしてくださいな。この時にmysqlもインストールすると後々よろしいです。元々mediatombはsqlite3をバックエンドのDBとして使っているのやけど、sqlite3は遅い。mysqlの方が格段に早いっす。だからmys
久しぶりの覚書き。 perlを使った1ラインコマンドでのテキストファイルの一括置き換え方法 $ perl -p -w -i.bak -e "s/置換前文字列/置換後文字列/g" ファイル名 さらにfindを組み合わせ複数ファイルを一括処理する方法 以下のどちらでもOK。実は他にも色々と方法はある。 $ find . -name ファイル名パターン | xargs perl -p -w -i.bak -e "s/置換前文字列/置換後文字列/g" $ find . -name ファイル名パターン -exec perl -p -w -i.bak -e "s/置換前文字列/置換後文字列/g" {} \; もちろんperlの強力な正規表現が使えます。 ファイル名の一括置き換え方法 大量のファイルの拡張子を一気に変更とか、色々できまする。 通常は rename コマンドを使えば良いのだけど、Cygwi
久しぶりにVirtualBoxネタ。 共有フォルダの設定方法を覚書きしておこう。 VirtualBoxではホスト側(VirtualBoxを動かしているマシン)の任意のフォルダをゲスト側(VirtualBox上で動いているOS)と共有する事ができる。もちろんNetwork越しにSambaやCIFSで共有する事もできるけど、ホスト<->ゲストだけやったら共有フォルダを使うのが楽。 VirtualBox Windowの右下の↓のようなアイコンがありまする。 この内、左から6番目、つまり このアイコンを右クリックしまする。 (ちなみに上記の図は、既に共有フォルダが設定済みの環境で、かつ共有フォルダにアクセスしている最中のスクリーンショットなので、フォルダ絵の右下に丸いアイコンが出てるけど、通常時はフォルダ絵のみなはず) そうすると以下の共有フォルダの設定画面が出るので、そこで共有したいホスト側のフ
Emacsで便利に良く使う機能の紹介。 文字列をコピーする時は・・・ Ctrl+Spaceでリージョンの先頭を指定 Ctrl+F/B/P/Nでカーソル移動(別にページジャンプや段落ジャンプでも良いけど...) ESC+wでリージョンをkill-ringにコピー C-yで貼り付け という手間になります。まぁ、これはこれで慣れていれば問題ないし、そもそもカーソルの移動系が強烈に強力なEmacsでは特に不自由なかったりもする。(Emacsユーザが時に何やっているのか付いていけないと言われる原因がこのカーソル移動にあると思う・・・) でも、カーソルのある場所の単語や文字列を簡単にリージョン設定できたらメッチャ便利やなぁと思っておったのです。そこで、current-string-to.elのご紹介。作者さんに感謝感謝。 後は.emacsにこんな感じで設定します。2行目は日本語対応のためのようです。
(2009/01/08の投稿) 通常はちゃんとfont-lockが有効になってて、Emacs LispやらCのソースやらアセンブラとかのソースを見ると思った通りに色付けされているのだけど、一旦"CTRL-, ,"でhowmを起動すると大部分のフォント色設定が外れてしまう う〜、こりゃ不便だ。 Emacs 23でhowm 1.3.2を使った時に各モードのコメント行のハイライトが無効になってしまう問題があって悩んでたんやけど解決しました。どうやらhowm 1.3.2の問題やったみたいで、1.3.6以降なら正常に動作するみたい。やっぱり最新のhowm 1.3.7に乗り換えました。これで万事快調 残念ながらubuntu 8.04 LTSではhowm 1.3.2パッケージしか用意されていないので、手動でインストールしなくちゃならんのです。という事で、覚書きしておこうっと。 howm 1.3.7 wi
Emacsの編集機能はめっちゃ強力です。 プログラムを書いてるとコメントとかに表組みを書きたくなったりします。ステートマシンとか真理値表とか書きたいですからなぁ。そんな時にアスキーアートを使って表を作るんやけど、いちいちキーボードから入力してたら埒があかないです。そんな時に使える機能の紹介。 任意のバッファの任意の位置で以下のコマンドを実行します。 M-x table-insert そうすると、ミニバッファに Number of columns (default 3): Number of rows (default 3): Cell width(s) (default 5): Cell height(s) (default 1): が順番に聞かれます。それぞれの意味は見ての通り 横方向のセル数 縦方向のセル数 セルの横幅 セルの縦幅 全てのパラメータを入力するとカーソル位置に表が表示され
Emacsでのバッファ移動は通常 CTRL-x o (other-window) ですけど、これはバッファを古い方(分割元)から順に移動していくコマンドですね。バッファ分割が2つ位だとトグル動作になるので問題ないのだけど、僕の使い方みたいに細かくバッファを切ってると一つ前のバッファに行くのに一周してこなくちゃならなくなって不便なのだ。 そこで愛用しているのが Shift + ↓ or → or ← or ↑ でバッファ移動する方法。これなら上下左右、どこでも移動できるのでめっちゃ便利。感覚的だしね。 設定方法も簡単で、",emacs"の任意の場所に (setq windmove-wrap-around t) (windmove-default-keybindings) って書くだけっす。 お試しあれ。
ちょっと仕事がらみのネタを紹介。 一応ソフト屋さんなんでソフト開発をするんやけど、プログラムを書くのはもちろんEmacsで色々な機能を使って書きます。これで結構手抜きができるんで助かるんやけど問題はデバッグの時やね。Windowsのアプリ開発時はVisutalStudio、Linuxではgdb、組み込みではgdbのリモートデバッグやったりEclipseやったり、専用の開発ツールやったりするわけです。毎回環境が変わるんも不便やし効率悪いし、エディタとデバッガの環境が違うのも使いにくいよなぁ。そういう意味でもEmacsでデバッグができればと思うわけです。 EmacsにはGUDというgdbのフロントエンドがあって、これを使うとgdbのコマンド操作をEmacs上から行う事ができるわけです。特にステップ実行やらスタック情報表示、ウォッチ式の編集とかできるんで結構便利。もちろんベースがgdbなので専用
ubuntu 8.04 LTSのSynapticパッケージ・マネージャを見ると、Emacs 21とEmacs 22のパッケージが既に用意されていました。ビックリです。だって、昔はEmacsをインストールするために、gccをビルドする必要があって、そのためにvi使って...って感じだったから。 いやぁ、確実に世の中は恵まれた環境になっているのですね。そういう事をしなくて済むという事はそういう事を知らなくて済むという事で、最近の環境って人を打たれ弱くしているような気がしてならない...そうならないように「日々此精進」ですわ。 話が反れてしまった。 えーと、ubuntuに移行した時にもちろんEmacsをインストールしようとしたのだけど、Emacs 22を最初使ってたわけです。でも、なんかフォントが綺麗くない(変な言い方やなぁ)どうやらアンチエイリアシングがかかっていないみたいなんですわ。調べてみ
どのエディタをつかっても現在の編集行(カーソル行)を目立たした方が使いやすいと思ってまする。Emacsも例外ではないのだけど、単純な下線だけだとちょっとね・・・。という事で、編集行をハイライトする設定です。 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 編集行を目立たせる(現在行をハイライト表示する) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defface hlline-face '((((class color) (background dark)) (:background "dark slate gray")) (((class color) (
このページを最初にブックマークしてみませんか?
『murakan.cocolog-nifty.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く