やわらかテック

興味のあること。業務を通して得られた発見。個人的に試してみたことをアウトプットしています🍵

2020-01-01から1年間の記事一覧

クリスマスプレゼントの交換会にElixirで備える

今年で24歳になりましたが、いつになってもクリスマスってのはワクワクしますね。山下達郎さんのクリスマスイブを耳にすると「もう12月かぁ〜」と胸が苦しくなります。 そんなこんなで友人とクリスマスプレゼントの交換会をすることになりました(唐突)。 誰…

Elixirでモジュール内の関数を動的に呼び出す

パイセンの実装に感動 僕が感動したのはElixirでの実装ではありませんが、Rubyで特定のディレクトリ以下に_____.rbというファイルを作成し、命名規則に従ったモジュールとinterfaceを満たす関数を実装すると、自動でモジュール内の関数が読み込まれて動的に…

気づいたらプロダクト指向な開発者になっていた

仕事の内容が変わって考え方が変わった 数ヶ月程前から、既存の受託案件の開発チームから自社開発チームに移籍して、継続的な開発をしている。 受託案件をゴリゴリ作っていた時は、作って終わりの考えでとにかく速さを重視していた。gitを使ってコードの品質…

Appleのカスタムサポートが神対応だった

相棒のMacBookから焦げた匂いが... ある日のこと、突如、MacBookから「バチンッ!!」という音がして電源が落ちた。一瞬だが、火花も見えた。 あー、これはマザーボードがショートする系のアカンやつだなぁと故障を覚悟した。案の定、電源を長押しして起動を試…

Oauthを簡単なプロセス通信でそれっぽく再現して覚える

ワイ認証が全然分かっていない 認証部分は自分が実装する前にパイセンエンジニアが既におおむね、下地を作った状態で、「これ使ってね〜」状態になっている事が多く、初期の開発に参加出来なかったりする。過去に趣味開発でOauthなりを使用したことはあるが…

ElixirでListMonadを作ってみる

Monad(モナド)の魅力 関数型言語に触れていれば少なからず「Monad(モナド)」という言葉を耳にする。残念ながら私の愛するElixirではMonad(モナド)を大々的に取り扱うことはない(知らないだけなのかも)はないが、純粋関数型言語として有名なHaskellではMonad(…

【作って学ぶフロントエンド】ReactのuseStateの仕組みについて

Hooksについて Reactのバージョン16.8に導入されたHooksという機能によって、class componentを使用せずとも、functional component(以降: FCと記述)にstateを用意することが可能になりました。 FCにstateを用意するのは非常に簡単で以下の構文を記述するの…

並行・並列と並行処理・並列処理の違いについてまとめた

毎回調べているのでまとめた 何気なく「並行処理にすると....」だとか「ここは並列処理にして...」という会話をすることが普段多いが、「並行と並列って何が違うのよ?」と前からよく思っていた。その度に、ググっては「あー。そういうことね」と理解するも…

【Elixirのサンプルコード有り】条件に一致した時に再帰を停止する方法4つを書き比べてみた

なんでbreak_reduceみたいなのはないんだろう 配列(リスト)に対して、各要素を精査する際に、特定の条件にマッチする要素が見つかった時点で処理を停止して、Elixirであれば{:exist, value}のような値を返す関数をよく作成することがある。頻出の処理パター…

【実装コード有り】銀行家のアルゴリズムの実装と検証

今更作った理由 たまたまgoogle scholarで並行処理に関する資料を眺めていたらダイクストラ法で有名なエドガー・ダイクストラさんの名前を見かけた。自分の中では数学者という認識をしていたが、実は分散コンピューティングの分野で、どのようにシステムの信…

【Elixir/supervisor入門】通常のモジュールに対してsupervisorを定義する

なぜ書いたのか Elixirにおいてプロセスの死活管理に用いるsupervisorについて学習を進めていたが、どれもGenServer、すなわちElixirのbehaviorを用いたサンプルばかりだった。また、そのプロジェクトはmix new --sup project_nameとして生成されるもので、…

【収益ほぼゼロ】何の考えもなしにブログ100記事を書き終えたので反省会をしました

100記事を書くことが凄いのか よく著名なブロガーが「まずは100記事書くといいですよ」ということを仰っている。なぜ100件なのかという根拠はないが、意図としては100も記事を書けばブログを書く習慣も身に付き、言葉の扱い方も多少は様になってくる...とい…

【golangのサンプル有り】クロージャ(closure)完全に理解した人のためのクロージャを使った便利サンプル集

クロージャ完全に理解した...で何に使うの? 実は使いこなせると結構便利。特定の値に対する操作を共通化することが出来て、想定しているもの、言い方を変えれば作者の作成しているもの以外の操作を制限することも出来る。あと、かっこいい。 クロージャのユ…

【goroutineによる並行処理】サンプルを作りながら学ぶgoroutine入門

golangを学ぶ上での壁goroutine golangを業務で使い始めてから約半年になりました。業務ではgolangを使ってWebsocketを使ったチャットサーバーを作っています。golangの文法は非常にシンプルで分かりやすくシンプルなので、可読性が非常に良いです。普通にgo…

【現役エンジニア】SCRATCH(スクラッチ)で遊んで何が出来るのかを体験してみた

ビジュアルプログラミングSCRATCH SCRATCH(スクラッチ)に関しての説明はもう不要だと思いますので省きます。小学生などの低年齢層を対象にプログラミングをブラウザとGUIを使って学習することが出来るMIT開発のビジュアルプログラミングのプラットホームです…

ビジュアルプログラミングを卒業した後に覚えたいプログラミング言語

プログラミングを学ぶ背景 2020年より小学校ではプログラミングが必修化されて、必然的に小学校を卒業するまでに生徒たちはプログラミングを学ぶことになります。 www.mext.go.jp 小学校でのプログラミングが必修化されている目的として「プログラミング的思…

【現役エンジニアが物申す】未経験のエンジニアが企業でインターンやアルバイトをする際のNGな言葉5選

この記事の対象読者 未経験からエンジニアになりたい 他業界からエンジニアに転職したい フリーランスを目指したい 自由なワーキングスタイルを確立した リモートワーク, テレワークがしたい など... 近年はインフルエンサーの影響も強くあり、プログラミン…

【モジュールとの比較】Elixirで無名関数を使って再帰処理を記述する方法

無名関数では再帰処理が難しい Elixirで再帰関数を記述しようと思った際には、defmodule Fooと定義して、そのモジュール内部にdef barのように関数を定義して、パターンマッチもしくは、分岐処理によって再帰関数を処理するのが一般的。 defmodule Sample do…

【使用例あり(for文vs内包表記)】Pythonでデコレーターを使って関数の平均実行時間を測定する

実装したデコレーター用の関数 全体のコードはこちら github.com すでに似た様な記事が多く記述されているが、指定回数の平均実行時間を出力したいのは自分が初めてだと信じて実装してみた。pythonのデコレーターを使用して、指定回数の平均実行時間を算出す…

【サンプルコード有り】golangで三項演算子っぽいものを記述する方法について

嫌だなぁと感じる場面 業務を進める中で、以下の様なコードを書くことが多かった。 drink := "" if orderNum { drink = "green tea" } else { drink = "tea" } orderNumの様な関数の引数で指定される値であったり、http経由で指定されたqueryによって値をセ…

【並行処理vs逐次処理】プロセスを事前に立ち上げることによって高速化されるのか【めちゃ速】

前回の話 「並行コンピューティング技法」を読み進める中で「並行和」の実装をElixirを用いて行なった。何とか実装が完了した並行和の処理を複数プロセスを立ち上げてチャンクを分割して実行する並行処理(parallel)と、チャンクを分割せずにメインの1つのプ…

【並行処理vs逐次処理】Elixirで実装した並行和と逐次和をベンチマーク測定をして比較した結果【完全敗北】

前回までのお話 「並行コンピューティング技法」という書籍を読み進める中で「並行和」という並行処理にてデータの要素の合計値を求めるアルゴリズムをElixirを用いて実装してみた。何とか動くところまで作れたものの、実行速度がどれだけ逐次処理と異なるか…

【第1回: データ分析xブログ】データ分析の力でPV数は増やせるのか。現状を分析して目標を立てるまで

この記事を書いた理由 GoogleアナリティクスやGoogleサーチコンソールといった優秀なツールがあり、使い方を解説する記事が多数ある一方で どう使えばPV数が増えるのか 収益を生み出すには何に注目するのか といったテーマの記事が非常に少ないことに気づい…

【第17回清流elixir勉強会】Elixirを用いた並行和アルゴリズムの実装

トピック あけましておめでとうございます。1月2月は色々と忙しくて、全く清流elixirにて勉強会を開催できず... 2ヶ月ぶりの開催となりましたが常連の方、新規の方、リモートでの接続、多くの方に参加して頂けました。ありがとうございました。ハッピーター…

【並行コンピューティング技法】第3章のまとめ

前回までのあらすじ 実際に並行処理を記述する際にどのように手法を決めて実装していくのかという話が第2章のメインであった。 並行処理の方針を決める手法は以下の2通りで、第2章ではそれぞれの特徴やマナー、サンプルに触れながら内容が進んでいく。 タス…

【並行コンピューティング技法】第2章のまとめ

前回までのあらすじ 以前から気になっていた「並行コンピューティング技法」を衝動買い。全体の構造を読み解き、どんな知識がこの本から得られるかを考察した。合わせて、第1章を読み、内容を簡潔にまとめた。第1章は大きく以下のような内容を扱っている 並…

【並行コンピューティング技法】全体の構成と得られる知識 & 第1章のまとめ

今回の購入物 前から買おうとは思っていたが、読む時間ないなぁと手を出さずにいた「並行コンピューティング技法」をたまたま立ち寄った本屋にて発見し、思い切って購入。最近、学習に対するモチベーションが下がっているので気持ち新たにスタートするために…

ElixirのString.contains?で第1引数にbinaryを第2引数に日本語ひらがなを与えるとfalseになる理由についての調査報告

事の発端 たまたまElixirでhttp responseのbinary情報に対して、特定の日本語が含まれているかという判定式を記述していたところで、この現象に遭遇した。 iex> body = <<201, 202, 197, ...>> iex> String.contains?(body, "いちご") false 間違いなくbinar…

【擬似実装コード有り】Pythonでswitch構文っぽいものを表現する方法について

かゆい所に手が届くswitch構文 別にswitch構文がなくても、おそらくその処理は工夫次第で記述することが可能だろう。しかし、golangやjavascriptに見られるswitch構文を用いることで少なくとも可読性は上がるし、拡張性もif elseの組み合わせよりは良いはず…

【golang/Elixirのサンプル有り】何度も同じようなテストを書くのがつらいので無名関数を使って楽しくしよう

反応が良かったツイート テストを無名関数で書くと楽しいよという旨のツイートの反応が良かった。ただ言葉だけだと正確に情報が伝わらないので実際にどうやっているのかをコードに落としてみた テストケースを複数書くときは無名関数が凄く便利。わざわざ外…