bussorenre Laboratory

hoge piyo foo bar

CentOS 7 困ったこととその解決策まとめ

多分RHEL beta に触れている人とか、エンタープライズRHELを使っている人はもうすでに知っている情報なのかもしれないけれど。ぼくなりに困ったことと解決した方法なので一応載せておきます。

ifconfig が無い

解説記事はここ http://d.hatena.ne.jp/enakai00/20140712/1405139841

大本のiproute2はここ http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2

eth0 が無い or インターネットに接続出来ない。

  • ip a してみるとわかるけど、eth0とかが無い
    • enps0 に任意の数字 が有線LANの識別子
    • wlps0 に任意の数字 が無線LANの識別子
  • 昔ながらのeth0とかにする方法
[root@localhost ~]# vi /boot/grub/grub.conf
# 最下行に追加
net.ifnames=0
biosdevame=0

システムをリブート

  • 起動時に有線LANを自動的にDHCPに割り当てる。
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
#以下の設定になっているか確認する。
BOOTPROTO=dhcp
ONBOOT="yes"

なお、ifcfg-eth0 がない可能性があるので、ifcfg-enp*s0などがアレばそちらを修正する。

詳細記事はココ。どうやら多くの人がハマっているらしい。 http://wiki.centos.org/FAQ/CentOS7#ethernet

iptablesが無い

mySQL がインストール出来ない

yum install mysql ってすると、なぜかmariadbがインストールされている。

  • wgetmysql をインストールしてもいい。
    • いいけれど、mysql自体がwikipediaが捨てるわgooglemariaDBに加担するわでてんやわんや。
    • 長い目で見たらmysqlが終わりそうなので別のDBを使うしか無い。
  • sqlite or PostgreSQLを使う
  • コレを期にmariadb に移行する

nginxがyum install nginx でインストール出来ない。

$ sudo vim /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

これでyum install nginx でインストール出来る。

その他

  • 何か発見し次第修正します。

CentOS7 をラップトップに入れた時のメモ

そもそもifconfig コマンドがなかった……( ゚д゚)ポカーン

こんばんは。@bussorenre です。なんか最近こんな書き出しが多い気がします。

とあるノートパソコンにCentOS7 をインストールした時に困った事をメモしました。

有線でインターネットに接続出来ない。

冒頭にもある通り、最小限の構成でインストールするとifconfigコマンドが存在しません。yum で入れ用にもネットワークが接続出来てないので詰んでます。色々ぐぐった所、"ip a" ってコマンドがあるらしいので、それを代用してネットワーク構成を確認。enp4s0 っていう構成がどうやら、NICMACアドレスを持っているっぽいので、それの設定をいじります。

$ sudo vi /etc/sysconfig/network-script/ifcfg-enp4s0
#ONBOOT=no
ONBOOT=yes    yesに書き換える。

$ sudo service network restart

以上。コレで、無事DHCPでインターネットに接続出来ます。

蓋を閉じた時にサスペンドしない

蓋を閉じた時にサスペンドされてしまうとサーバーとして詰んでいるので、やめさせます。なお、設定ファイルをいじった後にシステムの再起動が必要なので再起動します。

$ sudo vi /etc/systemd/logind.conf
HandleLidSwitch=ignore  ← 最下行に追加
$ sudo reboot

ssh は最小限の構成でインストールされていたので、後は無事遠隔で操作出来ます。

またねー!

envp - main関数3つ目の引数

昨日の俺 「知らんかった……( ゚д゚)ポカーン」

C言語のmain関数には引数が”3つ”存在する。

大体Cの入門書は int main() とかだし、ちょっと毛が生えてきて、引数を取って挙動を変えましょうとかだと、argc, argv を取るだけだと思うし、sublime TextのCのsnippet もargv までしか補完してくれないし、envp ってなんやねんΣ(゚Д゚)

crt1.cには以下のように書かれている。

extern int main (int, char **, char **);

この3つめの引数が いわゆるenvp で、"環境変数へのポインタ"らしい。 環境変数bashzsh

$ set

というコマンドで確認できる。いわゆる$PATHとかの事。 実際に引数を確認するプログラムを作成してみましょう。

#include <stdio.h>

int main(int argc, char *argv[], char *envp[])
{
    int i = 0;

    /*  argc の確認 */
    printf("argc = %d\n", argc);

    /* argv の確認 */
    printf("argv = [");
    for (i = 0; i < argc; i++)
    {
        printf("\'%s\' ", argv[i]);
    }
    printf("]\n");

    /* envp の確認 */
    printf("envp = [");
    for (i = 0; envp[i]; i++)
    {
        printf("\'%s\' ", envp[i]);
    }
    printf("]\n");

    return 0;
}

で、実行結果ですが、

./a.out
argc = 1
argv = ['./a.out' ]
envp = ['TERM_PROGRAM=iTerm.app' 'TERM=xterm-256color' 'SHELL=/bin/bash' 'CLICOLOR=1'......(非常に汚い環境変数なのでお見せできません笑

となりました。環境変数は必ず hoge=piyo foo=bar という文字列で格納されているので、strtok関数などで分解してやると扱いやすいと思われます。

これは便利だ!!

PWDやHOMEなどの環境変数も入っているので、HOMEフォルダにアプリケーションの設定ファイル.ore_rcみたいなのを置けます。また、envpはfork/execしても変更されず引き継げますので(※要調査。変数をそのまま引き継ぐわけではなく、envpが格納されているメモリがexecにより書き換えられない?)

8年近く、Cのmain関数は引数2つだと思い込んでいたので、非常に勉強になりました。というか、反省しています。常識を疑うって大事(白目

openFrameworks 自分用まとめ

おはようございます。@bussorenre です。 ちょっと野暮用でopenFrameworksを使うことになり、それについて調べていた次第であります。

openFrameworks とは

  • メディア処理のライブラリを集めたC++ のToolkit
  • OpenGLやrtAudioなどのライブラリのラッパーライブラリ
  • MIT media Laboratory が中心となって開発しているオープンソースライブラリ
  • Mac OS X / windows / Linux / Arm Linux / iOS / Android に対応
  • 最新版は0.8.1 で、過去バージョンの後方互換性は無い。(2014年6月8日現在) です。

製品用のソフトウェアに使用するのに便利なのかどうかはわかりませんが、プロトタイプやちょっとした実験目的に使用するには非常に強力なライブラリだなーと思います。

元々Direct3D を全速力で追っていた人間としては、非常に扱いやすくシンプルなライブラリだなーと感じています。メディア処理を扱うため、使用言語は闇とかなんだとか言われるC++ですが、特別闇な事を感じること無く使うことが出来ます。(今のところは

日本語の入門記事とか

日本においては 田所 淳 (tadokoro) on Twitter という方が第一人者らしく、公式サイトの日本語版 http://openframeworks.jp も管理されておられますし、非常に役に立つスライドもslideshare で公開されています。非常に勉強になりました。多謝多謝m(_ _ )m

メディア・アート II 第1回: ガイダンス openFrameworks入門

メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション

メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF

Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム

Media Art II 2013 第5回:openFrameworks Addonを使用する

Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv

Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL

授業用のスライドだと思うのですが、それをslideshare で公開されている多摩美術大学は先進的で素晴らしいと思います。一個人の強行かもしれませんが……笑

これを勉強するとどういうプロダクトが創れるようになるのか

kinect との連携

Interactive Puppet Prototype with Xbox Kinect on Vimeo

テッセレーション技術の応用と、3Dプリンタを用いたファッションジェネレーター。これは凄い。

Kinematics on Vimeo

プロジェクションマッピング

" chair " 3D projection mapping by Masaru Ozaki - YouTube

プロジェクションマッピングって普通のプロジェクターじゃ出来ないのかな???出来るなら気軽に試せて面白いと思うのでぜひやってみたい。

既存のグラフィックツールとどう違うのか

DirectX

おなじみMicrosoftDirectX こちらはゲームに特化しているというイメージが根強く、windows 系列以外での動作が非常に難しい。しかしwindows系で、強力なグラフィックカードを積んだパソコンに3D処理をさせるのには非常に強い。Kinectとの連携も強いらしい。

OpenGL

色々勉強したけれど、OpenGLそのものを直接叩くのは難しい(ぶっちゃけめんどくさい)ので、ラッパーライブラリを使うのはいいかもしれません…(どうせあとでOpenGLの知識が必要になってくるだろうし)

Unity 等のツール

完全にゲーム作成に特化しています。今回openFrameworksを選択した理由はゲームを創りたいという特化した目的ではないので、パスしました。

まとめ(というか感想)

デジタルとアートとの融合 なんてカッコイイことが言われていますが、その実態はまだまだ未知数です。今まで画面の中で閉じていたコンピュータグラフィックが、現実世界と交わり合うようになったら面白い事ができるかもしれない。というのは誰もが感じていることなので、その概要だけかじってみてもいいかもなーーって思いました まる

自分用 Swift 暫定まとめ(1)

ついにニュースでも取り上げられるようになった 若者のObjective-C離れ(笑)に対応するかのごとく、出てしまったSwift について、ある程度まとめました。

より詳細なドキュメントはiTunesストアにただで置いてあります。

実際にコンパイルして動作を確認するための Xcode 6 Beta は iOS Dev Center - Apple Developer から、「規約を更新したから同意してください」的なボタンを押すと、ダウンロード出来るようになります。

f:id:bussorenre:20140603102806p:plain

Hello World

println("Hello, Swift!!")

以上です。main関数などのエントリーポイントはありません。セミコロンで終わるステートメントでもありません。import も特に必要ありません。 組み込み関数??

変数宣言

var myInteger = 42
myInteger = 100
let myConstant = 0
var myDouble:Double = 0

test = 100  // エラー
myConstant = 100 // エラー

変数宣言はjavascript に似ています。 変数は先頭にvar、 定数は先頭にlet を明治します。varやletのない変数宣言はエラーとなります。当然ながらletで宣言した定数を変更するコードもエラーになります。

明示的に型を宣言する場合は、変数名の後にコロン(:)型名をつけます。Goっぽいですね。また、一度宣言した変数は型を変えることが出来ないようです。型キャストは出来ます。

var myInteger = 100
// myInteger  = 100.0  エラー
myInteger  = Int(100.0) // 型キャスト

配列と辞書型( array & dictionary)

var fruits = ["apple", "banana", "cherry"]
fruits[0] = "Orange"

var languages = [
    "C" : "old",
    "C++" : "too complex",
    "Python" : "too slow",
    "Objective-C" : "dead"
]
println(languages["Objective-C"])

文字列にシングルクォーテーションは使えない模様。Pythonjavascriptを足したような構文。また、辞書のキーにはあらゆる型が使える。

var floats = [
    1.0 : 100,
    2.0 : 200,
    3.0 : 300
]
floats[1.0] = 10000

C++のtemplate っぽい。と思っていたら空の配列、辞書宣言が以下のような感じだった。

let emptyArray = String[]()
let emptyDictionary = Dictionary<String, Float>()

非常に型が大事。Dictionary は、Dictionary という型(クラス?オブジェクト?)なのか、キーワードなのかまだわかりません(汗)

制御文

var individualScores = [43, 75, 100, 87, 23]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}

var n:Int = 100
while n > 1{
    n--
}
do{
    n++
} while  n < 100

var firstForLoop = 0
for i in 0..3 {
    firstForLoop += i
}

var secondForLoop = 0
for var i = 0; i < 3; ++i {
    secondForLoop += 1
}

ブロックはお馴染みの {}で作ります。Pythonのようコロンとインデントで識別ではありません。rubyのようなbegin end でもありません。while もdo-whileも、従来型のforもpythonっぽいforも使えます。

関数

func getGasPrices(item:Double) -> (Double, Double, Double) {
    return (3.59, 3.69, 3.79 * item)
}

複数の戻り値を返せる模様です。

クロージャ

swiftのクロージャーの表現は非常に写像っぽくていいと思いました。

func makeIncrementer() -> (Int -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
increment(7)

Int -> Int でINT型を引数にとってInt型を返す関数が創れるそうです。便利。

体力が尽きた/(^o^)\

研究の発表が明日じゃなかったらもうちょっとswiftやりたかった……木曜日くらいに続き書きますー。

研究生活、始めました

はじめましての方は、はじめまして。そうでない方はお久しぶりです。@bussorenreです。 この度、紆余曲折ありまして、大学四年になりました。四年生といえば、そう、研究活動なのですが、そこで得られた知見とか意見とか、読書ログとか、そういうのを残していくことにしました。

5月18日(今日の日付)から2月末くらいの卒業論文発表の日、卒業式くらいまで頑張って更新していきます。

自己紹介

General Info
  • Name - @bussorenre - (´・Д・)
  • University - 立命館大学 情報理工学部 (Ritsumeikan University, Major in Information Science )
URLs - no public information
Languages and skill Levels

"skill level" has 5 grade, 1 (beginner), 2(grammar), 3(no references), 4(responsible developer) and 5(wizard).
スキルレベルは大体はてなの採用基準を参考に改良しました。Cと日本語くらい5になりたいね。

ブログに研究活動を公開する理由

  • 研究活動の見える化
    大学生ってこういう風に研究してるんやーって見せるため(主に中高生とか)
  • 自己啓発。自己牽制。炎上抑止力の向上
    節度あるインターネットリテラシーをつけるため。大勢がネットを使い始めて、ノリでなんとかなる時代じゃなくなってきた。
  • 意見とか反応を得るため
    情報発信による更なる情報収集のスパイラルを狙う。(おかしいと思ったらコメントしてください><;)
  • 売名行為
    はい。売名です。売名なので、価値がある事を研究・調査して、書くというミッションを持っています。緊張感を持つためでもあります。
  • Open な活動への貢献
    Open Source や Open Education の活動に少しでも貢献出来たらいいなと思ってますがあくまで願望。世界に貢献するのはエンジニアの基本。

公開することによる懸念点とか

プライベートの管理をどうするか

大学に存在するプライベートな情報(外に出しては行けない情報)や、関係者個人に関わる情報は当然出せませんし出しません。万が一私の判断ミスで掲載してしまっていた事が発覚した場合、掲載を取り下げた上で関係各所に平謝りしに行く。 また、私個人のプライベート情報も出来る限り制限をかける。特にfacebook と LINEは絶対に公開IDにしない。

研究のアイデアが奪われてしまって勿体無いのでは

所詮、私は中堅私立大学の学部生なので、そんな夢みたいな超すごい事が自分にできるとは思っていない。公開してアイデアを奪われたりする危険性よりも、情報を発信しないデメリットのほうが大きいと考えた。夢みたいな話であるが、第三者から評価され、「パクルに値する研究」になった場合は色々ブログの方針を変えるかもしれない。

ちゃんとブログ更新するよね

頑張ります!!!!!!

研究概要

詳細は未定ですが方向性だけはとりあえず決定。

背景と問題意識

MOOCs(Massively Open Online Courses )の登場により、素晴らしい学習教材がオープンで提供されるようになったが、それらを用いて修了出来る受講者は登録者の約5%しか存在しない。MOOCsや反転授業は、学習者の学習意欲の上に成り立つ物であり、学習意欲が低い者には更なる学習定着率の低下を生むことになることが容易に予測される。如何に学習者のモチベーションを維持し、学習意欲を高めるかがMOOCs を始めとした、21世紀型教育の成功の鍵となると思われる。

対象

学習の動機付け

研究活動の目標

  • 海外実験に連れて行ってもらう
  • 後援会の奨学金が出るくらいには頑張る
  • 卒業する

こんな感じで1年間頑張っていこうと思います。よろしくお願いしますm(_ _ )m