17歳からのプログラミング入門。

情報系の門の先で起きたことをたまにメモ。

コンマ以下に生きる人のためのかっこいい時計のご紹介

おはようございます。 朝です。気づいたら朝です。

今日でインターンシップに来てから3週間になりますが、今日ももれなくお仕事です。 職場で寝てしまっても優しく布団をかけてくれる社員さんがいることを願っています。


さて、今日は、時の流れを感じられる、おしゃれな時計のご紹介です。

f:id:Iruyan_Zak:20160909064732g:plain

良いですよね、良さを感じますよね、ね? デスクトップにおいておくだけでいつでも時間に追われる感覚を味わえます。

・・・え?そんなことはいいから早く作り方を教えろって?

わかりました。 以下がプログラムです。bash上で動作しています。

#! /bin/bash

while true
do
# sleep 0.32
echo -ne \\r$(date +%T.%N)
done

ね、簡単でしょ? 一応説明しておきます。

  • while true
    while は、後続のコマンドが 0 (真)を返し続ける限り、 dodone に囲まれた内容を実行します。
    true は、すぐに 0 を返すだけの何もしないコマンドです。
    よってこれは無限ループを表します。
  • echo -ne \\r
    echo は引数をすべて(オプションを除く)標準出力に吐き出します。
    -n のオプションは、出力後に改行を行いません。
    -e のオプションは、エスケープシーケンスの出力を有効にします。
    \\r 、すなわち '\r' は、キャリッジリターンと言って、カーソル位置を行頭に戻します。
    よって、ここまでで、「出力を同じ行の行頭から流すことで書き換えを実現」したことになります。
  • $(date +%T.%N)
    $(command args) は、 command args を実行した時の標準出力に置き換えられます。
    例えば、 echo $(echo hoge) は、
    $(echo hoge)echo hoge の標準出力 hoge に置き換えられ、
    結果として全体は echo hoge と等価になります。
    今回は $(date +%T.%N)date +%T.%N の標準出力に置き換えられます。
    date コマンドは、現在の時刻を表示したり設定したりできるコマンドです。
    + で始まるフォーマット指定文字列を引数に与えてあげると、現在の時刻の表示方法をカスタマイズすることができます。
    今回は +%T.%N なので、 HH:MM:SS.mmmμμμnnn という形式で時刻を表示してくれます。

つまり、無限に同じ行に時刻を吐き出し続けることでめまぐるしく変わるナノ秒単位の時計を実現している、ということなのです。(実際ナノ秒までの精度はないはず)

ところで、お察しの通りめちゃくちゃ重いです。無限ループ回してますからね。 ということで、コメントアウトしている sleep コマンドを挿入することで、処理回数を減らすことができます。 かっこよさは少し減りますが、CPU使用率は結構削れます。

それでは、良いシェルライフを!

高専カンファレンスlol ブース発表担当運営として感じたこと #kosenconf

高専カンファレンスlol(以下、lol)が終わって数日が経ちます。

いるやんです。おはようございます。

先に伝言です。

運営からこれから高専カンファを開く人に対して言っておきたいこと

  • Slack使うなら10000件制限すぐに来るので有料機能を使うか、ログをうまいことバックアップすることを推奨します
  • フルスクラッチで事務仕事(メール文案を考える)すると運営のコストが跳ね上がるので、他のカンファレンスの情報を出来るだけ流用しましょう
  • カンファ直前は見えなかったタスクが急に発生するのでそれまでに必要なことは終了させておきましょう(今回は緊急タスクが本当に発生した)

さて、僕は運営をしてたわけなんですが、取り急ぎ、『ブース発表』の話をしないといけないなと感じたので書き留めます。 高専カンファレンスの説明はこのブログで行うと冗長になるので、適宜 公式サイト を御覧ください。

続きを読む

「明石高専 みつば連合」の活動を開始しました

表題のとおりです。

明石高専 みつば連合はTwitterで活動しています。

明石高専 みつば連合 (@akashi_mitsuba) | Twitter

 

「明石高専 みつばの会」とはなんぞやということですが、設立の経緯としては以下の様なものです。

 

0. 明石高専の情報系の部活は「情報工学研究部(情研)」「ゲーム創作研究部(GCC)」「Web製作研究会」の3つがある

1. 例年、偶数年は情研とGCCの入部者が少ない(入ったとしても逃げてしまう)

2. その原因は情報系の部活が何をしているかわかりにくいからかも知れない

3. そもそも情報系なんてつながってるんだからどこから入ってもどこでも行けるようにしておくべきでは

4. じゃあ逃げた部員を他の部活に吸収させたらいい感じなのでは

5. よし、とりあえずWeb研も巻き込んじゃえ

 

って感じです。

活動内容としては

1. 情研・GCC・Web研の活動内容・時間の宣伝

2. 主に新入生向けに質問にこたえるサービス

3. 学内の情報系イベントの宣伝

を予定しています。

 

さて、どれくらい機能するんですかねえ。

大阪Effective Modern C++勉強会 #4

大阪Effective Modern C++勉強会 #4に参加してきました。今回の参加者は8人です。

今回のメインテーマは「autoが便利な時・便利じゃない時」と「初期化の書き方」です。 前回に比べて読み進めるのは難しくなってきてますね・・・はい。

ただ、不思議なことに今回のトピックには僕がその短いC++歴で引っかかった内容が多く紹介されており、つらい気持ちになりました。 僕が昔踏んで、今日読んだ範囲に紹介されていたのは以下のようなものです。

#include<bits/stdc++.h>
int main(){
    std::unordered_map<std::string, int> mp{{"hoge", 1}, {"fuga", 3}};

    for(std::pair<std::string, int>&& p : mp){
        ++p.second;
    }

    std::cout << mp["hoge"] << " , "<< mp["fuga"] << std::endl; //output "1 , 3"
}

これはstd::unordered_map<std::string, int>の要素がstd::pair<const std::string, int>型であることに由来して起こるもので、 いくら&&をつけていようが、const std::stringをstringに落とすには新しいオブジェクトを作るしかないので、 ++p.secondは一時的に生成されたオブジェクトに実行され、mpの要素のpairには適用されない、ということらしいです。

ちなみに、生半可な知識でstd::pair<std::string, int>&という風に昔書いてて、コンパイルエラーを食らいましたね。 理由はconstが・・・っていう上のやつです。 知識は今も生半可ですが、それでもちょっとずつはC++力がついてきているのかなあ・・・??って思ってます。まだまだまだまだだけど。

前回の繰り返しですが、読書会に関わった全ての型に感謝です。

さて次回は2/15ということで、期末試験前日です。気合入れて読書会行かなきゃ。

このあたりで僕は、精度を落とす専用のcastについて調べてきます。

大阪Effective Modern C++勉強会 #3

大阪Effective Modern C++勉強会 #3に参加してきました。

会の参加者は全部で11人でしたが、その全員がC++の熟達者というわけではない(自称)らしいです。

 

会は、ゆっくり本を読みながらその内容について駄弁るという感じで、あまりC++に詳しくない僕でも和やかな雰囲気を楽しむことができました。

Effective Modern C++は良書ということなんですが、「decltype!見たことあるぞ!」レベルの僕には少し難しい本です。が、会話の中でより実践的な手法を伝えてくださったり、本の内容の要約・補足をしてくださったので、とても理解が進みました。

今回は約70分で12ページほど読み進めました。現在34ページ目まで読んでいて、次回の読書会は2/1(月)とのことです。

ぜひこの機会にEffective Modern C++を買って、グランフロント大阪で読書会に参加しましょう。

http://www.amazon.co.jp/dp/4873117364/ref=cm_sw_r_tw_dp_uApNwb0ZVV04X

#3では20歳以下の方には2000円までの交通費支給がありました。めっちゃ嬉しい。

 

読書会に関わった全ての型、および読書会を紹介してくださったいなむのみたまのかみ先生に厚く御礼を申し上げます。

 

このあたりで僕はdeprecatedを用いたコンパイラ警告による型推論結果の表示について調べてきます。