2015年3月15日日曜日

levelDBを使う。

はじめは、C++11のハッシュテーブル(unordered_map)を使おうと思ったのだが、
永続化の処理を書いたりする必要があるなど、大変にプログラムを書くのに時間が掛かる事が判明したので、
先人の書いた素晴らしいコードを利用させてもらおうと思う。(しかも自分で書くより処理が速い。はず。)

環境:
win7x64にインストールしたVirtualBox上の
CentOS7

LevelDBをつかってみた
を大いに参考にした……のに つまずいた。



geditのショートカットキーからbuildできなかった。

[致命的エラー: /usr/local/include/leveldb/db.h: 許可がありません]
→権限が足りないらしいので、スーパーユーザーになる必要がある。
→[makefile]を作成したディレクトリ上で、右クリック→[端末の中に開く(E)]
→[su]コマンドでsuper userになる。
→[make]コマンドでbuild

あるいは、始めからrootでログインしておけばいけるかもしれない。
今度試してみる。
→できた。(当然ではあるが)


参考にしたサイトで、一部
int main(int argc, char *argv) {
となっているが、たぶん
int main(int argc, char *argv[]) {
かな?


[`leveldb::Options::Options()' に対する定義されていない参照です]
[`leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)' に対する定義されていない参照です]
→コンパイルオプションを付けるのを忘れていた。
[ /usr/local/lib/libleveldb.a -lpthread -I /usr/local/include/leveldb/ ]
を追加。

2015年2月25日水曜日

bloggerで一日の間にメール投稿できる限度数

C++ による socket通信 でBloggerにメールで投稿するテストをしていたら、
何故か投稿できない代わりに、メールボックスに以下のメッセージが返信された。


Delivery to the following recipient failed permanently:

     XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXX@blogger.com

Technical details of permanent failure:
You have exceeded the the allowable number of posts without solving a captcha.

----- Original message -----

~省略~

----- End of message -----


要するに、
「 (人間である事を証明するための) 画像認証無しに許されている投稿の数の限度を超過しました。」
と言っており、投稿でき無くなった。

実際の所、Bloggerの管理ページを開いて、投稿しようとすると、
画像認証ができ来て、それをパスすると上手く行く。

(ただ、残念ながら、メールでの投稿はこの後も失敗したので、
どうやら制限が解除されるまで待つしか無さそうだ。)

何処かのページの1日あたり50投稿が限度と書いてあったので、
今度試す時に実際に数えてみようと思う。(送信履歴を消してしまった。)
→50でした。

2015年2月18日水曜日

Unicode処理②::UTF16(Unicode)をUTF8に変換する。

Unicode : 文字コードの一種。

UTF16 , UTF8 : Unicodeをファイルに保存する場合の保存方法(バイナリ値)。


[例]=================================================

あ : Unicode値 : 0x3042

は、UTF16なら、
   big endian : 0x30 , 0x42
little endian : 0x42 , 0x30

↓変換……したい。

あ : UTF8なら、0xE3  81  82
(UTF8では、仕様上big endian も little endianも関係無い。)

====================================================

(14) UTF-16からUTF-8への文字コード変換
を参考にして変換してみる。(変換表はwikiのUTF-8にもある。)

2015年2月17日火曜日

Unicode処理①::Unicode値をUTF16(エスケープしたサロゲートペア)へ変換(分解)する。

ちょっと頭が弱くて、
サロゲートペア入門
の記事がすぐに理解できなかったのでメモ。

参考資料:文字コードに関する覚え書きと実験

webでサロゲートペアに対応しているエンコーダ&デコーダ
:Unicodeエスケープシーケンス変換ツール


[例]==========================================



 ( Unicode値 : 0x20B9F ) ← UTF16で、エスケープするとサロゲートペアになる文字。



↓エスケープ・シーケンスに変換    ↑デーコード

                 \ud842\udf9f

=============================================(サロゲートペア入門のページの例より)

処理としては以下の手順になります。

2015年1月25日日曜日

C++再入門②_ダブルポインタを回避したい。

Googleで「C言語 ダブルポインタ」で検索すると、
ダブルポインタについて、非常に分かり易く説明してくれているサイト

ダブルポインタで分からなくなる度にこのページを見直す訳であるが、
「そもそもどうしても変数の先頭に*付けないといけないの?」
と疑問が浮かぶ。


プログラムを書く時、始めはmain関数に押し込んで、「取りあえず動く」事を確認し、
それから、まとまった処理毎に関数化してmain関数を軽くしていく事が多い。(少なくとも、私は……。

しかし、そのやり方だと、
関数化する際、非常に面倒になってくるのは、値の受け渡しも去る事ながら、
ダブルポインタを使わないと値を参照できないようになってしまう場合だろう。

正直、コードが長くなると、一々変数ごとに「*」を付けるのは、
非常に億劫であるだけでなく、ミスし易い大変な作業となる。

そこで、以下の様にした。

2015年1月12日月曜日

C++再入門①_文字列操作編

C++、一度覚えたけど、結局C言語で事足りる事が多かったため、
使わないでいたら忘れたので、復習。

実行環境はwin7 x64 visual studio 2012

using namespace std;
とは何か?
using namespace std;の是非


using namespace std;を宣言した場合。



2015年1月7日水曜日

仮想にCentOS7インストール&初期設定のメモ。

情弱な私には お気に入りバーと「Ctrl + K」の無いChromeは使いにくいので、IEばかり。(時々Chrome
しかし、「Ctrl + D」→「Enter」(こちらはChromeにもある。)が便利過ぎて、
IEのお気に入りが散らかってきたので、記事にして消そうかと……。



VMWare PlayerとVirtualBoxの違い。
Yahoo!知恵袋のここを参考にした。
→結論として、営利・非営利を問わず無料で使える「VirtualBox」を選択。

一番気になっていたのは「VirtualBox」がマルチCPUに対応しているか、だったが、問題無く設定できた。

今回は
http://www.centos.org/
からCentOS7をダウンロード。

以下を参考にCentOS7をインストールする。
DVDのisoを選択し再起動する際、一度電源を落とし、CPUのコア数を増やしてから再起動する方が、インストールが高速になるかもしれない。
(後から思っただけでやってないので注意。)
インストール時最小構成にすると、端末(windowsのdos窓みたいなやつ)しか使えないので注意。デスクトップには、今回GONOME??を選択しておいた。(あとコード組むために入れるので開発環境)
VirtualBoxで作成した仮想マシンにLinuxを導入してみよう(1)