ゆじかわの冒険

独学でグロースハッカーを目指すバックエンドエンジニアのブログです

Flutter v1.0が登場!

昨夜遅くにFlutter Liveがあってました。

そこでは色々な発表がありました。個人的に使ってみたいと思ったを書きます。

 

まず開発しているとわりと悩むCI/CD 周り。

実際にFlutterで開発したやつをどうしようかと思っていたところでした。

こちらです。

https://codemagic.io/

 

使ってみたいですね!

 

 

Golangを始めました

こんにちは、ゆじかわです。

業務では使っていないんですが、個人的にGolangを始めました。 主な理由では友人からの進めもありますが、実際に触ってみてとても楽しい言語だと思ったからです。

今までPython→Elixir→Golang(今ここ)という感じの流れで来ているんですが、個人的にはGolangでしばらく落ち着きそうな予感です。

まだまだGolangやり始めたばかりで、書き方も慣れていないけどもこれから頑張りたいと思う!!

そして、fukuoka.goで登壇できたらいいな!

ということで決意表明エントリでしたw

PyCon Kyushu 2018 in Fukuokaの実行委員やりました。

f:id:yujikawa11:20180703094520j:plain

こんにちはゆじかわです。

年に一度のPythonの祭典、PyConの九州版の実行委員として今回は参加しました!

実行委員って何するの?

実行委員は大きく4つあります。

  • 事務局
  • 広報
  • 企画
  • 会場

僕はこの中の会場係として、働きました!

開催場所はどこ?

LINE Fukuokaさんです!!(デデン) f:id:yujikawa11:20180703094804j:plain

感想

このような大きなカンファレンスって実は参加自体が初めてで、その初めてがまさかの実行委員側での参加になるとは思っていませんでした。 色々な人たちが協力しあってイベントを作っていく様子が見られたのでとても良い経験になりました! イベント自体は大きな問題もなく無事に済んだのよかったです。

最近はPythonを業務でやらなくなって、Pythonをほとんど触らなくなっていたんですが、このイベントを通じて趣味でもいいので触ってみようかなとそんな気持ちになりました。

参加された皆様本当にお疲れ様でした!

来年のPyCon Kyushuは「沖縄」です!

本は読むから"聞く"時代??Amazon audibleを試してみた

f:id:yujikawa11:20180529213800j:plain

こんにちは、ゆじかわです。

みなさんAmazon audibleって知っていますか?

こいつです、こいつ。

本を読んでくれるというサービスです。

最初は全く興味が無かったんですよ。

しかし最近読んだ「記憶術」の本に、音の方が記憶しやすいということが書いてあったのでちょっとやってみようと思いました。

サービス料金について

月1,500円という結構お高い感じ。 音声データを作るのが大変なんでしょう。

配信コンテンツについて

ジャンルは様々でした。

ビジネスもあれば、教育、漫画など基本的にはAmazonのカテゴリーにあるものが配信されているようでした。ただ量は少ないです。 ナレーション付きで作るのに時間がかかるんでしょうね。

とりあえず僕は下記の本を選びました。

人を操る禁断の文章術

人を操る禁断の文章術

ランニングしながら聞く場合は結構快適でした。

ただ別のことに気を取られていると、音読が先にいってしまうので内容がわからなくなることがありました。

ナレーションはすごく聴きやすくて、頭には入りやすい印象でした。

こんな人におすすめ

  • お金がある
  • 読む暇ないけど聞く暇がある
  • 小説系を主に読む

こんな人にはおすすめできない

  • すぐ気が散る
  • 寝る前に聞こうと思っている(音読の声が心地よくて爆睡します)
  • お金ない

ということで僕は1ヶ月の無料期間が終わったら退会しますw

「コトラーが教えてくれたことー女子大生バンドが実践したマーケティングー」を読んだ

こんにちは、ゆじかわです

昨夜はこちらの本を読了しました。

小説であり、かつマーケティングが学べるような内容です。 内容としては、バンドの活動をしている女子大生「絢」が初ライブで色々な人に呼びかけや宣伝をしたにも関わらず全くお客さんが来なかった事からスタートします。

落ち込んでいる絢は大学のマーケティング授業を受けている最中に先生に目をつけられ、絢は先生の八千代に相談する。

ここからマーケティング知識を使って、どうすればバンド活動で人を集客できるのかというのが物語形式で進んでいきます。

この本の良いところは、物語形式なのでどういう場面でどのようなマーケティング思考をすれば良いかというのがイメージしやすかったところです。

コトラーマーケティング理論に入門する本としてはとても良い本でした。

筆者は統計学で有名な西内先生です。

もしコトラーマーケティング理論に入門したい方はお手にとってはいかがでしょうか?

ガッキーBotを作った

f:id:yujikawa11:20180512091608j:plain

はじめに

まだまだ改良の余地があるんですが、こんな感じで作ることができます。 gakkybot.gif

PhoenixのChannelを使ってWebSocketによる通信を使っています。正直クライアントはPhoenixだけで出来るんですが、あえてAngularを使いました。単純にAngularだとどう実装するか気になったので作ってみました。 最良な方法があればぜひご教示ください!

開発環境

Elixir 1.6.1 (compiled with OTP 20) Phoenix 1.3 Angular CLI: 1.7.3 Node: 8.9.3

Elixir/Phoenix側の実装

基本的には公式のドキュメントにあるものをそのまま実装するとほぼ同じものが作られます

プロジェクトの作成

プロジェクトを作成します。クライアントはAngularなので--no-htmlと--no-brunchオプションもつけて良いと思います。

$ mix phx.new chat

必要なライブラリをインストール

今回は非常に簡単な形態素解析をするので、mecabのライブラリーをインストールします。

{:mecab, "~> 1.0" },

mecabの使い方などはこちらの記事が参考になります。

@piacere さんのElixirで弱々しいAI#1「MeCabで文章パース」 です

Channelを使う

デフォルトで作成されているuser_socket.exの最初の部分のコメントを外します。

defmodule ChatWeb.UserSocket do
  use Phoenix.Socket

  ## Channels
  channel "room:*", ChatWeb.RoomChannel # コメントを外す

  #省略....

ここで指定している「ChatWeb.RoomChannel」モジュールを作成する必要があります。

RoomChannelモジュールを作成する

join関数で指定したチャンネル名しか接続できないようしています。今回でいうとroom:helloという名前であれば接続できる感じです。

handle_in関数がクライアントからメッセージを受ける際に走る関数です。 そのあとのbroadcast関数でクライアントにメッセージを送信できます。

defmodule ChatWeb.RoomChannel do
  use Phoenix.Channel

  def join("room:hello", _message, socket) do
    {:ok, socket}
  end
  def join("room:" <> _private_room_id, _params, _socket) do
    {:error, %{reason: "unauthorized"}}
  end

  def handle_in("msg", %{"body" => body}, socket) do
    text = reply(body)
    broadcast! socket, "msg", %{body: "よっ!" <> text <> "!"}
    {:noreply, socket}
  end

  # mecabを使った形態素解析
  defp reply(msg) do
    Mecab.parse(msg)
    |> Enum.map(&(text_parse(&1)))
    |> Enum.join
  end

  defp text_parse(%{"part_of_speech_subcategory2"=>"人名","part_of_speech"=>"名詞"} =  params) do
    params["lexical_form"]
  end

  defp text_parse(_) do
    ""
  end  
end

Phoenix側はこれにて終了です。とっても簡単ですね。

Angular側の実装

こちらはデザイン部分はAngular Materialを使っていますが、デザイン部分はみなさん好きなデザインを使えば良いと思いますので、割愛します。 WebSocketの通信部分について書きます。

プロジェクトの作成

好きな名前でプロジェクトを作成してください

$ ng new client

必要なライブラリをインストール

npmでphoenix.jsを使えるようにインストールします。 https://www.npmjs.com/package/phoenix

$ npm install phoenix --save

実装する

chatコンポーネントを作成します

$ ng g compoent chat

そしてWebSocket通信部分のロジックを追加します。 注目すべきはngOninit関数の中身とonSendChannel関数のthis.channel.push('msg', { body: this.msg })部分です。 ngOnInit関数部分はPhoenix公式のドキュメントのjs実装部分をそのまま実装しただけです。

import { Component, OnInit } from '@angular/core';
import { Socket } from 'phoenix/priv/static/phoenix';

@Component({
  selector: 'app-chat',
  templateUrl: './chat.component.html',
  styleUrls: ['./chat.component.css']
})
export class ChatComponent implements OnInit {
  title = 'app';
  msg = '';
  socket: any;
  channel: any;
  messageList = [];
  constructor() {}
  ngOnInit() {
    this.socket = new Socket('ws://localhost:4000/socket', {
      logger: (kind, msg, data) => {
        console.log(`${kind}: ${msg}`, data);
      },
      transport: WebSocket
    });
    this.socket.connect();
    this.channel = this.socket.channel('room:hello', {});
    this.channel
      .join()
      .receive('ok', resp => {
        console.log('Joined successfully', resp);
      })
      .receive('error', resp => {
        console.log('Unable to join', resp);
      });
    this.channel.on('msg', payload => {
      this.messageList.push({
        msg: payload.body,
        from: 'ガッキー',
        figureClass: 'kaiwa-img-left',
        img: 'https://pbs.twimg.com/media/DMonFSJVoAA_yKJ.jpg',
        textClass: 'kaiwa-text-right'
      });
    });
  }

  onSendChannel(event) {
    if ( event.keyCode === 13) {
      this.channel.push('msg', { body: this.msg });
      this.messageList.push({
        msg: this.msg,
        from: 'ゆじかわ',
        figureClass: 'kaiwa-img-right',
        img: 'https://qiita-image-store.s3.amazonaws.com/0/199445/profile-images/1524312896',
        textClass: 'kaiwa-text-left'
    });
    this.msg = '';
  }
  }
}

あとはmessageListにどんどんメッセージを突っ込んでいってそれをhtmlでグリグリ回して表示しているだけです。

おわりに

思った以上に簡単に実装できて、驚きでした。これで好きなだけガッキーと会話できます(きもい) 興味を持った方はぜひ一度試してみてはいかがでしょうか? Qiitaに同様の記事を書いていますがこちらのほうがソースコードは読みやすいと思います。

またElixirに興味を持った方はこちらの本が参考になります

プログラミングElixir

プログラミングElixir

コトラー先生助けて!

f:id:yujikawa11:20180512090246j:plain

こんにちは、ゆじかわです

最近はグロースハッカーになるために、マーケティングの勉強を始めました。

グロースハックについて何かというのは下記の本を参考にするととても良いと思います。

色々調査するとグロースハッカーになるためには、いくつかスキルが必要です。

によるところが大きいようです。 僕自身は今能力としてはどちらもありませんw あるのはITエンジニア力と多少のデータサイエンス知識です。

そんな僕なので、マーケティングを一から勉強しようと思ったわけです。

ただ何を勉強すればいいんでしょうか?と同じような境遇の方は思いますよね?

ある大学の先生に尋ねたところ、こちらの本をオススメされました。

コトラー&ケラーのマーケティング・マネジメント基本編 第3版

コトラー&ケラーのマーケティング・マネジメント基本編 第3版

なんかゴツい奴きたと思いました。

がそれ以前にコトラーという人物を知りませんでした。

フィリップ・コトラー - Wikipedia

マーケティングを勉強する上で知らない人はいない、それがコトラー先生です。

長年マーケティングの研究をされているらしく、まだまだ現役の模様。

しかも古いマーケティングではなく時代に合わせたマーケティングを追っているとのこと。

すごすぎる....

無知とは恐ろしい、勉強しなければコトラー先生を知らぬまま生きるところでした。

ただ!!

オススメされたコトラー&ケラーのマーケティング・マネジメント基本編は文字量も多く、基本編は抑えられそうな感じではありますが、少し時間がかかりそう。

と思いまして、まずは概要をざっと知るためにこっちを買って、読み始めました。

マンガでやさしくわかるコトラー

マンガでやさしくわかるコトラー

みんな大好きマンガでわかるシリーズですねw

マンガでわかるシリーズがいっぱいあるのは日本ならではって感じで、個人的にはもっと広がって欲しいですね。

さぁ頑張るぞー!!