fcitxでもvi-cooperative modeもどき

みょんみょん

以前, uimの "vi-cooperative mode" を紹介しました.
しかし最近, 諸事情でQt5を扱っているのですが, なんとuimがまともにQt5をサポートしていない!!

segfault
uimの安定板にはQt5のサポートコードがまだ取り込まれておらず, また最新ブランチからビルドしてもQt5アプリをSegmentation Faultさせてしまう始末...

ってことで, fcitx, そしてArch LinuxのCommunityレポジトリにも取り込まれたfcitx-mozcに移行することにしました.
また, 当然fcitxにvi-cooperative modeは無いので, .vimrcに似たようなことができるように設定を書いてみました.

インストール

// いらない
$ yaourt -Rcns uim-mozc mozc

// こんにちわ
$ yaoutr -Sy fcitx-im fcitx-qt5 fcitx-configtool fcitx-mozc

.xprofileを編集

# fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
export DefaultIMModule=fcitx
fcitx

ログオフなり再起動

fcitxの設定

通知領域のfcitxアイコンの右クリックで設定を開く
menu

デフォルトの入力言語が日本語入力なのは鬱陶しいので, mozcよりも上に適当なキーボードの設定を追加(僕は英字配列のキーボードを使っているのでEnglishにしました)
kbd

Trigger Input Methodに日本語入力のON/OFFキーを設定
trig

Vimの設定(vi-cooperative modeもどき)

インサートモードから抜けるときにfcitx-remote -c(IMを無効にする)を実行するようにします.
augroup MyVimrcの部分はautocmdが複数回呼ばれてしまうのを防ぐための工夫です.
Vimの極め方 の "リローダブルなvimrcを書く" とかが参考になると思います.

augroup MyVimrc
  autocmd!
augroup END

" fcitx
autocmd MyVimrc InsertLeave * call system('fcitx-remote -c')
"}}}

ウェイ

日本語入力のままコマンドモードに移っても誤爆しなくなったヾ(❀╹◡╹)ノ゙

とはいえ, fcitxさん. いろいろと細かい挙動に不満が.......

  • 日本語入力中にChromiumの通知が出ると, そのまま確定され, さらに通知を出したChromium上に一旦かーそるを移動しないと再び日本語入力を有効にできない
  • 通知が出なくてもなんか突然日本語入力できなくなる
  • 通知領域のアイコン右クリックで出るメニューが若干ズレてる?

ちなみに, バージョンは4.2.8.4です.

ではでは〜

AtCoder Beginner Contest 011に挑戦してた

どーも

暇ってわけではなかったんですが, 昼間segmentation faultばっかり見てて辛かったので, 気分転換も兼ねてAtCoder Beginner Contestに初めて挑戦してみました.

Welcome to AtCoder Beginner Contest #011 - AtCoder Beginner Contest #011 | AtCoder

A - 来月は何月?

今月の月を表すN (1 <= N <= 12)が標準入力から与えられるので, 来月が何月かを出力する問題.

結果: AC http://abc011.contest.atcoder.jp/submissions/187088

#include <iostream>

int main() {
  int month;
  std::cin >> month;

  if (month < 12) {
    std::cout << month + 1 << std::endl;
  } else {
    std::cout << "1" << std::endl;
  }
}

入力された値が12より小さければ+1した値を表示, それ以外の時は1を出力しています.
予め入力される値の範囲はわかっているので細かい値のチェックは省いています.

B - 名前の確認

小文字と大文字が混ざった名前が入力されるので, 1文字目を大文字, それ以外を小文字に直して出力する問題.

結果: AC http://abc011.contest.atcoder.jp/submissions/187497

#include <iostream>

int main() {
  std::string name;
  std::cin >> name;

  std::string::iterator it = name.begin();

  if (*it >= 'a' && *it <= 'z') {
    *it -= 32;
  }

  ++it;

  for (; it != name.end(); ++it) {
    if (*it >= 'A' && *it <= 'Z') {
      *it += 32;
    }
  }

  std::cout << name << std::endl;
}

入力された名前をnameを代入し, そのイテレータitを作成.
10行目で1文字目が小文字だった場合は大文字に変換, 14行目でイテレータをひとつ進めた後, 残りの文字が大文字だったら小文字に変換して出力しています.

大文字小文字の変換はアスキーコードが云々を利用して+/-32していますが, 解説にもあるように'a' - 'A'のようにも書けますね......

C - 123引き算

ルールが少々複雑なのでリンク先参照.

結果: WA x 3

#include <iostream>

int main() {
  int num;
  int ng1, ng2, ng3;

  std::cin >> num;
  std::cin >> ng1;
  std::cin >> ng2;
  std::cin >> ng3;

  if (num == ng1 || num == ng2 || num == ng3) {
    std::cout << "NO" << std::endl;
    return 0;
  }

  for (int cnt = 100; cnt != 0; --cnt) {
    if (num == 0) {
      break;
    }

    if (((num - 3) != ng1 || (num - 3) != ng2 || (num - 3) != ng3) && ((num - 3) >= 0)) {
      num -= 3;
    } else if (((num - 2) != ng1 || (num - 2) != ng2 || (num - 2) != ng3) && ((num - 2) >= 0)) {
      num -= 2;
    } else if (((num - 1) != ng1 || (num - 1) != ng2 || (num - 1) != ng3) && ((num - 1) >= 0)) {
      num -= 1;
    } else {
      break;
    }
  }

  if (num != 0) {
    std::cout << "NO" << std::endl;
  } else {
    std::cout << "YES" << std::endl;
  }
}

うん, 焦りすぎた.
値や演算子間違えたまま提出しちゃったり, return 1;なんて書いちゃったからRuntime Error出てたりするし, そもそも条件式がアレすぎて機能してない部分もあるし.

一旦諦めD問題を考えていたりしたので結局AC取れませんでした.

D - 大ジャンプ

これもルールが少々複雑なのでリンク先参照.

結果: 未提出

#include <iostream>
#include <cmath>

int main() {
  int n;
  int d;
  int x, y;

  std::cin >> n >> d;
  std::cin >> x >> y;

  double myon = std::pow(4, n);

  for (int cnt = n; n > 0; --n) {
}

指定されただけの深度を探索する方法が書けなかった. うん, 何となくはわかるんだけどコードが思い浮かばず完全に手が止まってた.
関数の再帰なりでイケるんだろうけど....? うーん.
そういえばこんな感じに探索するプログラムは1度も書いた覚えがないなぁ..........

まとめ

あるごりずむ力なさすぎる(。>﹏<)

ABCは結構頻繁に行われているようなので次回も挑戦したい.

C言語はこうやって教えてくれればいいなって思っただけ

どーもです

プログラミングの教育で、よく "おまじない" って使われますよね.
例えばC言語なら

#include <stdio.h>

int main(void) {
  // なんか処理

  return 0;
}

みたいなのを "おまじない" と教えられ, 「難しいからスルーしましょうね」と流されるわけです.

これっておかしくないでしょうか. 上に挙げたコードだけでもかなり重要なことが書いてあるのに.
ってことで, 僕流に "こうやって教えればいいんじゃないか" ってことを思いついたので書いてみようと思います.

まぁ僕もプヨグヤムなんてパーペキねな人じゃないんで, 「あっ、そう。」な感じで見てもらえれば.

Read More »

タイトル書くほどでもない

ども

セキュキャン、今年は諦めることにした。
先日も書いたが、主な理由はこんな感じ。

  • 応募用紙の課題が今の僕には十分に解けない
  • ↑にもわかるように明らかに前提知識が不足している
  • 仮に今年受かったとしても折角の講義を理解しきれないのでは
  • セキュキャンに参加できるのは1回だけ→今年受かってしまうともったいない
  • 辛うじてついていけそうなクラスはあるが本命でない(興味ないわけではない)
  • 「こんなギリギリにセキュキャン応募する奴おるのw」というツイート

今年は多分生まれて初めての "お盆の週に何も予定がない" という絶好のチャンスである。
しかし、今年参加してもついていけなくて苦しむだけ、そしてセキュキャンに参加できるのは1度だけ。
とても悔しいのだが、今年応募用紙を提出するのは諦めることにする。

その分、今年はセキュキャンなどについていけるレベル以上に知識をつけたいと思う。
また、今年逃したミニセキュキャン等にも積極的に参加したいと思う。

そして、来年以降は参加者募集と同時に応募用紙を提出したい、絶対に。
年齢的にあと3回しか応募することができないのが辛いが、何としても参加したい。

学校の勉強がクソとは言わないが(以前言った気もするが)、少なくとも今の自分がやりたい分野とは正反対だし、やりたいことは自分で勉強したほうが身につくのは確かだ。
いくら実践的技術者を養成する高等教育機関を名乗ってるとは言え、こんな0x10歳なってから学校でのんびり学んでるようじゃ遅かったのではないかとも思うようになってしまった。

もちろんまた留年するわけにはいかなのが現実だが、今後も本当に興味ある分野の学習を増やしていきたい。

では。

タイトル、そんなものはない

どうも
なんか学校休みなんで、さっそく12時間睡眠してしまったとさいぬです。
うん、ほんと平日寝付けなくての_(:3 」∠)_

さて、やっとですがお盆に予定がないことが確認できたんで、誰もが憧れる "セキュリティ・キャンプ全国大会2014" の応募ページを確認しました。
そして、「ふぅ、間に合った」と。

ウチの学校、せっかく国立を名乗ってる "実践的技術者を養成する高等教育機関" なんだし、こういうイベントの情報をもっと出してくれてもいいのになぁと。まぁ、そんなことは永遠に無いんでしょうけど。
僕は5月末に名古屋で開催されたらしいミニセキュキャンを逃したばかりですし、自分で調べるようにしています。
あ、2014/07/04, 05は名古屋でオープンソースカンファレンスがありますよ皆さん!

さて話がそれましたが、セキュキャンの参加資格を見たんですよね。
sc

セキュリティまたはプログラミングに関して、講習を受けられるだけの基礎知識、および積極的に取り組む姿勢を持っていること。

............

_(┐「﹃゚。)_

nai

はーーーっ

俺もう0x13歳になるんだよなぁ......

22歳以下を対象、さらに18歳以下以下を歓迎するイベントにすら参加を躊躇ってしまうようじゃホントやばいと思う。

ほんと、この学校きて3年間何やってたんだろうかと。

月曜まであるんで真剣に悩んでみますかね、まぁ応募して100%受かるとかいうイベントでは無いですが。

では