技術的なやつ

技術的なやつ

OpenGL入門したかった

思うところがあって OpenGL を触ることにしたのでメモを残していくことにした。

環境

Windows8.1、Visual Studio 2015
基本的には以下のページを見ながらやっていった。

qiita.com

Hello World

Visual C++ -> Win32 コンソールアプリケーション -> 空のプロジェクト作成。
NuGet パッケージの管理から nupengl.core をインストールする。OpenGL をいい感じにラップする freeglut、GLFW、GLEW というやつを全部インストールしてくれるらしい*1

「環境」のとこに貼り付けた Qiita の記事中にあったソースコードをペッと貼り付けて実行してみるが、unresolved external symbol __imp__glClear@4 とか言われる。
opengl32.lib をリンクするの忘れていた。Qiita の記事に書いていた。。。。

無事白いウィンドウが出てきてめでたい。

なんのこっちゃ分かってないが、なんだか良い資料が見つかったのでこれを読みながらぼちぼち理解しているところ。
とりあえず3.2.7節まで読んだ。
以下は白いウィンドウを出すプログラムに自分の理解コメントを加えたもの。

#include <iostream>
#include <GLFW/glfw3.h>

// コンソールウィンドウを開きたくない場合、以下のコメントアウトを外してください。
// #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")

int main()
{
    // GLFW の初期化
    if (glfwInit() == GL_FALSE) {
        std::cerr << "GLFW の初期化に失敗しました。" << std::endl;
        return 1;
    }

    // ウィンドウの作成。レンダリングコンテキストの取得。
    // constでポインタの書き換えを禁止している(http://qiita.com/go_astrayer/items/63e8a059ae20a5d5e000)
    GLFWwindow* const window(glfwCreateWindow(640, 480, "Hello World", NULL, NULL));
    if (window == NULL) {
        std::cerr << "ウィンドウを作成できませんでした。" << std::endl;
        // GLFW の終了処理
        glfwTerminate();
        return 1;
    }

    // OpenGL の処理対象ウィンドウを設定する。
    glfwMakeContextCurrent(window);

    // 背景(クリア)色(RGBA)を指定する。OpenGL の API。
    glClearColor(1.0f, 1.0f, 1.0f, 0.0f);

    // メインループ。ウィンドウが開いている間繰り返す。
    while (glfwWindowShouldClose(window) == GL_FALSE) {
        // 背景色でウィンドウをクリア。
        // カラーバッファ(画像表示)のみ指定。ウィンドウには他にデプスバッファ(隠面消去)、
        // ステンシルバッファ(型抜き)などがある。
        glClear(GL_COLOR_BUFFER_BIT);

        // 
        // ここで描画処理を行う
        // 

        // カラーバッファを入れ替える。裏画面と表画面の反転みたいな。
        glfwSwapBuffers(window);

        // マウス操作等のイベントを取り出して記録。プログラムの実行を停止させない。
        // glfwWaitEvents() はイベントの発生までプログラムを停止させる。
        glfwPollEvents();
    }

    // GLFW の終了処理
    glfwTerminate();

    return 0;
}

今更だけど Slack bot を書いた

f:id:ibako31:20170228201501j:plain

こういう感じの、受け取ったメッセージをシャッフルして再投稿するクソ bot を作った。

なんで作ったの?

顔文字がシャッフルされるとたまに変な顔文字が生まれて面白いと思った。そういえば Slack bot って作ったことないなぁ、と思った。


で、調べてみるとそこそこ新しい記事では hubotを使っていたりBotkit を使っていたりした。
…のだけど、JS 嫌だなぁと思ったので Ruby で書くことにした。

幸いにもいい感じの gem があったのでコレを使うことにした。

github.com

一箇所だけものすごく詰まった点があって、chat.postMessage を叩きに行くとき同時にトークンを指定すれば良いと思っていたのだけど、実際は configure で指定しないとダメなのだった。

github.com

このドキュメント読んでるとメソッド呼ぶ時に token で指定すれば良さそうなんだけど、not_authed が返ってきて悲しくなる。
gem の Usage にちゃんと書いてあるので、この通りにすれば良かった。

github.com

作った bot はコレ。emoji に対応している。

C# の struct と class の違い

struct は値型,class は参照型らしい.ここ見た

using System;

struct Struct {
    public int x;
}

class Class {
    public int x;
}

class MainClass {
    static void Main() {
        var s1 = new Struct();
        s1.x = 1;
        var s2 = s1;
        s2.x = 2;
        Console.WriteLine("s1.x: " + s1.x + ", s2.x: " + s2.x);

        var c1 = new Class();
        c1.x = 1;
        var c2 = c1;
        c2.x = 2;
        Console.WriteLine("c1.x: " + c1.x + ", c2.x: " + c2.x);
    }
}
s1.x: 1, s2.x: 2
c1.x: 2, c2.x: 2

C++と同じような感覚だと,デフォルトのアクセシビリティが違うのかなーと思ってたけどもっと重要な部分が違っていた.

CpawCTF やってる 2

あんまり時間ないので Lv2 の一部のみ.
Lv1 よりはやること増えてるけど,今のところ事前知識が間に合っててちょっと調べればなんとかなるレベルという感じ.

  • Q13.[Stego]隠されたフラグ
  • Q15.[Web] Redirect
  • Q16.[Network+Forensic]HTTP Traffic
  • Q17.[Recon]Who am I ?

ksnctf やってる

これ
CpawCTF よりむずそう.

以下,今ところ解けてる問題.

  • 1. Test Problem
  • 2. Easy Cipher
  • 3. Crawling Chaos
    • 何すれば良いのかは割とすぐ分かったけど,どうすれば良いのか分からなくて苦戦した
    • ググり力が低い…
    • ヒント: Firebugで難読化解除されたコードが見れるのとJS整形( ttp://jsbeautifier.org/ )

CpawCTF やってる

これ

今日はとりあえず Lv1 を解いた.

  • Q1.[Misc] Test Problem
  • Q6.[Crypto] Classical Cipher
  • Q7.[Reversing] Can you execute ?
    • unix command: file ファイル・タイプを判定する
  • Q8.[Misc] Can you open this file ?
  • Q9.[Web] HTML Page
  • Q10.[Forensics] River
    • identify -verbose river.jpg
  • Q11.[Network]pcap
    • 普通に見れた…
  • Q12.[Crypto]HashHashHash!
  • Q14.[PPC]並べ替えろ!

9.2 LAMP環境の構築

Redmine で色々遊んでたら一日過ぎてた。
あと、apacheの設定も色々弄った。

LAMP環境の構築

Linux, Apache, MySQL, PHP(|Perl|Python)の略らしい。
前回まででLinux(Ubuntu14.04), Apache, MySQL(Redmineインストールのついでにした)のインストールまで完了しているので、残るは言語のところ。
今回は職場で使っているCakePHP2.xのインストールまでを目標にする。

CakePHP 2.x のインストール

適当にsudo apt-get install cake-phpってやったら、入った。
けど、バージョンを見ると1.3.14だったので、やり直し*1

公式ドキュメントに書いていた(そらそうか)。 git cloneで適当な場所に最新のCakePHPを落としてきて、app/tmpに書き込み権限を与えて、apacheのドキュメントルートをapp/webrootにして終わり。

データベースとの接続とかはまだ設定してない。

*1:この過程でphp5がインストールされた