鳩が鳴く

業務系男子からweb系男子になりました。覚えたことを書き殴るブログ

前職のトラウマをここに吐いておく

ゲーム系のウェブメディア会社に5年以上在籍していた。
耐え切れなくなり転職したのが、つい2ヶ月前。

今の職場に来て、人に対して臆病になっていたり、意見を言えなくなっている自分に気がついた。
時々、前職の辛さを思い出して、怒りと悲しみを混ぜたような気持ちになってやり場がない。

だからここに前職のトラウマを、自分のために吐き出しておく。
何度か見返して、書き直して、整理する予定。それで心に少しずつ区切りをつけたい。

前職に感じていた不満

給与の低さと残業代の未払い

・3ヶ月に1度、給与額が変更される
・給与額の根拠を聞いてもはぐらかされ、明確な指標も無い
・実質、社長に気に入られないと給与額が上がらない
・みなし残業を超えても、残業代が支払われない

給与額は数万円単位で下げられたりするので家計のやりくりに苦労した。
先が見えず家族に迷惑をかけてしまった。

給与システムを人事が開発中だ。などと言っていたが、
ブラックボックスであり、明確な指標が提示されることは一度もなかった。

目的がブレた形だけの制度

・フレックス制度をやるといいつつ何も実行されない
・人事が社員投票制のMVP制度を作ったが、何のMVPなのかたずねると「とりあえず誰か選んで」
・給与額に紐づくとされる評価制度の評価項目が3ヶ月毎に変更され、それ対するアナウンスが一切ない
・評価制度は自己評価を行うものだったが、提出後は一切フィードバックがない

コミュニケーションを嫌う組織

・不都合なことはすべて間に人を通してうやむやにするか、役割を変える風習がある
・意見を言っても通らない環境。むしろ邪魔者扱いで翌日から会議から外される
・最終的には役割や対話の時間から外されて辞めていく

休みが取れない環境

・前月から申請していた休みが前日に却下される
・目標を達成しないと夏休みなども却下され、夏休みが取れない
・休日出勤の代休も却下される

友人と2泊3日の青森旅行を計画し、宿も新幹線も全て予約をとったが、
その週になって休暇申請が却下され結局行けないこともあった。実家への帰省もよく却下されていた。

人への扱い

・辞めた人への悪口がとにかく多く、組織は悪くないとする風潮だった
・日報を書かせて毎日ダメ出しをする習慣

「人を人として扱わない会社」として、社員の間では共通認識としてあったと思う。
耳が聞こえなくなったり、吐き気が止まらないような人もいた。

奇妙な挨拶文化

・上司のチャットには必ず返事を返さなければならず、全体共有事項などに「承知しました」が毎回大量に並ぶ
・元気に挨拶しろ!(ただし経営陣は無言でOK)

朝出社したら一人一人に挨拶していけと言われたこともあったが無視した。

意味のない目標

・絵に描いた餅のような会社都合で作られた大目標が出てくる
・KPI、OKRなど言葉を並べてたてさせるが誰も腹落ちせず、やりきれず失敗する
・そもそも目標が社長の一言ですぐ変わるので、誰もついていけない

残業の多さ

・目標達成のためには残業も多くしなければならず、深夜作業が必要なメンバーも多く疲弊していた
・目標を達成しなければ自己責任で休日でも徹夜でも何でもしてやれと社長が指示していた
・「2日頑張って残り3日は休んでいい」が社長の口癖だが、それができる状況ではない仕事量と目標設定だった

雰囲気の悪さ

・社長と人事が1日中スマホゲームで遊んでいた
・社長の周りではダメ出しや悪口が横行していた
・近くにいてもみんながチャットでやり取りする、誰も喋れない雰囲気だった

離職率の高さ

・2018年だけで半分以上の人が辞めていった

辞めた人で会社を良く言う人は今まで見たことがない。

転職して2ヶ月の所感

以前からまとめていた自分のメモを公開してみた。
あくまで私個人の主観ですが、辞めて正解でした。

pythonでタプルを扱うときに見直す自分用メモ

タプルを扱った時のメモ

タプルのリストから特定のデータを取得する

タプルのリストから特定のデータを取得したいときは、dict化したほうがスッキリ書ける。

self.id = 'taro'
tuple = [
  ('taro', u"太郎"),
  ('jiro', u"二郎"),
]

タプルをそのままforで回すと「太郎」を取得したい場合は以下のようになる。

for id, name in tuple:
  if self.id == id:
    self.name = name
    break

タプルを辞書にしてgetすれば1行で書ける。ちなみにgetの第2引数はデフォルト値を設定できる。

self.name = dict(tuple).get(self.id, 'ゲストさん')
#dict(tuple)[id] この書き方だとidがないときKeyErrorになるのでget推奨

GAE(Python)でlistや連想配列をcsvファイルとして出力する方法

GoogleAppEngineでリストをCSV形式に変換してCSVファイルとして出力するサンプル

listをCSV形式に変換して出力する

import csv

hoge_list = []
for i in range(10)
  hoge_list.append(i)

self.response.headers['content-type'] = "text/csv; charset=utf-8"
self.response.headers['Content-disposition'] = 'attachment;filename="hoge.csv"'
writer = csv.writer(self.response.out)
writer.writerow(hoge_list)

連想配列の時はwriterowsを使う

lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]
...
writer.writerows(lists)

連想配列を使いたい時は、単純にwriterowsを使えばOK

RubyでMechanize使うときに読む自分用メモ

不定期でMechanizeを扱うことがあるのでここにメモ。
このブログをクロール、スクレイピングするサンプル。

インスタンス起動

agent = Mechanize.new

UAを偽装

agent.user_agent_alias = 'Windows Chrome'

ページを取得

 page = agent.get("http://oxydol.hatenablog.com/")

ページ内のタグを取得する(div、li、aなど)

 page.search('div')
 page.search('li[class="urllist-item recent-entries-item"]')
 page.search('li.urllist-item')

応用

 page.search('li[class="urllist-item recent-entries-item"]').search('a')
 page.search('li[class="urllist-item recent-entries-item"]').search('a')[0]

タグの情報を取得する(hrefの中身とかタグの中の文字とか)

 page.search('h1').search('a').text
 page.search('h1').search('a').attr['href'].text

タグ取得と内容取得の組み合わせ

  links = page.search('li[class="urllist-item recent-entries-item"]').search('a')
    for link in links
     link_page = agent.get(link.attr['href'].text)
     sleep(1)
    end

まとめ

とりあえずこれだけわかればだいたいクロールできる
postとかするならfield_withとか、forms使うのかなー

あ、agent.get時にsleepいれるの忘れずに!

GAEでローカル環境で画像が表示されない時の原因と対処法

GoogleAppEngineのローカル環境でGAEAPIのimages経由の画像が表示されない現象が発生したのでメモ。

悪夢のはじまり

get_serving_urlで返されたURL(_ah/img/XXXXXX)を叩いたら以下エラーが・・・

AttributeError: 'ImagesNotImplementedServiceStub' object has no attribute '_OpenImageData'
"GET /_ah/img/XXXXX HTTP/1.1" 500 -

画像が表示されなかった理由

GoogleAppEngineAPIのimagesを使うのに必要なpillow(PIL)が入ってなかった。
あぁ、mac買い替えた際にpillowを入れ忘れた。。

追記

この記事、ずっと下書き状態で忘れてたので出しました。

プログラミングが遅い理由のメモ

ソースを読む力(コード理解、工数把握)→読書、他の人のgitfubのコードを読む
javascriptjqueryの勉強(不安要素解消)→実際に書く、
cssを早く、綺麗に組めるようになる

読書メモ

JavaScript: The Good Parts
リーダブルコード→娯楽
リファクタリング―プログラムの体質改善テクニック
goodparts
開眼! JavaScript
Effective JavaScript
jQuery最高の教科書


見積もりとの大幅なズレ

  • コードリーディングの甘さ
  • 細かな箇所を読み切れてない
  • PC、SPを考えてない
  • 運用に何が必要かまで先読みできていない
  • 必要なコードをメソッドレベルまで洗い出ししておく
  • 移植することだけじゃなく、自分が実装した方が早いものか判別する

pythonでfor文をまわしてカウントするenumerate関数が便利すぎる

Pythonでfor文を回していてループカウントを取りたくなった。変数を置いてインクリメントするよりも簡単なenumerate関数を見つけました(今更感)

list = ["pigeon","owl","sparrow"]
for i, j in enumerate(list):
  logging.info("%s %s"%(i, j))

- - -
0 pigeon
1 owl
2 sparrow

便利だなー