WSLからMatplotlibを用いて画像が表示されない話

はじめに

  • Opencvを使って表示できてよかった
  • その後Matplotlibを使うときに問題が起きた

エラー

jpgファイルを読み込んで表示させるプログラムで

$ python3.6 demoMatplotlib.py
Traceback (most recent call last):
  File "demoMatplotlib.py", line 2, in <module>
    img = plt.imread('img/flash/ambient.jpg')
  File "/usr/local/lib/python3.6/dist-packages/matplotlib/pyplot.py", line 2381, in imread
    return _imread(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/matplotlib/image.py", line 1360, in imread
    'more images' % list(handlers))
ValueError: Only know how to handle extensions: ['png']; with Pillow installed matplotlib can handle more images
  • pngじゃないとダメみたいなことを言われた

解決

stackoverflow

pip install pillow
  • これでjpgでも対応できた

終わりに

  • 割とすぐ見つかってよかった

WSLのpython3.6でapt_pkgがないとか言われる話

はじめに

  • 課外活動でpython3.6 + Opencv3.2 を使う機会があった
  • import cv2は普通に動作したが、関数呼び出し時にエラーが出た

エラー

$ python3.6 demoOpenCV.py
OpenCV(3.4.1) Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /io/opencv/modules/highgui/src/window.cpp, line 356
Traceback (most recent call last):
  File "demoOpenCV.py", line 4, in <module>
    cv2.imshow('img',img)
cv2.error: OpenCV(3.4.1) /io/opencv/modules/highgui/src/window.cpp:356: error: (-215) size.width>0 && size.height>0 in function imshow

Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "demoOpenCV.py", line 4, in <module>
    cv2.imshow('img',img)
cv2.error: OpenCV(3.4.1) /io/opencv/modules/highgui/src/window.cpp:356: error: (-215) size.width>0 && size.height>0 in function imshow
  • ModuleNotFoundError: No module named 'apt_pkg' を解決すれば良さげ

解決

stackoverflow

cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so

すると動く、ということで実行してみると

  • apt_pkg.cpython-34m-i386-linux-gnu.soはなかった
  • ls で確認すると apt_pkg.cpython-35m-x86_64-linux-gnu.so というよく似た名前があった
  • こいつをcpしてプログラムを動作させた
$ python3.6 demoOpenCV.py
: cannot connect to X server
  • エラーが変わってX server を入れたら良さげ

X server

  • Xmingを入れた
  • 起動後ターミナル内で export DISPLAY=:0.0 を入力
  • その後、プログラムを動作させると無事動いた

終わりに

  • 色々なサイトを眺めたので一つにまとめた
  • 他のエラーが出ないことを祈る

nsecの処理時間をshellで測る

はじめに

  • 大きな差がない時間を比較する課題があった
  • time コマンドだと差が無くて泣いた

調査

  • cやc++のライブラリを使う方法がたくさん出てきた
    • 「違う、そうじゃない」となった

解決

知り合いが教えてくれた

#!/bin/bash
s=$(date +%s.%6N)
eval "$@"
t=$(date +%s.%6N)
echo "scale=1; $t - $s"|bc
  • これを保存(ex.hoge.sh)
  • Shellで./hoge.sh ./hogehoge.c のようにする
  • これでnsecからμsecまでを取ったが表示される

さいごに

  • ネットで調べたけど全く出てこなかったので書いた
  • 次に使うときはいつになるだろうか...

git メモ

はじめに

  • 研究室内でgitの組織アカウントが作られた。
  • 研究のソース共有に便利そう 以下のような理由で使おうと思った

下準備

さすがにpublicで研究のコードを張り付けることはダメだろうということで

  • GitHub Educationに申請をした。
  • apt install gitした、既に入ってた

登録

メールアドレス

git config --global user.email "[メールアドレス]"

ユーザ名

git config --global user.name "[ユーザ名]"

鍵認証の登録

作ってない場合は ssh-keygen で作る。(権限注意)

  • 公開鍵
  • 秘密鍵
    • .ssh/の直下に保存
  • 動作確認
    • ssh -T git@github.com
    • successfully authenticated とか書いてればok

使う

初期化

mkdir hogehoge
cd hogehoge
git init 
  • .git が追加される

追加

  • 適当にファイルを作る
    • git status
      • new file とか modified: とかがでてgit addしてっていわれる
    • git add .
      • 緑色に変わる
    • git commit -m "[メッセージ]"
      • 一言コメントを残せる
    • git push origin master
      • masterが更新される

最後に

申請結果が帰ってきたらprivateリポジトリ作ったり、 組織アカウントにforkしたりを覚えたりする予定。

ICTSC9予選に参加しました

はじめに

先日、ICTSC9の予選に参加しました。 問題は問4を中心に少し問3解きました。問4の解いた方法、言い訳を書こうと思います。
問題

問4. Network Addresses

問題説明

あなたはC社に勤めています。あなたの同僚でネットワーク担当の丘さんは、パケットの各ヘッダ にセットされた送信元・宛先アドレスがよくわからないと質問してきました。ネットワーク構成 図を参照しながら、下記の通信で使用される送信元・宛先アドレスを教えてあげてください。

環境情報

L2:Ethernet、L3:IPを使用した環境のネットワークです。 ネットワーク内のすべての端末同士で疎通性は保証されています。 OSPFのDRはRouter Aです。 DHCPリレーエージェントの設定が行われています。 環境内でNATは使用されていません。

1.PC BからDHCP Serverに対するDHCP Discover

1.1 PC Bが送信したパケットの送信元・宛先 MAC/IPアドレス

1.2 DHCP serverが受信したパケットの送信元・宛先 MAC/IPアドレス

2.Router AからOSPFネイバーに対するアップデート

2.1 Router Aが送信したパケットの送信元・宛先 IPアドレス

3.PC AからPC BのIPアドレスに対するARP request

3.1 PC Aが送信したパケットの送信元・宛先 MACアドレス

3.2 PC Bが受信したパケットの送信元・宛先 MACアドレス

4.PC A からWeb Serverに対するHTTP GET request

4.1 PC Aが送信したパケットの送信元・宛先 MAC/IPアドレス

4.2 Web serverが受信したパケットの送信元・宛先 MAC/IPアドレス

ネットワーク構成図 f:id:inuyosi:20171226194645j:plain

送信した解答(48/56)

# 1.PC BからDHCP Serverに対するDHCP Discover

## 1.1 PC Bが送信したパケットの送信元・宛先 MAC/IPアドレス

送信元MACアドレス:PC B

送信先MACアドレス: FF:FF:FF:FF:FF:FF

送信元IPアドレス: 0.0.0.0

送信先IPアドレス: 255.255.255.255

## 1.2 DHCP serverが受信したパケットの送信元・宛先 MAC/IPアドレス

送信元MACアドレス: Router B

送信先MACアドレスDHCP server

送信元IPアドレス: Router B

送信先IPアドレスDHCP server

# 2.Router AからOSPFネイバーに対するアップデート

## 2.1 Router Aが送信したパケットの送信元・宛先 IPアドレス

送信元IPアドレス: Router A

送信先IPアドレス: 224.0.0.5

# 3.PC AからPC BのIPアドレスに対するARP request

## 3.1 PC Aが送信したパケットの送信元・宛先 MACアドレス

送信元MACアドレス:PC A

送信先MACアドレス: FF:FF:FF:FF:FF:FF

## 3.2 PC Bが受信したパケットの送信元・宛先 MACアドレス

送信元MACアドレス:PC A

送信先MACアドレス: FF:FF:FF:FF:FF:FF

# 4.PC A からWeb Serverに対するHTTP GET request

## 4.1 PC Aが送信したパケットの送信元・宛先 MAC/IPアドレス

送信元MACアドレス:PC A

送信先MACアドレス: Router A

送信元IPアドレス:PC A

送信先IPアドレス: Web Server

## 4.2 Web serverが受信したパケットの送信元・宛先 MAC/IPアドレス

送信元MACアドレス:Router C

送信先MACアドレス:Web Server

送信元IPアドレス:PC A

送信先IPアドレス:Web Server
感想

はい、満点逃しましたね。悔しいです。

間違えた1.2の正しい解答は

## 1.2 DHCP serverが受信したパケットの送信元・宛先 MAC/IPアドレス

送信元MACアドレス: Router B

送信先MACアドレスDHCP Server

送信元IPアドレス: Router A

送信先IPアドレスDHCP Server
ですね。

この答えは終了後の帰りの電車で気が付きました。というのも提出してからなんかおかしいよなぁ...と引きずっていたのです。わかった時は、間違えたけどすっきりしましたね。良かった。

予選期間中、初めての参加者で空気に若干飲まれたというか、自分の中で妙な空気のまま問題を解いていた結果の点数かなぁと個人的には分析しています。

解き方は、焦る気持ちを抑えながらL2→L3の順で考えてました。パケットの気持ちになりたかった。

本戦は気を抜かずに落ち着いて解いていきたいですね。頑張ります。

グラブルの近況報告

この記事は、OIT Advent Calendar 2017の13日目の記事です。
自己紹介


近況報告


先日12/9にoitLT参加し、"報連相とグラブル"というタイトルで発表しました。
機械トラブルはしんどいですね。
今回はあの時お話できなかった話をしようと思います。

 


所属団は4日目の記事で触れられていた団です。はい。
元々技術系の雑用は彼がやってたんですけど、気が付いたら交代してたよね。
他の情報系学生頑張ってくれ。
団イベ勝利への欲が高まったころに導入されたのが
    • Discord
    • Online Excel
    • の2点ですね。


発表では全く触れなかったDiscordの話


現状
      • 元々LINE,twitter使ってたため並行使用中
      • 早いこと乗り換えて、複数個所に同じ連絡飛ばすのやめたいね
      • サーバ権限が変更されていない
譲渡
      の記事あったので変更してもらおう


Online Excelの話


予定表制作
    • 別用途で利用されてたものコピー
    • はい、手間ほぼ無しです。ありがたい。

        あとは少しグラブル用に予選,インターバル,本戦の区分作ったりするだけ。
      • 参加統計機能の追加
      • これも簡単で
countif(C$4:C$32,"〇")
        余裕ですね
背景色の変更は以下の図のように f:id:inuyosi:20171212163253j:plain
定義すればおしまいです。

 

装備完成度
    • 予定表の応用
    • 項目変えたら終わりですね。8割ぐらい触ってないです
    • 集計結果の表示
iferror(countif($M$4:$M$33,"=〇" )/counta($M$4:$M$33),"0.00%")
        ゼロ除算があり得るので例外処理があります。簡単ですね。

      背景処理は先程の方法と同じです。


個人ランキング表


まず例の構文を見ましょう
if(AND(vlookup($A4,$A$4:$R$33,18,false)=80000,vlookup($A4,$A$4:$R$33,18,false)<""  ),0,(if(iferror(or(vlookup($A4,'2017_08_古戦場'!$A$3:$M$31,13,false) = "ランク外",vlookup($A4,'2017_08_古戦場'!$A$3:$M$31,13,false) 80000),),if(iferror(or(vlookup($A4,'2017_06_古戦場'!$A$3:$B$31,2,false)= "ランク外",vlookup($A4,'2017_06_古戦場'!$A$3:$B$31,2,false) 80000),),if(if(iferror(or(vlookup($A4,'2017_05_古戦場'!$A$3:$B$31,2,false) = "ランク外",vlookup($A4,'2017_05_古戦場'!$A$3:$B$31,2,false) 80000),),2,1),if(iferror(or(vlookup($A4,'2017_04_古戦場'!$A$3:$B$31,2,false)= "ランク外",vlookup($A4,'2017_04_古戦場'!$A$3:$B$31,2,false) 80000),),4,3),2),1),0)))+if(OR(vlookup($A4,$A$4:$R$33,18,false)=80000,<vlookup($A4,$A$4:$R$33,18,false)= ""),0,1)
気持ち悪いですね。
複数あるからダメなんですね。一つにしましょう。
vlookup($A4,'2017_04_古戦場'!$A$3:$B$31,2,false)= "ランク外"
解説すると表の先頭にセルと一致する行の特定列を拾ってきます。
こいつをif文でつないでいるだけです。そう考えると簡単ですね。

今後の展望
      • 個人ランキング自動化
Google Action Script
      を使えばできるっぽい
    • 追い出し順位付け
    • 重みづけしないといけないので要相談

まとめ


簡単なことしてる、誰か実装してくれ開発ぼちぼち飽きた

アルバイトから学んだ仕事と作業の違いの話

この記事は、 OIT Advent Calendar 2016(http://www.adventar.org/calendars/1423)の7日目の記事です。

自己紹介

  • inuyosiといいます(@)
  • 普段はグラブルとバイトをしてます
  • 最近はポケモンSMやってます(厳選終わらん)
  • ictsc 7 運営参加してます
本題へ

  • まぁ本題ですね
    • 何かくかと思いながら気が付いたら今日が来てた
    • アルバイトの話でもするかと
  • 概要
    • バイト先は回るお寿司屋さんの某Sとかいうところ
    • 高一の夏からやってるので6年ぐらい
    • 担当はキッチン全般(最近)
      • 自分の中での仕事と作業
      • ざっくり言うと
        • 仕事=自分で考えながらやる
        • 作業=ある一定の手順でやればできる
        • こんな感じです。簡単ですね
      • これを意識した理由
      • まぁこうなるでしょう
        • 元々1ポジションだけをやってた
        • まぁあるあるですね、あの会社結構お金もってるんで人いるほうってききます (他のバイトしたことないけど)
        • 1パート全部見てた
        • まぁあるあるですね。はじめて半年ぐらいかな。
          ちなみに、キッチン内全部で4パート、ホール含めて含めて5パートですね
        • 別のパートに飛ばされていた
        • まぁあるあるですね。はじめて1年ぐらい。
          これでお米ベースで作るやつはほぼコンプリート
        • 2パート同時に見ていた
        • まぁあるあるですね。はじめて2年ぐらい。
          提供遅れてるところに行ってインシデントをつぶす感じでやってた。
        • 別のパートに飛ばされていた
        • まぁあるある。2年半ぐらい。
          裏方に移ります。(最近はここ多い)
        • 「適当にやって」と言われる
        • まぁあるある。3年ぐらい。
          暇なときに別ポジに手伝いまくるのが始まる。
        • やったことないポジションに適当にぶち込まれる
        • まぁあるある。4年ぐらい。
          周りの人にききながらそれっぽくやり過ごす。キッチンコンプリートする
          • 何も言われなくなる
          • 最近1年ぐらい。適当にやる。
          こんな感じでやってきましたね。長い。
          楽しかったのは、まぁ4年ぐらいまでかなー。それ以降は"わからない"がなくなっちゃって全部"作業"になったんすね、いいバイト教えてください本当

  • この経験から大事にしたいと思ってること
  ざらっとあげます。
  • 探求心
  •   他人に聴いたり技術を盗んだりして、自分の力に変えていきましょ。表面じゃわからないものが結構見えてきます。
  • 責任感
  •   これ大事。やるっていった範囲はちゃんとやりましょう。途中放棄できないように、そしてしないように対策しましょ。
  • 修正能力
  •   問題が起きたら作業手順を変更する力。タスク近いもの危ないものから処理していきましょ。
    最終的に意識してたことってこれぐらいじゃないですかね。
    まぁオープニングスタッフなんで盗む対象は社員しかいなかったんですけど、最近は社員が使えんのでおもしろくなくて困った
    特に探求心が終わらないような仕事とかに就けたら多分それ一生続けますね
そんな感じで飲食嫌いじゃないです。ただ今のバイト先にはもう得るものはないかと(向こうは残ってくれと言い寄ってきますが...)
「このマニュアル通りにやって」よりも「これやって、条件満たせば何してもいいよ」のほうが好きなんです。好みの問題かな。
まぁ大学全く関係なかったですが、こんな感じでいいですかね(主催者へのリプ)何か参考になれば(何もなさそう)