基本的に怠Diary

学習ログを残したい

何が間違いなのか

どれも正しくて、間違っているんだよ^^

皆違って、皆いい^^

皆違うから、いろんな楽しみがあって、苦しみが合って、愛し合うんだよ^^

だから皆で正しいと思うことを話し合って、実行して、もっと良い世界にしよう^^

ただし無能、テメーはダメだ。

お前は死ね。

足手まといのカスはお前だけでなく周りを不快にする。

何が助け合いだボケ。

お前何もしてねえじゃねえか。

お前何ができるんだよ。お前が生きてることで何のメリットが有るんだよ。


と言われると何も言い返せません。

今日も私はやらかしました。とても優しい同僚がキレて、

上司や先輩からは被害が及ばぬように放置されています。

じゃあ直せよと言われる。うん、頑張るよ。

次があるだろと言われる。うん、次こそはうまくやるよ。

さてこれで何回目だろうか。

何度も改善しようとした、考えたでも駄目だった。

じゃあ次はどうするかじゃねえんだよ。

お前は無能なんだよ。

生きてはいけないんだよ。

死ね。死んで少しでも被害を少なくしろ。


さて、ここまで思考が進むと、だいたい二通りに別れる(と思ってる)

1.世界、社会が間違ってる

2.俺が間違ってる

1は多分テロとかに走るんじゃないんですかね(適当

2.は死ぬんじゃね。頑張って修正する人とかもいるのかなー

じゃあ私はなんでしょうか。

「私が正しい。」

世界は正しい。でも私も間違っていない。

それを信じている私が正しい。

第三の答えみたいな回答しつつ、実は1に近い。

私は、人間に助けられているから表では決してこのようなことを発言できませんが、

人間は嫌いです。

人間と関わって、辛くなかったことなんて一度もなかった。現時点で関わってよかった人間は

家族以外いない。

毎日が苦しい。

入社したての頃からずっと辛かった。

毎日やめたい気持ちでいっぱいだった。

やめなかったのはメリットがそれを上回っていたからだと思う。

けれどいつかそれが私を大きく飲み込むだろう。

そしたら、死ぬのか、それとも生きるのか。

それはそのときのお楽しみ。

yasnippetってなんだよ〜破界篇〜

破界篇って前にも使った気がする。

やすにぺっと?

snippetは断片的とかそんな感じだって書いてありました。

Emacsの便利なパッケージの一つにyasnippetというものがある。

なぜ今になって記事を書くのかというと実はこれまで利用してこなかったからである。

yasnippetとは、よく略語展開みたいな書き方がされてる気がする。

その単語で想像したのが、例えばJavaとかその辺でforと入力したら、

for(;;){}

みたいな感じでパパッと表示されたりするのかなーとか思ったりしたけど、

そうだとしたら言語によってはかなり便利だなーと思います。

んで調べてみた結果やっぱりそうだった。

さらにさらにcommon-lisp-snippetとかあったのでありがたーく使われてもらいました。

github.com

init.elには以下の二行を追加した。 ‘’‘lisp (require 'common-lisp-snippets) (add-hook 'lisp-mode-hook ’(lambda () (yas-global-mode t))) ‘’'

二行目コピペでよりよいものないか探したけど見つからなかったので他の

とこ見て真似て作った。なんか違う気がしてならないけど正常に動作してるのでいいやってなってる。

今のところlisp以外で使いたいyasnippetは見つからなかったしlisp-mode以外ではいらないので

この設定にしてます。

RubyPHPも見つからないんだもん仕方ないね。GoはEmacsでやらないし。

じゃあ、自分で書けって話ですけどね。

てか最近PHP書いてないです。RubyはたまにWebスクレイピングしたいときに触りますが

PHPはマジで何もしてないです。

PHPでできたことが、それRubyでいいじゃんとなり、

Rubyでできた一部のことが、それGoの方がいいじゃんとなる。 ちなみにCommon Lispでは何もできません。私のLisp力低すぎ

で、なんでClojureとか触ってるの

本当になんでだろう。

まあそこそこ一緒だと思った。反省はしていない。

なんとなく「プログラミングClojure」購入したので読書程度には利用するつもりです。

なんか内容難しそうなのでどうなるかはわりと察してます。

Common Lispの休憩(N回目)として利用します。

あー、また結局コード何も書いてない。

しかし記事としてはそこそこの量になってしまい、かつボツで前に2つほど消してるので

いい加減ポエムでもいいから投稿しとこう。

ここはポエムでも許されるからね!HAHA

Common Lisp初めて一月が立った。

最近の言語がいかに優しいかを理解した。

全然わからない。

それどころかListの操作すらね。

WebスクレイピングRssの取得もDB操作も何もできません。

コピペ改変知恵遅プログラマLispは難易度高かった。

派生?(でいいのだろうか)言語であるClojureが馬鹿フィルターみたいなこと言ってるの見たけど

そのとおりだなぁと思った。いや、Clojureは触ったことないけど

Common Lispでさえこれなのかと思うとね。

選んだ言語間違えたかなとは思っていない。

これまでにない、新しい感覚なので数年ほど使って成長したいと今は思ってる。

数日後飽きるかもしれないけど

car,cdrはまだいいとして、cadddrだのcdddarだのわけわからねえよ。

car of cdr of cdr of cdrみたいなこと書いてあったけど

頭悪すぎて使いこなせる自信がない

他の言語でも大したことできないだろうな実際できてない。

LandOfLispと初めての人のためのLisp進めてるけど

とりあえず本読むだけしかやってないので余裕で理解できない。

でもつまらないプライド働いてサンプルコード書きたくない病になってる。

プログラマとしては最強のアンチパターンになってる今日このごろ。

結局ここにもLispに関するコードとか書いてないしなっ

人間関係の末

僕は友人含めて関わらないことにした。

もう人間とは直接かかわらない。

間接的には関わるってちょっと都合良すぎないって

毎回考えていたけどこの脳内の批判になんで毎回答えていたのかわりと謎である。

何故なら本当に関わりたくないなら、治す必要などないのである。

俺は俺のやりたいことを損しない程度にやっていたら友達はできないけど

それでも生きていくことは可能なのである。

自分でも何言ってるかわからないけど、もう友達はやめた。

これからは休日は一人で、静かに、プログラミングとブログを書いて生活することにする。

それでいいんだ。僕も相手もそれが最善だろう。

オリックスなんでそんなに弱いの

そういえばLanf of Lisp購入しました。

GoとScalaRubyはどうしたって?

やめてはいない。でも気がついた。

俺はプログラミングで解決したい問題はただひとつ。

暇つぶしだった。

つまり俺は暇が潰せることができるならJavaScalaRuby、Go、COBOL

なんでもいいわけだ。

なんでもいいとは行っても暇つぶしなら楽しい方がいいのは至極当たり前な意見であり、

それがコロコロ変わるのは学習面として見ると非常に最悪なのだが、

趣味となると大した問題ではないのだ。

などという言い訳を考えながらLispを進めている。

しかし、趣味において趣味そのものを楽しむだけではもうダメな段階に来ているのかもしれない。

この先死ぬほど雑魚な僕が生き残っていくためには趣味を自分の糧にするのかもしれない。

とりあえずいつもの60ページの法則によりわりと進みが遅くなっている

読書として「初めての人のためのLisp」を読み始めているが

こちらは非常にわかりやすい

www.amazon.co.jp

もうすぐ試験。でもやる気はない。

前回ボイコットしたとき辛くなったので一応受けるけど

今後はもう受験申込すらしなくなるかもしれない。

我ながら糞だと思う。否定はしない。

死んだほうがいい。

僕は今後自分が楽しいと思ったことしか勉強しない。

clispを覚えてそこからelispへと昇華してEmacsをもっといいものにしたい。

・・・まあDBの勉強はほんの少しだけした。

けど今となってはツイッターアカウント復活とか死ぬほどどうでもいいし

給料アップしたりとかもあるけど、明日にでもやめるかもしれないので関係ない。

俺は弱い。じゃあどうすれば生き残れるについて考えたけど結局何も思いつかなかった。

思いつく前に限界がきてしまった。

生まれなければよかった

精神を病みました

前からだろ

もうダメ

毎回考えてた

どうすれば生き残れるのか

けど 最近はどうすれば楽になれるのかについて多く考えてる時間の割合が大きい。

どうしよう 

俺はどうしたらいい。

実は答えはもうでている

でもそれはまだできない。

ポイントが必要なんだ。

まだ足りない

僕の尺度ではもう少しと見ているが、侮ってはいけない。

まだまだ足りない。

でもそれでいい。

なんか楽しい。毎日ポイント貯めて、どんどん溜まっていって

後どれくらいかなとか、辛い中で、プログラミングもしていないのに

楽しい。

達成感。業務では喪失感と無力感しか味わえないのでしっかりと味わわないといけない。

仕事にも苦しい中に良さがあるってこれのことだったんだ

プログラマの夢は諦めました。

これからはポイントを貯めて楽になれるようにがんばります

野球よくわからないけどとりあえずオリックス応援することにした。

死ぬほどどうでもいいですがリポジトリいろいろ整理しました。

後アカウント2つあったんですが一つにしてさらにもういじらないリポジトリ消しました。

これからはコードとか公開して後悔するいく必要があると思い、

せめて完成までいけそうなコードだけ公開することにしました。

以上


それでね、情報とかいろいろ見るんだけど

いちいちサイト見に行って調べるのめんどくせえなあとか思ったりするわけですよ。

なんか情報とか手っ取り早く確認できるサイトねーかなー

???「ないならお前が作れ」

というわけで作ります。

Webスクレイピングで野球データを取りまくる。

今回のデータ取得にあたり、正直マナー違反かもしれないと思った。

一応一ページ一秒は守っていたし特にrobot.txtとか見つからなかったのでスクレイピングさせていただいだけど

12球団の全選手の個別のページ見に行って過去の簡易データ取りに行ってました。

次にWebスクレイピングやるときは最小のページ数で済むように構成するのが課題ですね。

# coding: utf-8


require 'open-uri'
require 'nokogiri'
require 'fileutils'
require 'active_record'

ActiveRecord::Base.establish_connection(
  "adapter" =>"sqlite3",
  "database" => "./baseball.db"
)
#この雑なまとめ方
class Fielder_score < ActiveRecord::Base
end
class Player < ActiveRecord::Base
end
class Pitcher_score  < ActiveRecord::Base
end

#選手のページからデータを取得
def insertPlayerData(uri,playerName,id,type)
  doc = getDoc(uri)
  doc.xpath('//div[@id="3yrsstat"]').each do |node|
    node.css("tr.yjM").each do |n|
      row = n.css("td").map(&:inner_text).compact.reject(&:empty?)
      #職人が一つ一つ手で入力しました。
      if type === "p"
        Pitcher_score.create(:p_id => id,
                             :year => row[0],
                             :term_name => row[1],
                             :defense_rate => row[2],
                             :game_number => row[3],
                             :win => row[4],
                             :lose => row[5],
                             :hold_save => row[6],
                             :pitching_time => row[7],
                             :hit => row[8],
                             :homerun => row[9],
                             :strikeout => row[10],
                             :four => row[11],
                             :dead => row[12],
                             :point => row[13])
      else
        Fielder_score.create(:p_id => id,
                             :year => row[0],
                             :term_name => row[1],
                             :batting_rate => row[2],
                             :game_number => row[3],
                             :stroke_cnt => row[4],
                             :hit => row[5],
                             :homerun => row[6],
                             :hit_point => row[7],
                             :score => row[8],
                             :struck_out => row[9],
                             :four => row[10],
                             :dead => row[11],
                             :sacrifice => row[12],
                             :sacrifice_fly => row[13],
                             :steal_base => row[14])
      end
    end
  end
  #サーバへの瞬間的負荷の軽減
  sleep(1)
end
#ドキュメント取得
def getDoc(uri)
  begin
  charset = nil
  html = open(uri) do |f|
    charset = f.charset
    f.read
  end
  rescue  => exception
    case exception
    when OpenURI::HTTPError
      puts "ページが見つかりません。#{uri}"
    when URI::InvalidURIError
      puts "URLが入力されていません。"
    else
      puts exception.to_s + "(#{exception.class})"
    end
    return nil
  end
  return Nokogiri::HTML.parse(html, nil, charset)
end

def player_get(type,term_num)
  baseUri = "https://baseball.yahoo.co.jp"
  uri = baseUri + "/npb/teams/#{term_num}/memberlist?type=#{type}"

  playerUri = []
  doc = getDoc(uri)
  team_name = doc.xpath('//title').first.inner_text.split("-")[1]
  position = type === "p"? "投手" : "野手"
  #投手の一覧を取得
  p_id = 0
  doc.xpath('//td/a').each do |node|
    playerUri.push(baseUri + node.attribute('href').value)
    reco = Player.find_by(:name => node.inner_text)
    if !reco
      Player.create(:name => node.inner_text,:current_team => team_name,:position => position)
      reco = Player.find_by(:name => node.inner_text)
    end
    p_id = reco[:p_id]
    insertPlayerData(baseUri + node.attribute('href').value,node.inner_text,p_id,type)
  end
end
#すべてのチームの選手の年度別の情報を取得する
def all_team_player_year_score
  #ここまでいびつなアレならいっそ特定ページからリンクを拾うようにしてもいいかも
  term_nums = [1,2,3,4,5,6,7,8,9,11,12,376]
  start_time = Time.now
  term_nums.each do |i|
    ["p","b"].map do |type|
      player_get(type,i)
      p "球団#{i}: #{Time.now - start_time}s"
    end
  end
  p "終了 #{Time.now - start_time}s"
end
all_team_player_year_score

DBにいれるとこが一番気に食わない。

ちなみに最終的にScalaJavaScriptで書き直す予定です。

Ruby好きだけどRailsはなんか使いたくないイキってる雑魚オタクです。

最近Reactを少々勉強しているのでそれ使いたい。

けど動かないことには始まらないのでとりあえずコマンドラインツールをRubyで実装してからその後のことは考えます。

なのでRailsになったり、sinatraになるかもしれません。

師匠が欲しい(届かぬ思い

追記

やらかした。term_nameってなんだよ。。。

機能追加中に気がついた。辛い。