プログラミング言語を作る (1)

はじめに 学習目的でスクリプト言語を作っている。 github.com日々使っている言語も仕組みを知らなければ高いパフォーマンスを出せないし、仕組みを知りたければ自分で作ってみるのが一番だ。単純な四則演算からはじめて、これまでに以下の機能を実装した。 …

MacでPTHREAD_PROCESS_SHAREDは使えない

Mac

preforkサーバのようにプロセス間でロック機構を使いたい場合には、fcntl関数によるPosixファイルロックやディスクリプタパッシングなどの方法が用いられる。 pthreadの機能を使ったスレッドロックもその内の一つで、通常単一プロセスのスレッド間に用いるス…

HTTPServerのデーモンプロセス化

HTTPServerはクライアントからのリクエストを待ち受けて処理するタイプのプログラムなので、特定のターミナルに紐付けるのではなく、起動後は独立して動作するデーモンプロセスとする必要がある。github.comデーモンプロセスにする場合、以下のような手順で…

Couchbase Server 4.0をCentOS7にインストールする

Couchbase Couchbaseは分散ドキュメントを扱うNoSQLである。 主な特徴としては、 RAMベースでの高速な動作に加え非同期でのストレージ保存 (分離レベルを設定可能) キーバリュー型のシンプルなドキュメントストア構造 ノードのクラスタ追加によるリニアなス…

Macでのsyslogの利用

はじめに プログラム開発時のログ出力にはsyslog関数を使うと便利である。 特に、特定のターミナルと結びつかないデーモンプログラムの開発では、標準出力へのログ出力を行うことはできないため、syslogは重宝する。 ところが、このsyslogをMacで使う時は少…

簡易ログ解析

はじめに ウェブサービスをはじめとしたサーバを伴うアプリの運用では、ログの解析が必要となる場面が非常に多くある。 KPI などの集計の他、障害時対応で、限られた時間でアクセスログから目的のデータを抽出しなければならない、といったエンジニアとして…

NSTextViewの末尾に文字を追加する方法

NSTextViewに文字列を追加しようと調べると、 func insertText(_ insertString: AnyObject) が見つかる。 だが、このメソッドは OS X v10.11 で deprecated となっていて、使うべきではない。 NSTextInputClient NSTextViewのリファレンスを見ると、NSTextVi…

SwiftでC++のコードを使う方法

SwiftでC++のコードを使う場合、Objective-C++でラップして呼び出す必要がある。具体的には以下の手順が必要となる。 C++ファイル、C++ヘッダファイルを作成 C++をラップするObjective-C++ファイル、Objective-C++ヘッダファイルを作成 ObjectiveC++ブリッジ…

スマホネイティブゲームのチート対策

はじめに オンラインゲームの開発では、常にチート対策を考えなければならない。 特にスマホネイティブゲームの場合、クライアント解析、通信改竄、サーバ脆弱性への攻撃と、ブラウザゲームと比べてもアタックポイントの範囲が広く、常にチート、及びセキュ…

Arduino Ethernet Shield 2

Arduino みたいなガジェットは、とにかくインプットとアウトプットの豊富さ、そしてその組み合わせによって実現できるユースケースが重要で、むしろそれが全てだと思う。 この点、インターネットへの接続というのは、入力においても出力においても最大のリソ…

HTTPサーバを作る

きっかけ 最近、HTTPサーバを作っている。 と言っても、商用利用を考えているわけではなくて、学習目的だ。 何事も理解したいと思ったら自分で作ってみるのが一番だし、学習にはなるべく低レイヤーの方が良い。 明確にゴールを決めているわけではないけど、…

Homebrewが壊れたら

はじめに OS X のパッケージマネージャーといえば、もちろん Homebrew だ。 Homebrew — OS X用パッケージマネージャー開発ツールの管理を非常に便利に行うことができる。ところが、この Homebrew、ふとした拍子によく壊れる (気がする) 。 特に、OS のアップ…

nginxのリバースプロキシ設定

はじめに nginxは、Webサーバであると同時にリバースプロキシとしても使用することができる。 例えば 静的コンテンツはそのままnginxで返し、動的な処理はapacheへ回す フロントにnginxを配置し、LoadBalancerとしてリクエストを各Webサーバへ振り分ける と…

PHP5.6へZend APCuをインストールする

はじめに PHPではオペコードのキャッシュに、ver5.4まではAPC (Alternative PHP Cache)、ver5.5からはOPcacheが採用されている。 OPcacheはAPCに比べパフォーマンス面での改善が図られているが、逆にAPCでは可能だった、コードキャッシュ以外の任意のデータ…

Makefileでワイルドカードを使う方法

はじめに 最近、C言語でコードを書くことが多く、頻繁にmakeコマンドを使っている。 ただ、単純な設定だと、ファイルを追加するごとにMakefileにもファイル名を追記しなければならず、この操作が大変煩わしい。 そこで、Makefileの勉強を兼ねて、これを自動…

ミニ四駆ラップタイマーを作った

きっかけ 前回ミニ四駆のコースを自作したので、Arduinoでラップタイマーを作った。 ミニ四駆をチューンアップする時の指標にしたい。youtu.be以下のようにシリアルモニタにタイムが記録される。 作り方 用意するもの 今回使ったのは、Arduino Unoと超音波セ…

ミニ四駆のコース制作

きっかけ ミニ四駆を思い切り走らせたい! と思い、早2年。 何度もコースを買おうと思いながら、お金だったり設置場所だったりの都合がつかなくて、なんだかんだ躊躇してきた。 それならば自作だ!と思い、調べてみると、軒並み材料費1,000円、作業時間6〜7…