SublimeLinterでたのしいC/C++

2016.05.04追記:おそらく古すぎて使えません

覚書

目的

SublimeTextで,C++のSyntax Errorコンパイルせずに見つけたかった(AOJのため)ので,SublimeLinter-contrib-clangを,Windows7(64bit)上で使えるようにした.

手順1

http://elfcobe.hateblo.jp/entry/2014/02/01/001214
ここを見てMinGWllvm/clangとMSYSを導入する.
まだこの段階ではclangでコンパイルすることはできない*1

手順2

Clangはインクルードファイルをフルで持っているわけではないっぽいので,gccのものを使う
1.gccとg++で適当な.cファイルを -v を付けてコンパイルする.

$ gcc -v test.c
(中略)
#include "..." search starts here:
#include "..." search starts here:
 c:\mingw64\bin..\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\x86_64-w64-mingw32
(中略)
End of search list
(略)

g++でも同じことを行う.

2.これらをCPATHに設定する.~/.bashrcに,

CPATH="/c/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++"
CPATH="/c/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/x86_64-w64-mingw32":$CPATH
CPATH="/c/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include/backward":$CPATH
CPATH="/c/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include":$CPATH
CPATH="/c/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/include-fixed":$CPATH
CPATH="/c/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/include":$CPATH

export CPATH

のように追記する.
この段階でMSYSを通じてclangでコンパイルが可能になる.ただしC++はclang++を使用する.

手順3

SublimeTextのPackageControlで「SublimeLinter」と「SublimeLinter-contrib-clang」をインストールする.

手順4

1. SublimeTextの「Preferences」→「Package Settings」→「SublimeLinter」→「Settings-User」をクリックし,以下のように記述する

{
    "user": {
        "debug": true,
        "delay": 0.25,
        "error_color": "D02000",
        "gutter_theme": "Packages/SublimeLinter/gutter-themes/Default/Default.gutter-theme",
        "gutter_theme_excludes": [],
        "lint_mode": "background",
        "linters": {
            "clang": {
                "@disable": false,
                "args": [],
                "excludes": [],
                "extra_flags": "",
                "include_dirs": [
                //  .bashrcに書いたパス
                ]
            }
        },
        "mark_style": "outline",
        "no_column_highlights_line": false,
        "passive_warnings": false,
        "paths": {
            "linux": [],
            "osx": [],
            "windows": []
        },
        "python_paths": {
            "linux": [],
            "osx": [],
            "windows": []
        },
        "rc_search_limit": 3,
        "shell_timeout": 10,
        "show_errors_on_save": false,
        "show_marks_in_minimap": true,
        "syntax_map": {
            "html (django)": "html",
            "html (rails)": "html",
            "html 5": "html",
            "php": "html",
            "python django": "python"
        },
        "warning_color": "DDB700",
        "wrap_find": true
    }
}

たぶん"python_paths"はいらない.

2. SublimeTextを再起動

終了

困ったときはLinterをデバッグモードにして動かしてみると良い.
その際には,さっきのユーザー設定を開いて,

"linters": {
            "clang": {
                "@disable": false,
                "args": [],
                "excludes": [],
                "extra_flags": "",
                "include_dirs": []
            }
        }

ここの"extra_frags"に"-v"を入れて,SublimeTextのコンソールを開くと,どこでエラーを吐いてるかわかる.

感想

Clangがまだあまり広まってないというか浸透しきっていないような感じ*2だったので,情報を探すのが大変だった.



しかし非常に便利なので対価としてかなり有益だったと思う.

あと"Clang"なのか"clang"なのかわからん.

*1:マシンの状態によるかもしれない

*2:主観

高専をやめる話

こんにちは Twitter上でも書いてましたが,私は高専を3月末で退学します.

退学Advent Calendarなるものがあるらしいですがまだ退学したわけではないので登録してません.

退学する理由,および現状など書きます.
なお、この記事はあくまで私の個人的な意見や偏見に基づくものであり、某高専の学生を代表する意見ではないことにご注意ください.全体的に私がアウトローであるので,他の人は違う可能性が大いにあります.
また、この記事を鵜呑みにすることはおすすめしません.

I'm in 高専

入学前

親父の影響で昔からコンピュータに触れており,将来はサーバーインフラを扱う仕事に就きたいと思っていた
中3の時、普通科高校に行くか工業高校に行くか高専に行くかという選択肢があった 早く学んで社会に出たかった私は高専を選んだ
学科はオープンキャンパスへ行った際に,"コンピュータ"を学べるという触れ込みをしていたところがあったのでそこにした
数学が苦手だったので英語を得点源とする意味不明な方針で受かった

入学後

学年が上がるごとに専門科目が増えるという説明があった
一年生の段階では、「C言語の授業があるのでここから情報系の授業も増えていくのだろうな」と考えていた

二年生になると"工場実習"が時間割に登場した しかし情報系科目(1科目)はいまだC言語を扱い続け、何かがおかしいと思い始めた*1
かねてより興味があった高専プロコンに参加した 三年生の先輩が一緒のチームになったが,習っているはずのCですら私よりも書けない人しかいなかった

三年生になると"材料力学"が増えた
ここで中学校の時の学科選択のミスを悟った
つまりこの科はロボットに搭載する"マイクロコンピュータ”を制御する科であり、ぶっちゃけた話が,計算機工学関係の授業はほぼおまけのようなものだったのだ
受けたかったカリキュラムなど存在しなかったのだというショックから、学校へ行く気力もなくなり、大学への進路変更を考え,親および担任に相談した

相談した結果,というより自分でいろいろ考えた結果,3年で高専をやめ,他大学の情報工学科へ進学しようということになった(した)

そして現在に至る

高専中退勢にとって受験は大変だ
高校の学習指導要領が適用されない高専では,一般科目を浅い部分しか取り扱わない
数Iの「集合と論理」,数Aの「確率」,数Bの「確率分布」,有機化学,世界史,地学などは習わない*2
他の範囲も極めて浅い部分しか学習しない
したがって受験勉強は高校3年分を半分ほど独学でやらなければならない
模試の成績が振るわず,ほぼ一浪が決まっているがこれからどうなるかは私にもわからない
最近はモンハンのナルガクルガが非常に可愛く見えてきて,擬人化してお嫁さんにしたいと思っていたりする

私は進学先に希望を持っている
しかしいろいろ調べてみたところ,大学でも普通科高校からの進学者が多いために講義の内容が低レベルであることが多いらしい(大学による)*3
結局自分のレベルでやっていくには独学が一番良いということがわかりつつある
それでも進学すれば高専にいるよりは少しはマシになるだろう たぶん

中学の時に高専へ行かない道を選んでいたらどんな人生だっただろうか
想像するだけ無駄である

高専を目指している人たちへ

まずは自分が本当に高専で学習するべきなのかを考えましょう.
ただ「校則がゆるいから」*4という理由で目指すのはおすすめしません.なぜなら高専ではとにかく専門科目に重点を置いており,授業の内容がそれなりに好きでなければやってられないからです.レポート*5も学校や学科によって違いますが非常に多いです.私のいる学科では週1手書き10枚がザラです.*6
このへんは近くの高専生のおにいさんおねえさん方へ聞いてください.なるべく多くの人に聞くのがよいでしょう.
中学校の先生の話は正直信じないほうがいいです.

また,高専の授業は人を選びます.あわないと思ったらその時から3年次での進学を考えましょう.


なお,高専は,「数学および物理の高校の範囲を2年間で終わらせる」と宣伝していることがありますが,授業の内容を薄くして終了を早くするという仕掛け*7を使っているので,授業で全ての範囲を網羅するわけではありません.注意しましょう.

学科選びの際にはシラバス(授業計画表)を見ましょう.
たいていの高専ではシラバスをweb上で公開しています.
どの学科がどの教科でどんなことをやっているのかがよくわかります.
「情報系の授業を求めて来たのに,カリキュラムに組み込まれていない」ということが防げます.

自分の学びたい分野と学科の授業がマッチしている高専生は最強です.

謝辞

ここまで徹底的に,高専がつらいということばかり書いてきましたが,私はこの学校に入った事自体はあまり悔いていません.高専プロコンやPCKに出たり,合唱がめっちゃ楽しい感じになったり,笑福で腹一杯になったり,良い友人たちと出会うという経験は,この学校に入らなければできなかったことでした.みんなありがとう.

これから死ぬみたいな書き方ですが3月末までは高専生です.
各位よろしくお願いします.

*1:配列での文字列処理だけで定期テストが作られるという異常な進行速度だった

*2:学校によって異なる

*3:人にもよる

*4:学校によって異なる

*5:実験の結果や考察を書いて提出する宿題

*6:レポート作成にPCの使用が禁止されている

*7:特に数学に顕著

Androidを英語設定にしたまま日本語をきれいなフォントで表示する

2016/05/26 追記

シンタックスハイライトとか要らんやろみたいなあたりをどうにかしたり常識の記述をどうにかした.読み直すとパーミッションnoobだったためなのか,chmod 777とかやってて完全にガバガバなのでもう少しどうにかならんかったのかという感じです.つか書いてからもう2年弱経ってるので信用しないほうが良いです.
追記ここまで.



お元気でしょうか
私は死んでます

久しぶりにこういう記事書くので緊張している

そもそも

英語を勉強している人に携帯を英語表記に設定している人が多かったのでまねしようとしたら,日本語フォントが中華フォントになった

しかし,Androidに対する知見が少ないために,元のフォントに戻す方法を知らなかったので調べた

手順

前提

  • root権限取得済み
  • adb shellを使える状態
  • 2014/11/11現在の情報 今後xmlファイルの内容が変更される可能性がある

環境として Galaxy Nexus(SC-04D)/ParanoidAndroid 4.6-BETA6 を用いた.

前座
Androidがフォントの読み込む際,優先順位は

/system/etc/fallback_font.xml

に記述されている順である.
システム言語が英語に設定されている場合,最下部には

<family>
        <fileset>
            <file>DroidSansFallback.ttf</file>
        </fileset>
</family>
<family>
        <fileset>
            <file lang="ja">MTLmr3m.ttf</file>
        </fileset>
</family>

と書いてある.通常,日本語設定では

<file lang="ja">MTLmr3m.ttf</file>

が読まれ,日本語はきれいなモトヤLマルベリ3等幅でレンダリングされる.
しかし,英語設定の場合ではその上の

<file>DroidSansFallback.ttf</file>

が読まれ,クソみたいなフォントでレンダリングされる.
今回はこの記述を改変する.

リマウント
通常ではAndroidの/systemは以下のパーミッションでマウントされる.

$ ls -l
...
drwxr-xr-x root root <タイムスタンプ> system
...

そこで,

$ su
# mount -o rw,remount -t ext4 /dev/block/foobar/system /system

これで/systemをいじれるようになった.
なお,ファイルシステムおよびfoobarの部分は引数なしのmountで確認できる.

この状態で放置するのはかなり恐ろしいことのような気がする.インターネット接続を切断しておいたほうが良いかもしれない.

ファイルいじり
目標のファイルは/system/etcにある.

# chmod 777 /system/etc

を叩いて/system/etcを読み書きできるようにする.モード指定は755でも差支えないだろう.
ちなみにadb shellでは文字列によるモード指定は使えないようである.*1

次に目標のファイルをPC上に持ってくる.別のコマンドプロンプト

>adb pull /system/etc/fallback_fonts.xml

を叩けば,adbを動かしているフォルダ(この環境ではsdk/platform-tools)にファイルがコピーされる.
これをエディタで開いて最下部を見ると,冒頭で書いたようになっている.

<family>
        <fileset>
            <file>DroidSansFallback.ttf</file>
        </fileset>
</family>
<family>
        <fileset>
            <file lang="ja">MTLmr3m.ttf</file>
        </fileset>
</family>

これを,

<family>
        <fileset>
            <file>MTLmr3m.ttf</file>
        </fileset>
    </family>
    <family>
        <fileset>
            <file>DroidSansFallback.ttf</file>
        </fileset>
</family>
<family>
        <fileset>
            <file lang="ja">MTLmr3m.ttf</file>
        </fileset>
</family>

とすれば,モトヤマルベリがDroidSansFallbackよりも先に読み込まれる.

後片付け
先ほど編集したファイルを元の場所に戻す.コマンドプロンプトで,

>adb push fallback_fonts.xml /system/etc

とした後,ファイルの属性を整える.

# chmod 644 /system/etc/fallback_fonts.xml
# chown root.root /system/etc/fallback_fonts.xml

/system/etcも元に戻す.

# chmod 755 /system/etc

再起動

# sync
# reboot
終了

調べるのにめっちゃ時間がかかった
2年位前まではfallback_fontsは言語の種類だけあったらしい(言語設定によって変わっていた?)が,今は一つのファイルに集約されているので混乱した
ちなみにキャリア公式のロムなら/system/vendor/の中にもあるらしく,そこも書き換えなければならないらしいのでめんどい
ここまでするならむしろ普通に英語勉強したほうが良い

PCK2014

パソコン甲子園出場者のみなさん,お疲れ様でした
本選出場者のみなさん,頑張ってください
俺はもう疲れたよ...

5問目がボーダーかと思ってたら実は4問目がボーダーだったみたいですね

1問目 問題印刷中に解法を言われてマジで焦る
というか開始3分位でacceptもらってる団体どういうことだよ
2問目 えっこれはなんかえらく簡単ですね
3問目 あっ!この問題過去問でやったことある!→WA1回

ここまで10分

4問目 なぜかWA.飛ばす→ 最後の一時間をすべて注ぐものの完全にダメ
5問目以降 !!??!?????

相方が3ヶ月前までプログラミングの初心者だったのに,当日には1問目を見た瞬間に解法を言ってくれるくらいに成長していたので最強
俺は結局探索を身につけられなかったので雑魚
おかげで5問目以降すべてできなかった感じになった

しかしなぜ4問目でWAが出るんだ...ここで解けていたら激本戦出場ユウテワンチャンアルッショコレ状態だったんだが

実力不足が否めない

おわり

文字列処理できない雑魚

それは私のことだ
C++のコードでは暗黙にusing namespace stdです,あとmain関数は省略

おおよそここから引用しました*1

復習

Cで文字列を扱うとき

#include "stdio"
char s[100];
scanf("%s", s);

のようにする

C++バージョン
#include <string>
string str;

C++では終端をnull文字で管理するのではなく文字数で管理するらしい,
よって最初に文字数を決める必要はないので柔軟

使えそうな関数

stringではいろいろ関数が使える
ここでは競技プロコンで使えそうなやつを列挙

#include <string>
string str = "hoge";
int a  = 0;
bool b;

a = str.length(); //aに文字列の文字数を格納
a = str.size();   //上と宣言まで同じ 使い分けはよくわからない
b = str.empty();  //空の文字列かどうかを判定
str.reserve(new_size);  //文字列をnew_sizeに変更(new_sizeはsize_type型)

ちなみにsize_type型ってのは大抵size_t(unsignded int)らしい*2

文字列から数値への変換はいろいろありすぎて書くのが面倒くさい
<cstdlib>のatoiとか<sstream>のisstringstreamとかいろいろあるらしいが詳しい使い方はよくわかりません*3

おわり

なんかしらんが最近他の高専の方々とつながりができた,たのしい

夏ですね

おはようございません

パソコン甲子園予選が2週間後に迫る中,みなさんいかがお過ごしでしょうか
模擬予選をしたが4問しか解けずこれで大丈夫なのかという感じ

今年が地元(から半径30km以内)で浴衣JKを見られる最後のチャンスだったけど見られなさそうだしつらすぎる




どう考えても後者の日本語がヤバイ

引っ込み思案を治したい

コーディング速度を鍛えたい

以上

あ,マーニー最高でした 原作ほしいです

9/2追記
いろいろあったが浴衣JKと祭りに行けた