C++11とか

主に競技プログラミングとかで使いそうなところを。

auto

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
	vector<int> v;
	for (int i = 0; i < 5; i++) {
		v.push_back(i);
	}
	for (auto it = v.begin(); it != v.end(); ++it) {
		cout << *it << endl;
	}
	
	return 0;
}

std::vector<int>::iteratorって書かなくてもいいみたい。

配列とかー

#include <iostream>
#include <array>
using namespace std;

int main() {
	array<int, 10> ary;
	ary.fill(10);
	for (int i = 0; i < ary.size(); i++) {
		ary[i] = i * 2;
	}
	
	return 0;
}

ary={}とはおさらば。配列にメソッドがあるっていい。

範囲for文

#include <iostream>
#include <array>
using namespace std;

int main() {
	array<int, 30> ary;
	ary.fill(0);
	
	for (const int n: ary) {
		cout << n;
	}
	
	return 0;
}

大体foreach的なものだと考えていいのかな。

ラムダ式

#include <iostream>
#include <array>
#include <algorithm>
using namespace std;

int main() {
	array<int, 50> ary;
	ary.fill(0);
	
	for (int i = 0; i < ary.size(); i++) {
		ary[i] = i;
	}
	auto cnt = count_if(ary.begin(), ary.end(), [](int x){return x % 2 == 0;});
	cout << cnt << endl;

	return 0;
}

外部で関数オブジェクトを作らずにその場で作れるようになるのが便利。

x-finderの検索をffxで

久しぶりにx-finderの設定を弄っていました。というのも、ファイル検索がデフォルトのままでは貧弱だったからです。

Everythingなどの連携も考えましたが、とりあえずx-finderの検索ソフトとして作られているffxを使ってみることにしました。

ffxをダウンロードしたら、実行ファイルをx-finderと同じ場所に置いときます。
それからx-finderの検索のプロパティのパスを

"%X-Finder%ffx.exe" -l "%Current%" -t "%X-Finder%found.ini"  -x "%X-Finder%xf.exe" -s rqm

と書き換え。オプションの効果などは付属のりどみに簡潔に書かれています。

これだけでも一応検索はできるのですが、クリップボードを使ったほうがいいです。

詳細設定のクリップフォルダのパスに下の設定を追加すると検索結果がクリップボードで開けます。

,Extra:%X-Finder%found.ini

検索が便利になると画像フォルダの整理も捗ります…。

コマンドライン入力をviに

echo 'set editing-mode vi' >> ~/.inputrc

たった一行でできます。あとは、inputrcを読み直せばviモードになります。
ちなみに、コマンドラインの入力はデフォルトではEmacsモードになっています。

ddとか、Dや、cwができてうれしくなります。
履歴を遡るのも、jkキーでらくらく。回数指定もできます。あと、履歴検索が強力です。/commandとかでcommandを入力した履歴をさかのぼれます。

ただ、インサートモードとノーマルモードの見分けがつかないのが欠点かもしれません。他のウィンドウから戻って入力したら、ノーマルモードのままだったとかよくあります。なれるしかないですが…。

OpenGLでシェルピンスキーのギャスケット

プログラミングで図形ってどうやって書くの?的なことを聞かれたので、それらしいのをやってみました。

OpenGLの準備*1

GLUTを使います。まずはwindows用のGLUTを持ってきます。
Nate Robins - OpenGL - GLUT for Win32
ヘッダファイルを「追加のインクルードディレクトリ」に追加、libファイルを「追加のライブラリディレクトリ」に追加、dllファイルは実行ファイルと同じ場所に置くかSystem32へ。多分これで動くはずです。

シェルピンスキーのギャスケット

#include <glut.h>
#include <stdio.h>

struct Pos {
	GLdouble x, y;
};

void triangle(int n, Pos a, Pos b, Pos c) {
	//頂点(a,b,c)を線で結ぶよ!
	glBegin(GL_LINE_LOOP);
	glVertex2d(a.x, a.y);
	glVertex2d(b.x, b.y);
	glVertex2d(c.x, c.y);
	glEnd();

	if (n < 1) {
		return;
	} else {
		Pos d, e, f;
		//頂点(a,b,c)の中点を取得
		d.x = (a.x + b.x)/2, d.y = (a.y + b.y)/2;
		e.x = (b.x + c.x)/2, e.y = (b.y + c.y)/2;
		f.x = (a.x + c.x)/2, f.y = (a.y + c.y)/2;
		triangle(n-1, a, d, f);
		triangle(n-1, d, b, e);
		triangle(n-1, f, e, c);
	}
}

void display(void) {
	Pos a, b, c;
	//画面中央が(0,0)
	a.x = -0.9, a.y = -0.9;
	b.x = 0.0, b.y = 0.9;
	c.x = 0.9, c.y = -0.9;
	triangle(5, a, b, c);
	glFlush();//更新
}

int main(int argc, char *argv[]) {
	glutInit(&argc, argv);//初期化
	glutInitDisplayMode(GLUT_RGBA);//表示モード設定
	glutCreateWindow("GLTest");//ウィンドウ生成
	glClear(GL_COLOR_BUFFER_BIT);//塗りつぶし
	glutDisplayFunc(display);//描画関数へのポインタ
	glutMainLoop();
	return 0;
}

実行結果

f:id:yashihei:20130529171913j:plain

再帰で短くかけました。再帰を使ったプログラミングは、楽しいです。

*1:VisualStudioでやってます

PHPとかWPの導入メモ

*1のサイトの改装にWordPressを使うのですが、どうやらPHPの知識がないときつそうです。というわけで頑張ります。

PHP動かしたい!

というわけでまずは環境から。

PHPはサーバーサイド・スクリプト言語として利用されており、Webサーバ上で動作し、Webサーバ上でPHPスクリプトの文書が要求されるたびに、そのPHPスクリプトが実行され、結果をウェブブラウザに対して送信する。

PHP: Hypertext Preprocessor - Wikipedia
うぃきより。というわけで、ローカル開発環境が必要になるわけです。仮想マシン上でそれらを構築することができますが、面倒なのでXAMPPを使います。

XAMPPのインストールが完了したら、Apacheを起動してからhttp://localhost/xampp/に飛びます。おめでとうページが表示されたらおーけーです。
あと、初期の状態だとXAMPPの管理ページに誰でもアクセス出来る状態なのでユーザー認証を設定します。あとMySQLの rootパスも設定しておきます。

お次はPHPの設定、php.iniで文字化け対策をします。あと、webサーバーであるApacheの設定もちょっと見ておきます。多分デフォルトのままで問題ないです。test.phpなどを作ってhtdocs*2に置いて表示されればおーけーです。

WordPressも動かしたい!

あとついでにWordPressも入れておきます。まずはデータベースを作ります。次に、公式サイトからWordPressをダウンロードしてきて、htdocs下に置きます。http://localhost/wordpressにアクセスし、データベース名やユーザー名の設定、そしてサイトの情報を入力すれば完了です。

インストール後のメッセージが可愛かったです。

WordPress がインストールされました。もっと何か作業をしたかったですか ? がっかりさせてゴメンナサイ。これだけです !

*1:sysken.org

*2:DocumentRoot