Post

プログラミング

2018-11-13 21:13:03

Golangのポインタ概要

概要Golangのポインタの基本では参照渡しと値渡しの違いの観点からポインタについて書いたが、それ以前にポインタを扱っているうちに混乱してきたため、ポインタの概要をまとめる。 ポインタ型とは メモリー上のアドレスを記憶する変数の型のこと ポインタ型の定義 *を使って定義する var s *string // 変数sはstring型のポインタ。型は*string アドレス演算子と間接参照演算子アドレス演算子 & 任意の値からポインタ型を生成し、アドレスを得る 間接参照演算子 * ポインタ型変数から値を参照する(デリファレンス) ポインタ型変数package main impor...

プログラミング

golang

2018-11-13 15:43:42

Golangでの変数定義・宣言のパターンまとめ

概要Golangでの変数定義・宣言のパターンをまとめる 変数の定義・宣言における注意 1文字目が大文字の場合は、他のパッケージからも見える変数 1文字目が小文字の場合は、そのパッケージでしか見えない変数 変数の定義・宣言Variable declarationsvar i int fmt.Printf("%T", i) // int var a, b, c string fmt.Printf("%T", a) // string fmt.Printf("%T", b) // string fmt.Printf("%T", c) // string var s = "Hello World...

プログラミング

golang

2018-10-04 15:24:31

Golangの関数についてー関数値/コールバック関数/無名関数

概要Golangの関数において、以下3つについてまとめる。 関数値として扱う場合の関数 関数を引数として扱う関数 無名関数の定義 関数値 クロージャー 関数値として扱う場合の関数package main import ( "fmt" "testing" ) func sayHi() string { return "Hello" } func main() { greetA := sayHi() greetB := sayHi fmt.Println(greetA) fmt.Println(greetB()) } コールバック関数package m...

プログラミング

golang コールバック関数 関数 無名関数

2018-09-20 16:32:36

Jestで始めるJavaScriptのテスト

概要Jestを使ってJavaScriptのテストをかいてみる。 準備jestとESModulesを使いたいのでbabel-preset-2015をインストールしておく。(babel-jestはjestに用意されている。) npm install --save-dev jest babel-preset-2015 .babelrcの中身はこんな感じ。 { "presets": ["es2015"] } package.jsonはこんな感じ。 { "scripts": { "test": "j...

プログラミング

es5 javascript babel babel-jest ESModules jest

2018-09-03 12:48:54

Golangのポインタの基本

概要Golangのポインタ基礎についてまとめる。 前提 変数とメモリの関係についてイメージできる程度の知識 ポインタとは何かポインタは変数のアドレスを指す。変数のアドレスを通じて呼び出し元の変数の値を変更することができる。 GolangではC言語ライクなポインタは用意されている。Golangでのポインタでは、変数Tのポインタは*T型で、ゼロ値はnilとなる。 package main import "fmt" func main() { i := 10 // &(アドレス演算子)を使い、変数のアドレスにアクセスする // 変数pointerに変数iのアドレスを格納...

プログラミング

golang ポインタ 値渡し 参照

2018-08-15 12:36:20

CircleCI2.0でPHPUnitのコードカバレッジを出力する

概要CircleCi2.0でPHPUnitのコードカバレッジを出力する 環境 CircleCi2.0 docker docker-compose PHPUnit6系 PHP7.2系 手順phpunit.xmlの設定を調整するカバレッジの対象としたいソースを指定する。 <filter> <whitelist processUncoveredFilesFromWhitelist="true"> <directory suffix=".php">./app</directory>...

プログラミング

Docker circleci circleci2.0 phpunit

2018-07-17 01:05:15

JavaScriptで始めるアルゴリズム

概要JavaScriptでアルゴリズムを学ぶ。 サーチのアルゴリズムリニアサーチリストや配列のデータに対して、先頭から順番に比較を行っていくアルゴリズム。 配列の長さ分処理を繰り返し、目的のデータに到達したら処理を終了する。目的とするデータが後ろにあるほど処理が遅くなる。 const targetData = 5; const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; (function () { for (let i = 0; i < data.length; i++) { if (targetData == data[i])...

プログラミング

アルゴリズム バイナリーサーチ リニアサーチ バブルソート セレクションソート

2018-06-15 11:31:46

GraphQLとは

GraphQLとは Facebookが開発 APIのためのクエリ言語 APIのリクエストのデータ形式とレスポンスのデータ形式が似ているため、ユーザーフレンドリー RESTはアーキテクチャ(設計)であり、GraphQLは言語(DSL)である REST APIとGraphQLの比較REST APIのAPI形式エンドポイントに対して、HTTP動詞でリクエストを投げる curl https://api.bmf-tech.com/v1/configs [ { "id": 1, "name": "title&q...

プログラミング

api HTTP rest GraphQL

2018-06-11 21:36:02

Atom×TidalCycles×SuperColliderでライブコーディングをはじめる

概要プログラミングで音楽をつくってみたいと思い、音響プログラミングに手を出してみた。 準備 Mac Atom Git Homebrew Haskell Tidalcycles SuperCollider Mac、Git、Atom、Homebrewは既に用意されている前提で話を進める。 HomebrewでHaskellとTidalCyclesをインストールするbrew install ghc brew install cabal-install cabal update cabal install cabal-install cabal install tidal Atomにtidalcycl...

プログラミング

atom git haskell homebrew tidalcycles

2018-06-08 22:41:42

SPAを構築したときにハマったこと

概要以前、LaravelにSPAを組み込む時に考えたディレクトリ構成とnginxのconfファイルというタイトルの記事を書いたが、そこで記載したnginxのconfが不十分だったため、改めて問題点を整理、解決した。 前提 History API nginx SPAを構築したときにハマったことnginxの設定リロードしても常にindex.htmlを返すように設定する必要がある。こんな感じでtry_filesを使ってconfを設定する。 location / { try_files $uri $uri/ /index.html; } jsファイルなどのソースのパスindex.h...

プログラミング

nginx spa

2018-06-08 02:18:43

DIとサービスロケーター

概要DIとService Locatorの違いについてまとめる DIとは デザインパターンの一種 依存性注入 オブジェクト間の依存性を分離 オブジェクトの実行時に必要なオブジェクトが注入されるようにする テストしやすくなる DIパターンの実装DIパターン(コンストラクタインジェクション)を実装してみる。なお、DIパターンには、コンストラクタインジェクション、セッターインジェクション、メソッドインジェクションなどコンストラクタ以外からDIする方法もある。比較のためにDIではないパターンとDIのパターンの両方を実装する。 DIではないパターン<?php class SlackNotif...

プログラミング

DI サービスロケーター デザインパターン

2018-05-13 19:19:01

ダック・タイピングとは

概要ダック・タイピングについてまとめる ダック・タイピングとは 動的型付けオブジェクト指向プログラミング言語において、オブジェクトができることはオブジェクトそのものが決定する インターフェースの全てのメソッドを持つオブジェクトは、インターフェースを実装していなくともオブジェクトはインターフェースを実装しているとみなせる、ということ If it walks like a duck and quacks like a duck, it must be a duck. 参考  Wikipedia - ダック・タイピング

プログラミング

ダック・タイピング

2018-05-11 11:52:09

ソフトウェア開発の法則

概要ポステルの法則 Jon Postel 送信するものに関しては厳密に、受信するものに関しては寛容に ポステルがTCPを規定したRFC793にて記載された1節が一般化されたもの インターネットの通信における原則 パーキンソンの法則 Cyril Northcote Parkinson 第1法則  仕事の量は、完成のために与えられた時間をすべて満たすまで膨張する 第2法則 支出の額は、収入の額に達するまで膨張する 「パーキンソンの法則:進歩の追求」にて提唱された法則 コンピューターへの応用 データ量は与えられた記憶装置のスペースを満たすまで膨張する パレートの法則 Virfredo...

プログラミング

ソフトウェア開発

2018-05-13 16:00:43

ポリモーフィズムとは

概要ポリモーフィズムについてまとめる ポリモーフィズムとは Poly(複数の)Morphism(形状) 複数の異なる型に対し、共有のインターフェースを提供すること 引数を受け取ったインスタンスがクラスによって違う振る舞いをすること ポリモーフィズムの種類 アドホック多相 関数が異なる型の引数に対してそれぞれ異なる実装を持つ 多重定義、関数のオーバーロードによって実現 パラメータ多相 型指定のないコードが書かれ、それぞれの型に対して透過的に使用できる場合 型を引数として渡すことで様々な型に適用することができる ジェネリクスやテンプレートによって実現 部分型付け 共通の上位型を持つ複数の...

プログラミング

ポリモーフィズム

2018-05-04 18:02:48

ソフトウェアのテスト技法の基本まとめ

概要はじめて学ぶソフトウェアのテスト技法の第1章を要約します。参考ページをサブタイトル横にメモします。 テストのプロセステストとは何か?(p.12)「ソフトウェアの品質の測定・改善を目的とし、テストウェアの開発・利用・保守と平行しながら進めるライフサイクルプロセスのこと」 Bories Beizerはテストを成熟度別に5段階のレベルに分けている。 レベル 成熟度 0 デバッグとテストに違いはない 1 ソフトウェアが動作することを示す 2 ソフトウェアが動かないことを示す 3 プログラムが動作しないことによる危険性を許容範囲に抑える 4 精神的な規律 レベル4...

プログラミング

test

2018-04-21 11:05:19

Golangの勉強で参考にした本とリンク

概要golangの勉強をする時に参考にした本とリンクのまとめ。 本 プログラミング言語Go 教典 スターティングGo言語 読みやすい。わかりやすい。プログラミングの素養が高い人には平易すぎる内容かもしれない。 Go言語によるWebアプリケーション開発 Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る リンク golang.jp A Tour of Go astaxie/build-web-application-with-golang 本を購入せずともこれを読んでおけばおおよそのキャッチアップができる気がする Go Data Structures goのデー...

プログラミング

golang

2018-04-11 22:15:48

Laravel Homesteadを使ったLaravelの環境構築

概要Homesteadを触る機会があったのでざっくりまとめる。 準備以下のツールは用意しておきましょう。 composer vagrant virtualbox ssh key 鍵つくっておいてください 手順Laravelをインストールlaravelのインストールとcomposer installを実行しましょう。 composer create-project "laravel/laravel=5.5.*" projectname cd appcomposer install HomeSteadを用意Vagrant boxを用意します。 vagrant box...

プログラミング

laravel vagrant virtualbox composer homestead

2018-04-11 13:54:10

テストケースの種類と洗い出し

概要テストケースの基本的な種類と洗い出し方についてのざっくりまとめ。 テストの目的 バグを発見する 品質保証 品質改善(リファクタリング) テストの種類 ユニットテスト メソッドの仕様を確認するテスト ドメイン層のpublicメソッドが対象とする インテグレーションテスト ユースケース(一連の処理)に基づいたテスト ビジネス的に重要なケースを優先的に対象とする テストケースの洗い出し 正常系 想定しているインプットに対し、想定したアウトプットが行われているか 異常系 想定していないインプットに対し、対応ができるかどうか 同値分割 同値クラスに分ける・・・テスト結果をグル...

プログラミング

test

2018-07-01 19:37:24

Golangの開発環境を構築

概要Goの環境を構築します。 Goの環境構築Goをインストールするインストール手段は省略します。私はanyenvというツールでインストールしています。 GOPATHを指定する.bashrcまたは.bash_profileにGOPATHを指定します。 export GOPATH=$HOME/localdev/project/go_dev // 好きなように設定してください PATH=$PATH:$GOPATH/bin Goのディレクトリ構成を確認するローカル環境でのディレクトリ構成は公式ドキュメントに従う形で構成していきます。 go_dev/ ├── bin ├── pkg └── src g...

プログラミング

golang

2018-02-28 10:37:27

モダンなJSの話──Proxy

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 ProxyとはProxyはECMAScript 2015から追加されたオブジェクトで、オブジェクトが持つ機能をラップすることにより、オブジェクトの機能をカスタマイズすることができます。 Proxyの関連用語Proxyを知る上で必要な用語です。 handler・・・トラップを入れるためのオブジェクトで、プレースホルダ的な扱いをされます。 trap・・・Proxyがプロパティへのアクセスを実装するためのメソッド。 target・・・プロキシするオブジェクト。 invariant・・・...

プログラミング

es5 es6 javascript