openCV3.3.0 を Ubuntu 16.04.3 LTS にインストールするよ

必要なパッケージはインストール済としているよ

ここの記事とか見とくといい

shibafu3.hatenablog.com

openCVのソースをダウンロードするよ

形式は .zip なり tar.gzなりお好みで (普通は後者)

github.com

 

ダウンロードしたファイルを unzip コマンドだったり、

tarコマンドと、雰囲気で入力するオプションことxvzfとで解凍してあげましょう

 

opencv_contrib というものもあるのでそちらもダウンロードしましょう

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.3.0.zip

で、openCVディレクトリに移動してそこでbuildディレクトリを作成。要は

cd opencv-<バージョン>

mkdir build

する。

次にcmake。オプションをちゃんと追加しないとえらい目にあう

INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules -D BUILD_EXAMPLES=ON -D WITH_CUDA=OFF -D BUILD_TIFF=ON ..

INSTALL_C_EXAMPLES=OFFは読んで字のごとくCのサンプルをインストールしないオプション。ぶっちゃけC版のサンプルっている?

INSTTALL_PYTHON_EXAMPLES=ONも上に同じ。

OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/については、さっきwgetでダウンロードして展開したファイルを参照する。そこら辺に転がってるオプションのコードだと、3.3.0のバージョン部分がかけててエラー吐くことがあるので注意。

BUILD_EXAMPLES=ON よくわからない。

WITH_CUDA=OFF もちろん僕はGPUなんていう大層なものを今はまだ持ってないのでOFFにした。持ってるならONにしよう。

BUILD_TIFF=ON こいつが結構曲者。このオプションがないとmakeのときに文句言ってくる。

make -j $(nproc)

sudo make install

して終了。めでたしめでたし。

あとはg++でコンパイルするときにオプションを忘れなければ未定義どうこうと文句を言われることはなくなる。

g++ -o <出力ファイル名> <コンパイル対象ファイル名>.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`

 で黙ってていただく。

 

終了!優勝!お疲れ!解散!

こんどキネクト買って遊ぶぞ!

yad2kっていうの実際使ったけども結構強力そう…

openSUSEへのGoogle Chromeのインストール

多分Linux版のGoogle Chromeならどれもこれも同じ問題に直面していそうな気がします

発生状況

Google Chromeの公式サイトからrpmパッケージをダウンロードして実行すると、インストール時にファイルの整合性が壊れています、との警告が表示される。

無視して続行することも可能だが、CCleanerよろしく改竄されていると恐ろしいので署名のチェックは大事にしたいところ。

 

対処法

調べるとやはり対処法が見つかった。

署名の更新は以下の通り。

Linux Software Repositories – Google

 

以下はレポジトリの追加などなど。

説明こそドイツ語だが、コマンドを追っていれば「読める、読めるぞぉ!」ってなるかと。

人工言語は偉大。

forums.opensuse.org

D1967er という方の説明が最も簡潔で丁寧で的確なのでこれに従えば大丈夫。

sudo zypper ref

の段階でエラーが出なければ問題ない。

インストールは実証済みです。

Haskell Platform の openSUSE上へのインストールについて

基本的には以下のGeneralから *.tar.gz をダウンロードし、解凍し、実行すればいい。

sha256sumでチェックサムを忘れずに。

www.haskell.org

 

満を持してghciを実行すると

/usr/local/haskell/ghc-8.2.1-x86_64/lib/ghc-8.2.1/bin/ghc: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

とのエラー。

Googled it. そして見つけた答え。

forums.opensuse.org

どうもリンクを貼っていないから起こる問題だそうで。私の環境は64bit openSUSE Tumbleweed なので、 lib64でlibncursesが見つかったが、バージョンに難ありだった。

lib64内にあったlibncursesのバージョンは6、ghciが要求するlibncursesのバージョンは5。

というわけで、libncurses5をインストールしましょう。

sudo zypper install libncurses5

 こうすればもう余裕。どうしてもだめなら sudo ln -s コマンドでリンクを貼ってあげよう。

ghci
GHCi, version 8.2.1: http://www.haskell.org/ghc/ :? for help
Prelude>

 お疲れ様でした。最近色々手を広げ過ぎなのは自覚している。

多分今年も収集つかなくなって成績が自爆しそう。

OWASP Tokyo 2017 について

参加のきっかけ

  • OWASP Tokyo開催のニュースを見た
  • 無料
  • 全世界3箇所でしか開催しない(東京、ボストン、テルアビブ)
  • 開催場所が東工大(東日本)で比較的近い

=>(よくわかってないけど)行くしかない!と思い申し込んだ

 

北は北海道、南は沖縄まで全国各地にサテライト会場が準備されていた。

私は開催場所である東工大の参加枠が割り当てられたのでそちらに参加した。

あとでわかったのだが、東工大会場には机がなかった。司会の方曰く、申し込みの際の詳細情報欄には「サテライト会場には机が準備されているよ」としっかり書いてあった模様。

ただ、発表に使ったスライドはすべて一箇所にまとめてアップロードされているということから、私の場合は机がなくても特に困らなかった。

その資料は以下にある。

sssslide.com

オープニング・セッション

speakerdeck.com

事前知識なしに参加した愚か者(=私)にとっては非常に有り難い発表内容でした。以降の発表の概要をなぞるような発表であり、この後の発表内容が頭にすんなり入ってきた要因ではないかと感じました。

資料について特に口頭で伝えられた内容を補足する部分はないと思うけれども、資料内にある脆弱性診断のハンズオントレーニングについては発表時点ですでに満員だそうです。確か「第二弾を実施するかも?」と言っていた気がします。

セッション1

 

speakerdeck.com

この発表では、代表的な脆弱性10個を列挙しているOWASP Top10のうち、特に有名なSQLiとXSSについて取り扱っていました。Top10の順番は多分悪用されやすい脆弱性順なのかな?と思ってます[要調査]。学生secのおかげで、SQLi...XSS...わかる...わかるぞぉ!とムスカ大佐状態になっていました。

「セキュアコーディングって何だろう?」とセキュリティ・キャンプの修了後アンケートのときから疑問に思っていたのですが、この発表で「そういうことか!」という気持ちになりました。

OWASP Top 10 はこちら

Category:OWASP Top Ten Project - OWASP

セッション2

speakerdeck.com

司会者の方曰く「最小権限についてこれだけ長い時間発表するのは難しい」と言わしめた発表です。恐ろしくスッキリまとまっていました。どれくらいかというと、「設計とかしたことないよ」という私でも、スライド内で提示された問題点に対して、「確かにそうするのが適切だろう」とすぐに思わせるほどに理路整然とした対処法とその説明をされていました。

発表者の方は、「実装上やらねばならないことはしっかりされている方が多い一方で、設計上やらねばならないことをされている方が少ない印象を受ける」と嘆いていたので、もっと多くの人に知ってもらえると良いなと思いました。

 

お昼休み

一言で言えば地獄。ご飯どこで食べようかと迷って歩いてたらガストに到達。オープンしたてであったらしいのと土曜日というのが重なって最凶の混雑具合だった。注文後40分経ってようやく料理が来た。この時点でお昼休み終了14分前。7分で食べきって脱出。あれは明らかに人手が足りていない。店員さんがとても大変そうだった。とりあえず「本当に大変そうですね、頑張ってください」という言葉をかけておいた。これは「料理が来るまでに時間がかかりすぎ」みたいな遠回しな嫌味ではなくただ本心からだったのだけども、文だけ見ると嫌味に見えちゃうのがツラいね。

飲食店のバイトは絶対やらないと心に決めた。また、休日に時間が押しているときはファミレスは悪手だということを今更学んだ。

会場入りはギリギリセーフだった。

 

セッション3

speakerdeck.com

日本初また日本で数人しかいないというOWASPエバンジェリストの方の発表。

OWASP ZAPについての説明でした。

 

セッション5

speakerdeck.com

名言が出た発表。内容は読めばわかる。

「アドレスバーはJavaScriptを実行する場所ですよね」

「大学の先生だからと言って話がうまいとは限らない」

「皆さんとりあえず検索欄にhtmlの打ち消し線を入れたがるんですよ。それでうまいこと打ち消し線が出ると興奮する。」(こんな感じだったような)

司会者の方々にも、「とても上手い発表だった」と言われていた。

 

セッション6

speakerdeck.com

開発プロジェクトについて様々な観点から検討を加え、それらの観点がどの程度の到達度に達しているかをプロジェクトメンバーにイロイロアンケート取って測ってみよう、という感じの内容だったと記憶している。Level1~3まであって、最低限がLevel1, 銀行のクレジットカード情報等を扱う場合はLevel3などとレベル分けがされている。プロジェクトメンバー全体でこの評価結果を共有して、この到達度が目標に到達できるようになろうよという感じだった(気がします)。資料中のExcelやグラフは英語だけれども、どうやら日本語版はすでにできており、リリースを控えている模様。

おかしいな、他にも面白い例があったような…

最終セッション

speakerdeck.com

 

資料4ページ目では笑いが起こった。

資料15ページ目は個人的に「おお」となった。

以降3ページは誰の言葉なんでしょうか…?

Sift Leftの意味はこの資料の15ページ目に集約されている。

5,7ページを見て、たしかに製造業とIT産業の違いは大きいよなぁ…と思いました。

あと最後の玉ねぎ、これはTorかなと思いました。

淡路の玉ねぎは有名ですね。甘いらしいんですが…じゅるり。

 

全体を通して個人的に重要だと思った単語たち

  • OWASP Security Shepherd
  • OWASP WebGoad Project v8.0
  • OWASP ZAP
  • OWASP BWA
  • 脆弱性診断士
  • OWASP Education Project
  • Proactive Control
  • OWASP Top 10

あとOWASPについては技術的な面での協力はもちろん、英語から日本語への翻訳に関するボランティアも大歓迎とのこと。GUIツールの例えば " Folder(F) " とかを「フォルダ(F)」に訳して提案してくれるだけでもいいんだとか。ボランティア協力すると名前が載るらしいのでやってみては?(私も余裕が出たらやってみるつもり。)

おわり。

某の作成に必要なPyQt5に関する知識

1. ラベルの更新

ここに書いてあるとおり。

ただし、以下の点について注意する必要がある。

window.show() を実行する前にsetTextを実行してラベルの文字列を変更すると、プログラムの動作はもちろん、見かけの動作も全く問題ない。

一方、window.show()を実行したあとにラベルの文字列を変更すると、仮にsetTextで更新する文字列の長さが、最初に定めたラベルの文字列よりも長い場合には、最初に定めたラベルの文字列の長さだけしか表示してくれない、という問題点がある。

yu00.hatenablog.com

 

2. 時間差でのラベルの更新

今回の目的を達成するには、このラベルの更新は等時間間隔で行う必要がある。

ラベルの更新を任意の秒数ごとに行う場合には、以下に示される方法を利用する。

stackoverflow.com

 

QtCore.QTimer をimportして、テキストを更新するためのスロットとconnectし、シグナルはtimeoutとstartを利用して、QTimerで設定した時間経過後にスロットを発動させることができる。

 

3. gridLayoutの要素にアクセスする方法

setLayoutの時点で、すでに各要素の位置は決まっている。

Qtでいうポインタみたいな感じで、構成したレイアウトからさらにitemAtPosition(x, y)を使って、任意の要素にアクセスできる。でもそのままだとアクセスできないと思う。

 

 

itemAtPosition(x, y)でアクセスしたい要素のポインタを取得したあと、widgetを参照するようにwidgetオプションを追加してあげる。そうすると、QLabelを参照するようになる。

あとはQLabelと同じように取り扱ってあげればいい。

 

>|?|

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QHBoxLayout, QGroupBox, QDialog, QVBoxLayout, \
QGridLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot


class App(QDialog):
def __init__(self):
super().__init__()
self.title = 'PyQt5 layout'
self.left = 10
self.top = 10
self.width = 320
self.height = 100
self.initUI()

def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)

self.createGridLayout()

windowLayout = QVBoxLayout()
windowLayout.addWidget(self.horizontalGroupBox)
self.setLayout(windowLayout)

self.show()

def createGridLayout(self):
# タイトルとグリッドの行・列数を指定
self.horizontalGroupBox = QGroupBox("Grid")
layout = QGridLayout()
layout.setColumnStretch(1, 4)
layout.setColumnStretch(2, 4)

# ウィジェットは layout.addWidget(Widget, X, Y)で追加
layout.addWidget(QLabel('1'), 0, 0)
layout.addWidget(QLabel('2'), 0, 1)
layout.addWidget(QLabel('3'), 0, 2)
layout.addWidget(QLabel('4'), 1, 0)
layout.addWidget(QLabel('5'), 1, 1)
layout.addWidget(QLabel('6'), 1, 2)
layout.addWidget(QLabel('7'), 2, 0)
layout.addWidget(QLabel('8'), 2, 1)
layout.addWidget(QLabel('9'), 2, 2)

self.horizontalGroupBox.setLayout(layout)

find = layout.itemAtPosition(1,0)
print(find.widget().setText('t'))

if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())

||<

 

4. connect で NoneTypeエラーがうっとおしい

drilldripper.hatenablog.com

connectの引数内で lambda: をしてあげるとちゃんと動いた。

情報ありがとうございます!

 

5. ウィンドウの背景色の変更

stackoverflow.com

ここにあるとおり。

まあこっちでもできなくはないけれども、あとで視覚的に、ダイアログで色変更ができるかどうかを考えると微妙。

How to Change the Background Color of QWidget/ja - Qt Wiki

 

5. 正規表現

下に対象と成る文章、上に正規表現、ハイライトでどこを参照するか逐一教えてくれるサイト。

便利。

regexr.com

あと以下のマイクロソフトのページも役に立った。

正規表現の構文

Linux LaTeX 環境

環境

Atom の導入

Atomのパッケージ入手

atom.io

まずダウンロードしてインストール

Installing Atom

cd ~/Downloads

sudo zypper install -y atom.x86_64.rpm

署名がないと出ても無視、github側がパッケージに署名をしていないのが原因。

TeX Live のインストール

openSUSEなので以下のサイトに従うと

https://texwiki.texjp.org/?cmd=read&page=Linux%2FopenSUSE

sudo zypper install texlive-collection-langjapanese

 YaSTからでもいいけどもこっちのほうが楽。 

Atomへのパッケージ(apm)インストール

sudo apm install latex language-latex pdf-view

latexは文章をコンパイルしてくれるやつ(要設定、後述)

language-latexは補完機能もってるやつ

pdf-viewは出力されたpdfをみるやつ

 

latex パッケージの設定

/usr/bin/

  • Engine

platex

  • Custom Engine

何も書かない

  • Output Format

pdf

  • PDF Producer

dvipdfmx

  • Opener

pdf-view

  • Custom PDF Viewer Path

/usr/bin/dvipdfmx

 

pdf-viewの設定

  • Path to Synctex binary

/usr/bin/

 

 

pdf-viewのキーバインドには書かれていないし説明も一切ないのだけれども以下の点に注意。

 

一旦LaTeXで書いた組版コンパイルしてpdfを生成し、その後組版に訂正を加えてビルドすると、pdfに自動的に修正が入らないことがある。これは、Ctrl + Shift + P を押したあとに reloadと入れると、 pdf-view Reload とでてくる。これを選択して実行すればpdfの内容が組版どおりに更新される。

おわり

うまく設定しないと、とりあえず環境構築できたつもりでも、いざコンパイルしてpdfを見ると日本語が表示されないという状況に陥ります。要注意。

 

 

 

Windows Ubuntu openSUSE トリプルブート

はじめに

ゴミみたいな情報を大量に発信して申し訳ない。

「またか、お前は一体この数週間に何度データを削除しては環境構築をしているんだ?」

時間の浪費、ダメ絶対。 

何度もデータを消しているから、だんだんとデータを廃棄することが怖くなくなってきてしまっている。

やあ (´・ω・`)
ようこそ、バーボンハウスへ。
このテキーラはサービスだから、まず飲んで落ち着いて欲しい。
うん、「また」なんだ。済まない。
の顔もって言うしね、謝って許してもらおうとも思っていない。
でも、このタイトルを見たとき、君は、きっと言葉では言い表せない
「ときめき」みたいなものを感じてくれたと思う。
殺伐とした世の中で、そういう気持ちを忘れないで欲しい
そう思って、このブログを書いたんだ。
じゃあ、注文を聞こうか

 

Windowsをインストール

もう十分書いたと思うので省略。

efiの初期化とか、Linuxが含まれているファイルをフォーマットするなら以下の過去記事を参照。

 

heruwakame.hatenablog.com

 

 

 Ubuntuのインストール

これもLive USBの作成とか、ブート順序の設定等については省略。

HDDやSSDの容量に空きがないとLive USBを読み込みはしても、見慣れたデスクトップ画面になるまでは起動してくれないので、ちゃんとフォーマットして余裕を持たせておくこと。

パーティションで大事なのは、 /boot, /root, /homeをちゃんと設定してあげること。

ブートローダのインストール先を必ず/bootのディレクトリに設定すること。(もしかしたらWindows Boot Loaderでも大丈夫かも?)

あとはUbuntuが勝手にgrubとかを設定してくれる。

インストール終了後に再起動しないでターミナルを開き、 sudo update-grub とコマンドを叩くとWindowsLinuxを認識していることが確認できる。

再起動をすると、grubが表示されて、WindowsUbuntuかを選択することが可能になる。

 

openSUSEのインストール

基本的に流れに任せていい。

パーティションについては熟練者向けの設定なるところを参照してみるとわかるが、openSUSEはもとからあるWindows Boot Managerのところに/boot/efiを設定していて、「Windowsブートローダ上に上書きしちゃうの!?Ubuntuはどうなるの!」と冷や汗になったり、ともすると「ちーがーうーだーろー!」みたいな気分になるけれども、openSUSEちゃんのインストーラは優秀な秘書なので、このままで問題ない。(結果論)。

仕組みがさっぱりわからないのだが? Ubuntuで設定した /bootはどこへ行った? ゴミデータとして残るのか?

 

結論:よくわからんが動いた。(危ないやつ)