Ich habe hunger

あふりかエンジニア、アフリカ向けのB2BのSaaSを開発する

やってることは同じ

多分、どこで仕事をしてもやってることは同じなんだと思う。

もちろん、どこで仕事するかによって、事業や地域、文化や人という変数はそれぞれ違い、それを取り上げていくと無限にパターンは存在するんだけども、どこかの地域で仕事をする限り文化的な背景や人という部分は情報を獲得していきながら変数を定数化していくことが必要で、そういうことを繰り返していく。変数を如何に定数化していくか、という部分と最後まで変数のままで残っている部分とどう戦っていくかというところが非常に面白い。面白いというか、面白いと思わない人はやってられないんだろうな、と思う。

こういう感覚を持っていると、どういうところを対象にしても色々もがいて反応を見てそれをフィードバックしながら事業を進めていく、という感じになって、どういうとこを対象にしても本質的には「やってることは同じ」なのかな、と思う。

それが、経営者なら事業が対象になるし、事業部長なら事業部全体、課長なら課という風にそれぞれ持ってる範囲は違うし、難易度も見るべきこと、粒度は違うけど、とはいえ本質的には一緒なのかな、と。

とはいえ、事業ドメインや地域みたいなところで苦労の差とかはめちゃめちゃあると思うけどね!

僕はまだアフリカの洗礼を受けていないので、早くアフリカに行きたいな、と思います₍⁽⁽(ી(*´ω`*)ʃ)₎₎⁾⁾

ウガンダな環境で働くエンジニアも少し増えた

sugi511.hatenablog.com

以前、この記事を書いたおかげで何人も、と書くと大げさだけども色んな方からお声かけいただいたり、こっちが声かけたりして少しエンジニアが増えました。本当にありがとうございます。

まだまだ、僕自身が未熟なのもあって恩返しをきちんと出来るかは分かりませんが、一緒に手伝ってくれる人には気持ちよく働いてもらえるように頑張りたいです₍⁽⁽(ી(*´ω`*)ʃ)₎₎⁾⁾

人が増えた分見ないといけない部分が増えたりして、前より適当にながせる部分が少なくなってしまったのですが、その分実装の分担も出来るし、相談もできるし、めちゃ心強く感じているここ2ヶ月です。まだまだノリノリではないですが踏ん張りどころだと思って頑張っていきたいです。

そ・し・て!!

前回の記事を書いてからも、しばらく予防接種を受けてなかったんですが、

「てか、いつウガンダ来るんすか?」

って2月末に代表に予防接種さぼってたことを察知されたので、そっこーで行ってきました(っ・ω・)っ

ぽんぽん打てるもんじゃなくて1ヶ月待たないといけない・・・とか10日後じゃないとこのカードは生きない、とか色々あるんだなーって感じでした(そして予防接種高くない?いや、身体を守ると思うと安いんだけど)


そんな感じでウガンダに5月末ぐらいに行けたらいいなー。あー、航空券取らないと。

時間が出来た訳ではないが

最近やっと、Railsのプロジェクトでテスト書き始めた。

テスト書くために、メソッド見直してるとリファクタリングできそうなのがたくさん・・・(っ・ω・)っ

データが増えてくると遅くなるものもあるだろうし、複雑なロジックのは一旦後回しにして、シンプルなやつからこなしてテスト書く習慣をつけよう。

「社長と経営者は違う。その差はなにか」

diamond.jp

社長ではなく経営者にならなければ株主や従業員、あまたのステークホルダーへの責任を果たせない。

 その弱い会社の経営者の最大の任務は、「見切り」だ。見切りこそが、結果責任だけの社長を経営者に変えると言ってもよいほどだ。

 だから基本的には出たとこ勝負だ。それを猛烈なスピードで繰り返す。そしてダメだと思ったら即座に見切る。それを促す覚悟に満ちた経営者の力こそが、小さな企業が大きな企業に負けない力だ。

自分の認知の範囲での情報に基づいた結論付けをするのが判断だと思っているけど、ここで出てくる「見切り」というのは自分の認知外も含めたものに対して覚悟を決めた上で行う決断なんだと思う。

決断というのは、どうしても論理的に正しくなかったり、先が見えづらいものであるけども、自身の責任においてその選択を実行するというのが決断。この決断は失敗することもあるけど、その失敗した時に何が失敗したのか兆しは見えていなかったのか、など集中し振り返ることを繰り返すことで研ぎ澄まされてある種の超能力のように見える第六感のようなものが身に付くのだと思う。超能力欲しい。

rubyで初心者が間違いそうな間違いしてしまった(まぁ、初心者みたいなもんだけど)

あるあるなのかもしれないけどやってしまった。

RailsでUserモデルがあって、そこにenumでrolesみたいなのを定義している。
しかし、roles内にあるadmin権限は我々スーパー管理者しか触れないようにしたい。
なので、一般ユーザーには目に触れもしないようにしたいため、こうしていた。

    %tr
      - User.roles.delete(:admin)
      %th= f.label :role, "Role"
      %td= f.select :role, User.roles.map{|r| [r[0], r[0]]}

が、しかしこれをするとUserモデルのrolesから:adminから消し去ってしまって、二度と出て来ない。
つまり、スーパー管理者の編集画面ですら:adminの設定が見えなくなってしまって、admin権限を持つユーザーを作成することができなくなってしまった。


さすがにこれはまずい、と以下のように修正した。

    %tr
      - roles = User.roles
      - roles.delete(:admin)
      %th= f.label :role, "Role"
      %td= f.select :role, roles.map{|r| [r[0], r[0]]}


が、問題は解決されない。
で、なんだろうと思ったがこれにも問題があった。

User.roles.object_id
roles.object_id


と調べてみると同じobject_idを保有している。ので、deleteをrolesにかけたところでUser.rolesから:adminが消え去る現象は改善されない。
つまり同じオブジェクトに操作していることになっているので、cloneする必要があるので以下のようにした。

    %tr
      - roles = User.roles.dup
      - roles.delete(:admin)
      %th= f.label :role, "Role"
      %td= f.select :role, roles.map{|r| [r[0], r[0]]}


が、実はこれにも問題(以下略

結論から言うと、今回はこれでOKなんだけども、

User.roles[:admin].object_id
roles[:admin].object_id

は同じなので、実はまだヤバい。
rolesの中から(インデックスとして)消し去るだけなら良いんだけど、:adminの持つ値を自体を変えるとUser.rolesの中の:adminの値まで変わってしまうことになるっぽい。

    %tr
      - roles = Marshal.load(Marshal.dump(User.roles))
      - roles.delete(:admin)
      %th= f.label :role, "Role"
      %td= f.select :role, roles.map{|r| [r[0], r[0]]}

じゃあ、どうすんだよ!って話なんだけど、こうすると良いっぽい。


参考はこちら

qiita.com

SMSデータテックに遊びに行ってきました₍₍⁽⁽(ી(*゚▽゚*)ʃ)₎₎⁾⁾

株式会社SMSデータテック | SMS Data Tech Corporation.

友人の職場訪問って面白いですねw

開発室の一つを見せてもらったのですが、5人ぐらいの部屋できちんと区切られていて静かだしめちゃめちゃ仕事しやすそうでした!ああいうのうちの会社にも欲しーーーと思ったけど、ウガンダだし、東京に居るメンバーはリモートなのでそもそも不必要でした(´・_・`)

Pepperのブログも書いてるし、社内にPepperが居るのは知ってたんだけども、見せてもらった開発の部屋に2体も居るとは思いませんでしたw

dev-pepper.blogspot.jp



まともにPepperで遊ぶの初めてだったんですが、とりあえず年齢を測ってもらいました!

f:id:sugi511:20160209170755j:plain


見た目30歳超えてる僕としては最高の結果が出ました₍⁽⁽(ી(*´ω`*)ʃ)₎₎⁾⁾