TIL

Today I Learned. 知ったこと、学んだことを書いていく

【PHP】MacにPHPとComposerをインストール

MacPHPとComposerをインストールした

PHP

brew install php

Composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer

しっかりとインストールされている

> composer -V
Composer version 1.8.5 2019-04-09 17:46:47

参考文献

【MySQL】CONVERT関数

CONVERT(expr, type)

例)符号付き数値に変換する

CONVERT(TBL.COL1, SIGNED)


以下のように暗号化されたカラムを復号化し、数値に変換するときに使う?

CONVERT(AES_DECRYPT(TBL.COL1, 'key-code'), SIGNED) 


暗号化されたデータがblobのカラムに入っていて、数値で比較しようとしたときにバグが出たから、SIGNEDに変換するようにして対応した

CONVERT(expr USING transcodinf_name)

例)文字コードUTF-8の文字列に変換する

CONVERT(TBL.COL1 USING utf8)

参考文献

【PHP】DockerでPHPの環境を作る

仕事で使えそうなPHPというものを家で勉強したいと思ったから、環境を作ることにした。

環境構築につまづきたくないから、Dockerを使うことにした

Docker で PHP の開発環境を構築する方法 - UPDATE をまんま実行したらできたけど、メモしておく。

Dockerfileを作成する

> mkdir php7-apache; cd php7-apache
> echo "FROM php:7.3.4-apache" > Dockerfile

imageのbuild

php_apache_imageという名前のimageをbuildする

> docker build ./ -t php_apache_image

マウント用ディレクトリの作成

ホスト側のディレクトリをコンテナにマウントするためのディレクトリを作成する

> mkdir html

このディレクトリにファイルを作成していく

コンテナの起動

> docker run -d -p 80:80 -v /Users/tamago324/src/php/php7-apache/html:/var/www/html --name php_apache_container php_apache_image

docker run -d -p {ホストのポート}:{コンテナのポート} -v {ホストのディレクトリ}/{コンテナのディレクトリ} --name {コンテナ名} {イメージ名}

こんな簡単にマウントできるのすごい

起動の確認

> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
f19ca19f6f55        php_apache_image    "docker-php-entrypoi…"   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp   php_apache_container

STATUSがUPになっていれば起動している

Webページの作成

ホスト側のhtml/index.phpを作成する

<?php
phpinfo();

localhost/index.php にアクセスし、作成したページを確認する

いろいろ情報が出ていればOK!

とりあえず、PHPが動かせる環境ができたからよかった

少しずつやってみよう

Laravelというものを使いたい!!

参考文献

2019/03 記録

今月の出来事

  • fish入れようとして失敗した
  • gorilla.vimにいった
    • ujihisaさんにあって、すごいってなった.
  • 実践Vimを少しずつ読もうとして、やめちゃったこと
  • Pythonチュートリアルの本を買って、一通り読んだ
    • 実際にアウトプットするべき。そうしないと身につかない
  • flaskでLINEBot作った
    • pillowで画像加工
    • heroku
  • deniteのSource作成したい
    • Shougoさんにフォローされた
    • 4月になったらやるぞ!!
    • 小さくやっていこう
      • まずはmemobook.nvimを固めていく
  • hugoやろうとしてやめた(deniteのSourceに使えるかもと思ったけど、そこまでガチガチにやらないから)
  • Goやろうとしてやめた
    • 作りたいものがないから
    • Pythonだと、Neovimのプラグインを書けるから楽しい
      • 作りたいものがないとできないのはやばいかも...?
      • 学ぶことを楽しむ。知れることを楽しむくらいじゃないと!
  • Google翻訳をするNeovimのプラグインを作った

やろうと思ってやめたこと

  • fishのセットアップ
  • Goの学習
  • 実践Vimを少しずつやろうと思ってやっていない
    • 本当に小さくでいいからやろう

できたこと

読んだ本

  • チーズはどこへ消えた?
    • 変化に応じて、自分も変わることの重要性
  • 仕事と人生を激変させるなら99.9%アウトプットを先にしなさい
    • 最低限の知識を得たら、すぐに行動する。行動しながら足りないところを学んでいく
    • どんどん行動する
  • ざんねんな努力
    • 小さく初めて、やり始める意志の力を少しずつ小さくしていく
    • SNSで宣言し、やるしかないという状況を作ることで、行動ができる
    • 毎日、少しずつやる。苦痛にならないようなくらいの小さなことでいいから毎日やる。継続することが大事。

やっていること

  • Neovimのプラグイン作り
    • 少しずつVimを楽しんで、学んでいく
  • Linucの勉強

2019年4月にやること

ゴリラ.vim#2に参加した

第2回ゴリラ.vimに参加してきました!

ujihisaさんのライブコーディングが自分にとってはすごい参考になりました。 まず、関数のインターフェースを書く。呼び出しを書く。そして、「関数の実装、QuickRunで実行」を繰り返す。 書いていたのはVim scriptだったけど、Pythonでも同じように書いていけそうです!

UniteとVim shell(?)を使ったvim操作が華麗だった。 Uniteの後続のDeniteというものを使ってみようと思います。

懇親会では、ujihisaさんに「Vimではやらない方がいいこと。また、Vimではなく、IDEを使った方がいいことはありますか?」と質問してみたところ、「Webブラウジングくらい」と言っていました(半分冗談かもしれないですが…)

Vim最強では…!?

moppさんの発表で、社内でvimrcを読み合うという、とても楽しそうなことをしていて、正直、「羨ましい」と思いました。自分の会社でもVim活せねば…

また、気になるキーマッピングが2つありました。

選択範囲での検索

vnoremap / <Esc>/\%V

選択した文字列を指定の文字列で置換

vnoremap <C-R> "hy:%s/\V<C-R>h//g<left><left>

\Vで文字列そのものを検索できるのすごい便利!!!

今回の発表内で何回か「実践Vim」の話が出てきていました。自分はKindle版で買って放置していたので、また読み直してみようと思います!

今回もとても楽しいゴリラのセミナーでした!

次回の開催予定は4/18(木)らしいです!

https://gorillavim.connpass.com/

会場を提供してくださったQuipper Ltd様、ゴリラさん、登壇してくださった方々、楽しい時間を本当にありがとうございました!

また、会場スポンサー、登壇者を大募集しているそうです!

ゴリラ.vim #1に参加してきました

昨日、ゴリラ.vim #1に参加してきました。

https://gorillavim.connpass.com/event/119276/

ゴリラさんのvimへの熱意が伝わってきました。

ゴリラさんが、

「mattnさんみたいになります」

と宣言していたのかすごい印象的でした!

自分も、ゴリラさんみたいに行動力ある人になりたい。じゃなくて、行動力がある人になるぞ!

発表では、自分の知らないvimを見ることが出来たので、楽しめました!

また、発表中にQuickRunを使っている方がいて、コードがあんなに簡単に実行できていて、発表を見ながら感動してました! 早速インストールして、使ってます!!

懇親会では、TwitterGitHubで見るすごい方々と直接お話させたいただくことが出来ました。

懇親会で、ほかの方が「vimは最高のREPL。vimscriptを書いたら、そのままエディタが実行してくれるんだよ?」って、言っていて、「たしかに」って納得してしまいました。

また、会場を貸してくださった株式会社ディー・エヌ・エー様さん、主催者のゴリラさん、登壇してくださった方々、とても楽しい勉強会をありがとうございました!!

次回の日程が決まっているそうなので、立ち見でもいいので参加したいと思います!!

https://gorillavim.connpass.com/event/121394/

会場スポンサー、登壇者を大募集していそうです!!

文字列からクラスのインスタンスを生成 - VB.NET

例) ProjectName.Personインスタンスを生成したい

生成対象のクラス(ProjectName.Person)

Public Class Person
    Public name As String

    Public Sub New()
        Me.name = "hoge"
    End Sub

    Public Sub New(ByVal name As String)
        Me.name = name
    End Sub
End Class

生成するメインモジュール

Module Module1

    Sub Main()
        Dim personType As Type = Type.GetType("ProjectName.Person")
        ' 引数なしのコンストラクタ
        Dim personConstructor As ConstructorInfo = personType.GetConstructor(Type.EmptyTypes)
        ' Stringの引数を持つコンストラクタ
        Dim personConstructor2 As ConstructorInfo = personType.GetConstructor(New Type() {GetType(String)})

        Dim personClassObject As Object = personConstructor.Invoke(New Object() {})
        Dim personClassObject2 As Object = personConstructor2.Invoke(New Object() {"太郎"})

        Debug.Print(personClassObject.name)
        Debug.Print(personClassObject2.name)
    End Sub

End Module

出力結果

hoge
太郎

ポイント

  • Type.GetType()でクラスの生成
  • {Type}.GetConstructor()でコンストラクタの生成
    • 引数なしの場合、Type.EmptyTypes
    • 引数ありの場合、Typeインスタンスを生成し、渡す
  • {ConstructorInfo}.Invoke()インスタンスの生成

参考文献