bussorenre Laboratory

hoge piyo foo bar

Gem を作る

今更ながらRuby について真剣にやり直そうと思う。理由はまぁ色々有るのだけど。。。どうもRuby は苦手だ。

さて、gem を作る。今までとりあえずgem install していたけど、gem ってそもそもどうなっているんだろうか??

bundle gem gemname

これで雛形を生成することが出来る。おそらくデフォルトのままで問題ないと思う。生成されるgem のファイル構成は以下のようになっている。

├── CODE_OF_CONDUCT.md
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── bin
│   ├── console
│   └── setup
├── lib
│   ├── testgem
│   │   └── version.rb
│   └── testgem.rb
├── spec
│   ├── spec_helper.rb
│   └── testgem_spec.rb
└── testgem.gemspec

4 directories, 12 files

testgem と言うのは私が書いた名前なので、各自の環境で変えていただきたい。ruby でrequire が呼ばれた時、このlig/testgem.rb が呼ばれる。また、このgem を呼び出すにはどうしたら良いのか。

このディレクトリとは別に、'callgem'というディレクトリを作成し、Gemfile を作成する。ローカルのgem を呼び出す時は、path属性を指定してあげる。具体的には以下のようになる。

gem 'testgem', :path => '../testgem'

さて、これでbundle install しようとするとエラーが起こる。どうやらspec ファイルがまだvalid じゃない(テストが通ってない)と言われるので、コレをアレコレ書く所から始めようと思う。

早速gemspec ファイルを開けるよく見ると中にToDo という文字列が見つかるので、そのへんを適当に改良する。以下のようになった。

# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'testgem/version'

Gem::Specification.new do |spec|
  spec.name          = "testgem"
  spec.version       = Testgem::VERSION
  spec.authors       = ["bussorenre laboratory"]
  spec.email         = ["mailaddress@bussorenre.com"]

  spec.summary       = %q{おためしで作ったgem}
  spec.description   = %q{こんなんでいいのか}
  spec.homepage      = "http://localhost:3000"
  spec.license       = "MIT"

  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
  # to allow pushing to a single host or delete this section to allow pushing to any host.
  if spec.respond_to?(:metadata)
    spec.metadata['allowed_push_host'] = "'http://mygemserver.com'"
  else
    raise "RubyGems 2.0 or newer is required to protect against " \
      "public gem pushes."
  end

  spec.files         = `git ls-files -z`.split("\x0").reject do |f|
    f.match(%r{^(test|spec|features)/})
  end
  spec.bindir        = "exe"
  spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
  spec.require_paths = ["lib"]

  # ココに依存しているgem を追加する
  spec.add_development_dependency "bundler", "~> 1.14"
  spec.add_development_dependency "rake", "~> 10.0"
  spec.add_development_dependency "rspec", "~> 3.0"
end

本当にToDO のところを書き換えただけです。

さて、肝心のこのgem ですが、ping というメソッドを実装し、呼び出されたらpong と返す。たったそれだけのgemを作成します。

まずspec

require "spec_helper"

RSpec.describe Testgem do
  it "has a version number" do
    expect(Testgem::VERSION).not_to be nil
  end

  it "response pong if ping" do
    expect(Testgem.Ping).to eq('pong')
  end
end

実装

module Testgem
  def self.Ping
    'pong'
  end
end

これで、rspec が通った! というわけで、さっき作ったcallgem から呼び出してみる。

まずはbundle install する。すると問題なくbundle install 出来たので、コードを書く。

require 'testgem'

puts Testgem.Ping

これをbundle exec ruby main.rb で実行すると、無事pong と表示される。

結論

gem が出来た。所謂有名所のgem も基本はこういう原理になっているはずなので、コードリーディング等に役立てていきたい。

サーバーを可視化しよう!その1. cacti

@bussorenre です。

この記事ではcacti にトライした時のメモを残していきます。OS はCent OS 6.6 です。実際に試した環境はsakura VPS 2G プランのインスタンス上です。

また、「私の勝手な主観」が入る事が多いので、「そこは違うで」って指摘していただけるとすごい助かります。

cacti 概要

依存するソフトウェア - Apache web server... データを確認するのに使用 - MySQL...

# rootユーザーに切り替え。
su -

# root ユーザーに切り替わった後
yum install -y cacti mysql-server

# cacti が利用するユーザー、MySQL DB などを準備してあげる。
mysql -u root -p

mysql> CREATE DATABASE cacti;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON cacti.* TO cacti@localhost IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>bye;

# cacti にdbの設定を記述 (emacs でも)
vi /etc/cacti/db.php
$database_type = "mysql"; //使用するデータベース種別. MYSQL以外も使えるっぽい。
$database_default = "cacti"; 
$database_hostname = "localhost"; 
$database_username = "cacti"; // データベース接続に使用するユーザー名
$database_password = "password"; // データベース接続に使用するパスワード
$database_port = "3306"; // データベース接続に使用するポート番号
$database_ssl = false;
:wq

# 初期データベースの作成(0.8.8b はcacti のバージョン。)
mysql -u cacti -p cacti < /usr/share/doc/cacti-0.8.8b/cacti.sql

# cacti をapache から確認出来るように設定をいじる(特にいじることがなかった\(^o^)/)
vi /etc/httpd/conf.d/cacti.conf
:wq

# crond で定期実行
vi /etc/cron.d/cacti (# 行頭コメントを外して有効化)
*/5 * * * * cacti /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1

:wq

service crond restart

ここまでできたらhttp://localhost/cacti/install/ にアクセスして初期設定を行う。

個人的に感じたこと * 何度も見たことのある憧れの画面で感動\(^o^)/ * 監視用のマシンを1代別途用意して、そこにmySQL を用意して監視するという選択肢は考えたけど、それならsensu のほうが今どきでよさ気かもしれへんって思った。

参考にした記事 * モニタリングツール「Cacti」でのリソース監視 - さくらのナレッジ

サーバーの状態を可視化しよう!その0. 概要

こんばんは。夏!暑い!けどオフィス寒い!社畜なんてやってる場合じゃねええ!@bussorenre です。

さて、仕事で使うサーバーも趣味(minecraft)で使うサーバーも、「もっと楽に状態管理したいなー」って思ったので、例によって今回自分用に記事を書き残します。勉強中なので「これ違うで」「こんなんもあるで」みたいな事があれば共有していただけると幸いです。

現状の選択肢

らしいというのは、詳しい方の一言コメントです。

Graphite

今度書く

Cacti

今日書く

Munin

今度書く

Sensu

今度書く

情報に価値がある時代は、いつの間にか終わってた

お久しぶりです。ぶっそれんれです!

大学を無事卒業し、東京に出てきて社畜してます。まだ研修期間なので、非常に丁寧に扱われていますが………

この記事は、東京に出てきて、社会人になって思ったこと、感じた事、そしてこれから大事にしていきたい姿勢を、個人的にまとめる記事です。

要約すると、以下の三つです。

  • 大都会東京すげええ
  • 情熱は、インターネットでは伝わらない
  • リア充の事をリア充と蔑むのをやめる

この見出しだけだと、すごいネガティブベースな思想に聞こえますが、そうで無いのでご了承を……。

大都会東京すげええええ(ry

今までイベントや就活で東京に来ることは何度もありましたが、大学を出て実際に上京して「住む」と、色々な事が見えてきてびっくりします。

若い人が多い

人が多すぎて、通勤電車ヤバいとか思ったんですが、それよりも驚いたのが若い人の多さ。休日に知り合いが経営するカフェに遊びに行くために吉祥寺まで出かけたのですが、若い人が多い。子どもが多い。ついでに美人も多いしイケメンも多い。どうなってるんだ。

スウェーデンに出かけた時に思った事ですが、若い人(特に子育て層)が多くて、公園とか商店街とかにすごい活気があって良いなって思っていました。「あー日本にはこんな所ないわー」って思っていただけに、「日本にも若い人が多くて活気がある街があったんだ」って思いました。だって、昼間から外で酒飲んで騒げる場所、大阪にはあんまり無い。

大阪に漂う「未来無い感じ」が、東京にはそれほど感じられない。

滋賀の草津市は関西唯一の人口増加地域で、若い世代がすごい多くて、活気があって好きなのですが、古くからの地主が、よそからやってきたよそ者からお金などを搾取する構図が、どうしても拭いきれません。若い人を主役にしようという動きはあるのですが、本当の意味で若い人が主役になっている場所というのは、本当に少ないのが実情です。

在住している外国人が多い

京都も、それはそれは物凄い勢いで外国人が訪れます。しかし、それはあくまで観光。東京は「実際に住んでいる」人が非常に多い。色々なバックボーンがあれど、日本に来て、日本で働き、程度の差はあれど日本語を喋る彼らを「外国人」と呼ぶのはすごい失礼な気がしてくるくらい、溶け込んでいる。

神戸はそうではないのですが、やはり京都は外国人は「お客様」だし、大阪の一部地域は「在日差別」がすごく今もなお激しく残る地域で、とても彼らが住みやすい土地ではないんだろうなっって痛感します。(まぁ、だからこそ、ヘレンさんとかがすごい注目されるのですが)

プロフェッショナルが多い

これは今日の秋葉原で思ったのですが、メイドさんすごい。秋葉原に観光で訪れてた人に英語で全力でご主人様を口説いてる姿はマジですごいと思いました。最近JKリフレとか変なのが増えてきたので、全員が全員そういうわけではないんでしょうけど……。

まぁ、何が言いたいかというと、「私は世界にこういう価値を与えていく」って意識を持っている人が、多い気がします。「東京クッソ人多いのに、人手が足りへんとか言うのいみわからへんわww」って思っていたのですが、「人手が足りない」って言うのは「プロ意識を持てる人材が需要に見合ってない」って置き換えるとすごい納得しました。

かたや、大阪。仕事ありません。無くはないですが、それは昔ながらの歯車になれ精神です。歯車も大事ですが、車輪の再発明は時間の無駄ですし(勉強にはいいですが)、どうせなら歯車じゃなくて動力になりたい。

わけわからんIT系のスタートアップなんかより、その辺にある飲食店や美容院のほうが、よっぽど尊い。よっぽど世界に価値を与えている。そう思えるところが、少なくないです。

東京は活気があって、多様なプロフェッショナルが多い。
そんな土地だなって思います。

情熱は、インターネットでは伝わらない。

そんな東京ですが、本やネットやテレビで、「どんな場所か」って言うのは毎日のように、伝わってきてましたが、唯一インターネットで伝わりづらかったものがありまして。それは「情熱」です。

多くの先進国もそうですが、日本は、高度経済成長を経て、モノに困らない豊かな世界になりましたし、95年のwindows 95 を境目あたりに始まったIT革命によって、どこに居ても世界中の情報を手に入れることが出来る世界になりました。

伝わらないものは情熱。そして、人を動かすのは情報ではなく情熱であると。

今まで情報が人を動かすと言われていましたが、それは「元々情熱持つ人」が「情報を手に入れた」から実際の行動につながったんじゃないかなと思います。けれど、世界は、物凄い勢いでうつの人が増えていて。体は元気なのに、自分でご飯を食べようとすることすらできない人が居ます。個人的には「心の格差」とか呼んでいますが……。

大学時代、動機付けの研究をしていましたが、結局の所、心のエネルギーが、内発的であれ、外発的であれ、エネルギーが満たされれば人が行動できるんです。教育界隈、自発的な学習がいいとか、興味を引き出して〜とか言われてい居ますが、それは教師が上手に情熱を子どもに伝えることができなかった言い訳に過ぎないと思っています。当然、自発的な興味を引き出す事が出来れば、それは本当に素晴らしいことですが、それが難しい子どもが世の中には五万どころか数千万と居ます。そういう子たちに、背中を押すという事をしなかった大人の責任は非常に大きいと思います。

話がそれました。

大事な事は、「情熱が人を動かす」

東京は、確かに、人もお金もモノも情報も溢れているけれど、それよりも、情熱が溢れてる。そしてそれは、インターネットでは伝わりづらかった。少なくとも私は、実際に住むまで、情報と情熱の違いが分かってなかった。

リア充リア充と蔑むのとやめる。

そもそも、情熱ってなんやねんって話になるんですけど、日本語通りに解釈するなら、「心(性格には感情)が持つ熱量」じゃないかなって思っています。

私は体も心も熱いのは苦手です。所謂リア充とか、うぇい系のような人たちみたいな、あっつあっつの空間に打ち込まれると、湯だってへとへとになってしまいます。ですが、寒いのはもっと苦手です。誰も相手にしてくれない、鬱々しい、寒くてくらい世界は、もっと苦手です。

正直、私はうぇい系の人を暑苦しい奴らだと思って、蔑んでいました。

しかし、近年、エンジニアリングが重視される時代になった事もあってか、私みたいな奴の事を、キモいオタクだと蔑んでいたうぇい系の人たちが、寄り添ってきた。どういう考えを持って、どういう熱量で接すればちょうどいいのかとか、すごい考えてくれてます。

なのに私は、正直まだ「必要な時だけ寄り添ってきやがって」って、心のどこかで思っています。実際そうなのかもしれません。

けれど、私も所謂うぇい系の人を、うぇい系と蔑むんじゃなくて、人に情熱を伝えたり、場を創ったりするのが得意な、ファシリテーターと呼んで、寄り添っていきたいって思っていきます。オタクと呼ぶのをやめて、ギークであったり、エンジニアであったり、好意的な呼び方をつけてくれたように。

まとめ

一ヶ月間、社会人になって「私はこれから何になるんだろう?何がしたいんだろう?」って、必死に考えていました。

東京に来て一週間で、情報なんかよりも情熱に価値がある事は分かりましたし、それが出来る人(例えば営業の人とか)って本当にすごいなって思いました。

そして出た答えが「一緒に居て楽しい人になろう!」って事でした。やっぱり人間「楽しい」って思うことに対してはすごいポジティブで、最もエネルギーを持っている時だと思うので、「楽しい」のサポートがしたいなって。

そしてそのために「色々なプロフェッショナルの情熱を知ろう」って決めました。今までパソコンに甘えすぎました。自分の世界にこもりすぎました。反省。色々な人に会いたい!

明日でGW終わって、明後日からまた社畜生活始まるけど、「一緒に居て楽しい人」目指してがんばります。\(^o^)/\(^o^)/\(^o^)/

そうそう、秋葉原で、すっごい安いのに、それなりにいい音が出るギター発見したんですよ。ちょっとした宴会でコーラスマスター出来るくらいにはギター引けるといいなって事で、明日パーチェイスします(゚∀゚)

またね!駄文に付き合ってくれてありがとうございました!

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 は最小限の構成でインストールされていたので、後は無事遠隔で操作出来ます。

またねー!