この記事はPythonのAdventCalandar2016の15日目の記事です。 Goでネットワークプログラミングの投稿に引き続き、Pythonでネットワークプログラミングの いくつかのパターンを実装してみましたのでサンプルコードと簡単な解説をしたいと思ってます。 以前、このLinuxネットワークプログラミングバイブルを読んで 第5章のIOの多重化の部分が非常に興味深くハンズオンしてきちんと理解したいと思ってたので C言語で書かれていたロジックをPython3.5.2で書き直してみました。 まず、投稿タイトルのネットワークプログラミングについては、 TCPプロトコルを利用したサーバ側のSocket通信の実装を指してます。 Socket通信にて、シンプルな通信からI/O多重化、非同期I/O、ノンブロッキングI/Oを利用したパターンを紹介し、 これらの実装を実現するための技術として、sele
もともと並行プログラミングはGoなども含め勉強したことがありましたが、ゴルーチンやチャネルなどの理解度が低いまま扱っており、今読んでるコード、書いているコードがどうゆう並行ロジックパターンに元づいて実装してるのかロジック像が掴みきれず時間を取ってしまう状況でした。そのため、この並行ロジック辺りのパターンをある程度まとめてみることにしました。 実装パターンは次のように整理してみました。 基本的な並行パターン バッファなしチャネルパターン バッファありチャネルパターン 並列forループパターン タスク生成と処理を分けるパターン(Producer-Consumerパターン) パイプラインパターン(fan-outパターン) selectを利用したチャネル多重化パターン selectとワーカープールを組み合せた多重化パターン Feture/Promiseパターン 基本的な並行パターンGoでまず一番最
脆弱性診断においてApacheのバージョンを外部から調べる方法を複数の専門家がブログ記事に書いておられます。 Apache HTTP Serverのバージョンを当てる方法 僕が調べたApacheバージョン判定の小ネタ いずれも大変興味深いものですが、ApacheでできるのであればPHPはどうだろうかと気になる方も多いと思います。これは人間の自然な感情だと思うのです。 このあたり、各診断会社の「秘伝のタレ」みたいなところもあるのでしょうが、私からも少し知見を披露したいと思います。 タイトルにも書いたように、診断文字列を打ち込まずに、言い換えれば、通常のウェブ閲覧の範囲で分かること、さらに言えばHTTPレスポンスヘッダから分かることについて書きます。こういうと、「X-Powered-Byヘッダを見れば一目瞭然www」みたいな反応も考えられますが、そういう自明なものは対象外とします。 (1) キ
とほほのWWW入門 拡張子一覧 List of file formats 拡張子ありのサイトは.html、.php以外のサイトは最近あまり見られなくなってきている。 拡張子別にどんなサイトがあるかはGoogleで inurl:index.jsp みたいに検索すると色々見つかる。inurl:は大量に実行するとGoogleのCapcha画面が出て不正な通信と警告される場合があるので注意。 後述のhttp ヘッダー情報等からServerはnginxでcookieにJSESSIONがあるのに 拡張子が.aspというページもあるので、別システムに移行したけど、URLはそのままにしたため拡張子が食い違うケースもありそうだ。 RubyやPythonはMVCフレームワークが話題になり出してからWEBで採用され出したからか、拡張子つきは見かけたことがない。 http ヘッダー情報から調べる ブラウザのディベ
最近、TreasureDataと自社のDBのデータを合わせた集計をバッチ処理することが多くpythonでいったんcsvに書き出してEmbulkでアップロードしていましたが、データソースが増えると面倒になっていくのでより簡単で汎用化した書き方を考えました。 結局はWF使ってやったらいい話なので需要があるか不明ですが、WF勉強するのも時間がかかるので慣れてる言語でてっとり早くETLを作りたい人向けの内容です。 前提条件 この記事が適している人 普段はpythonを書いているのでなるべくその範囲でETLしたい pandas-tdの動きが不安定すぎて使えない シェルでの実現方法を調べる時間もない 達成したい機能 SQLさえ作ればバッチを追加できるETLの箱を作る 入出力のテーブルが変わっても手間がかからない 記述した順番に処理が実行され、進捗が通知される 環境の準備 Embulkのインストール す
はじめに 昨年末にAirflowをさわってみてなかなか便利だと思いました。 【Airflow】最近よく聞くAirflowに入門!EC2で動かしてみた【CI/CD】 そこで次のステップとしてKubernetesとの連携に挑戦してみました。検索してみると「Airflow on Kubernetes」と呼ばれているようです。調べたかぎり、日本語の記事があまりなかったのでこの記事が役にたてばいいなと思います。 =====2020.1.7 追記===== 関連記事をリンクします。 【Airflow on Kubernetes】DockerイメージのbuildとPodのdeployの仕組みについて 【Airflow on Kubernetes】KubernetesPodOperatorの使い方 Airflow on Kubernetesとは ? タスクスケジューリングやGUIでの実行管理が可能なAir
この記事は一休.com Advent Calenrad 2017の11日目です。 データサイエンス部小島です。 現在はレコメンドまわりを担当しています。 試験的に導入予定のETLツールAirflowについて書こうと思います。 Airflowについて 一言でいうと、高機能なcronです。 Pythonでかけて、タスクごとの依存関係を定義できます。 元々はAirbnbが独自で開発し、今はApacheのIncubetorのプロジェクトになっています。 一休のデータフローを考えてみる 一休ではセッションごとの情報を集約してまとめています。 そのデータをDWHに加工するまでの流れをまとめると以下のようになります。 上記のデータ処理を日次で行うようなものをAirflowで実装していきたいと思います。 環境の構築 今回は簡単にgithubに環境を公開してくれている方のをおかりしてセットアップしていきます
公式の意訳に適当に加筆(減筆?)/修正したものです。(ちなみに著者の英語の偏差値は30台です。) 2019-12-28 追記 以下はHanamiのバージョンが1.1の頃のものです。 URLも404になってしまいました。 URLだけは最新のものに書き換えました(Thanks @topstone)が内容は古くなっている可能性があります。 インタラクタとは Hanamiにはコードを整理するためのオプションのツールを提供しています。それはインタラクタといい、サービスやユースケース、オペレーションなどとも呼ばれます。 以下、事例を通して使い方を見ていきます。 新しい要求: メール通知 (A New Feature: Email Notifications) こんな要求があったとします。 管理者は本が追加されたときにメール通知を受け取りたい。 アプリケーションには認証がないため、だれでも本を追加できま
はじめに ここ一年くらいずっと Rails の何がダメでどうすれば良くなるのかを考えていました。 Rails を使ってそれなりの規模のアプリケーションを作ったことがある人なら、メンテナンスのしづらさを感じたことがあるのではないでしょうか。 メンテナンスの問題は Rails 以外の開発でも発生することですが、実のところメンテナンスしやすいアプリケーションはどうすれば作れるのでしょうか? この難問に対して私も答えを持っていませんが、考え続けています。 少なくとも、 Rails Way や Rails Tutorial をベースにしたアプリケーション開発は、業務で用いるには簡単すぎるように思います。 「レールに乗る」という言葉がありますが、私は考え方を変えました。 Rails は規模の大きいフレームワークですが、土台に過ぎません。 Rails Way の設計方針は小規模な開発では有効ですが、規模
Tokyo Rubyist Meetup で Hanami について発表してきた。このコミュニティは日本にいる外国人エンジニアや彼らと交流したい日本人の集まりなので、英語が公用語となっている。発表も英語でする。 trbmeetup.doorkeeper.jp 11/29 で「いいにく」の日だったから、ご飯が豪華だった。でも発表していたからそんなに食べられてない...。残念。 会場は cookpad のオフィスだったのでキッチンが充実していて、料理も美味しかった。ローストビーフが特によかった。 僕の発表: The Pragmatic Hanami 発表資料: speakerdeck.com 発表内容は以前 Rubyist Magagine に寄稿した るびま と同じく Hanami のアーキテクチャの説明などをしたあと、多少実際に開発をする時必要となるTipsを紹介した。 英語で発表するのが
Usecase アプリケーション固有のビジネスルールを書いています。 渡された todoRepo にデータのやりとりの処理を委譲します。 特定の実装に依存せず、interfaceに依存させることにより、ビジネスルールが外部の詳細を知らずにすみます。 import { Todo } from "domain"; import { TodoRepository } from "./repository"; export default class TodoUsecase { constructor(private todoRepo: TodoRepository) {} findAll(): Todo[] { return this.todoRepo.findAll(); } add(text: string) { this.todoRepo.add(text); } edit(id: str
この記事は一休.comアドベントカレンダー2017の10日目です。 システム本部 CTO室 エンジニアの @yu-sa です。 今回はとある開発で、ドメイン駆動設計で,インターフェース指向を意識した環境での開発に携わった際の知見を記事にさせて頂きたいと思います。 自分は今まで、SmartUIな開発ばかりしてきたため、今回の開発では多くを勉強させていただきました。そんな経験談や調査内容をまとめて共有したいと思います。 参考記事 ドメイン駆動設計の道標 Python におけるドメイン駆動設計(戦術面)の勘どころ [DDD]ドメイン駆動設計で実装を始めるのに一番とっつきやすいアーキテクチャは何か ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく 最後のまとめをはじめに アーキテクチャと実装例を見て、ドメイン駆動設計のイメージを理解。 ユビキタス言語についての理解を深める。 ドメイ
最近、社内で Hexagonal Architecture ベースのバックエンドを書いていて、わりとうまくいっている(つもり)なので、基本となるエッセンスを超簡単に書いてみます。 TagService の実装例 ドメイン層 from zope.interface import Interface from .base import Entity, ValueObject class Post(Entity): u""" Post Model """ ... class Tag(ValueObject): u""" Tag Model """ ... class ITagService(Interface): # specification u""" Tag management domain service """ def add_tag(post, tag): u""" add tag
この記事では、アーキテクチャを採用する理由、次にClean Architectureの概要、最後にアプリケーションの構築をしていきます。 この後詳しく見ていきますが、Clean architectureの概念は比較的シンプルでわかりやすいものだと思います。しかし実際コードに落とし込んだ時、これってどう実装すればいいのかな?と迷うことがあったので、自分の理解も深めるために実際にAPI Serverを構築していきたいと思います。 また、サーバーサイドでの採用事例をあまりみないので誰かの参考になればいいかなと思います。 サンプルコードは、Go言語です。 アーキテクチャを採用する理由 アーキテクチャに期待することは、関心の分離です。 関心の分離を正しく行うことで、次のようなメリットがあると思います。 再利用性の高い設計になり生産性が向上する コードの可読性が上がり、メンテナンスが容易になる 変化に
xargs で複数行のコマンドを実行したい。 出来ない・・・ ls *.txt | xargs -I@ echo @ ; sleep 1 forループならできるんだけど、for ループだとどうしても不便。 xargs でシェルコマンドを作って渡す. xargs だと限界があるので、もうシェルの文字列にして渡すしか、他に選択肢がない。 ls *.txt | xargs -I@ sh -c 'echo @ ; sleep 1' これなら動くんです。動くんです。 xargs が1つ実行するたびに、 sh -c 'echo @ ' の@ の部分にファイルを文字列として入れて渡してくれる。 bash でもいい sh だと機能が少ないので、bashにしてやるという手段も取れる。 ls *.txt | xargs -I@ bash -c 'echo @ ; sleep 1' 条件分岐も もうここまできた
大量のファイルを扱う際に、サーバー負荷を減らすためにsleepでウェイトしながら移動させたい時なんかに。 find ./src/*.zip -print -exec sleep 0.5 \; | xargs -n1 -I%% mv -v %% ./dest/
ファイルを複数のアンチウィルス製品でチェックするのに VirusTotalは便利だけれど、複数ファイルを手作業で検査するのはめんどくさい…… 出所が不明なファイルの安全性を確認するのに VirusTotal を使うのは普通の作業だと思いますし、また一般向けにリリースするバイナリを複数のアンチウィルス製品で事前にチェックする場合にも大変便利です。VirusTotal はオンラインのサービスにブラウザからアップロードするだけで60種類以上のウィルス対策ソフトで検査した結果が一覧で見れるのですから、これはとても便利です。 https://www.virustotal.com/ja/ VirusTotal自体は2012年にGoogleの傘下となりましたから、サービス自体は信頼してよいはずです。(ただし社外秘とか、関係者外秘のファイルをこういうところにアップロードしてはだめなことは言うまでもありませ
なんとなく思いついたので作ります VirusTotalというサイトがAPI公開してるのでそれ使います。 ただ、1分に4回という制限があるのでサーバーによっては使いものにならないかもしれないです。 どんなの ファイルがアップロードされたらそのファイルのスキャンリクエストを投げる スキャンが終わったらそのファイルの結果をファイルが送られたチャンネルに送信する。 注意点として、VirusTotal Intelligenceを使うとスキャンしたファイルを閲覧することができるため他人に見られたら困るようなファイルは上げないでください。 あったら良さそうだけど現実的じゃないやつ ファイルがアップロードされたらその瞬間にメッセージを編集してスキャン中の旨を表示する。 URLもスキャンする なぜ現実的ではないかと言うとAPI制限があるから 1に関しては 1分間に5個以上のファイルが投稿された場合待たないと
While dependency injection is easy to do in Python due to its support for keyword arguments, the ease with which objects can be mocked and its dynamic nature, a framework for assisting in this process can remove a lot of boiler-plate from larger applications. That's where Injector can help. It automatically and transitively provides dependencies for you. As an added benefit, Injector encourages ni
想定環境 Python 3.6.5 依存とは プログラミングの文脈で語られる依存とは、大抵の場合、特定のクラスの内部で使用される値が、外部の何か(変数、定数、クラスのインスタンスなど)に依存している状態を指します。 オブジェクト指向の説明でよく使われがちな車の説明で書くと、 # conding: utf-8 class tire(): def rotate(self, angle: int) -> int: return angle class handle(): def rotate(self, angle: int) -> int: return angle class car(): t = tire() h = handle() def drive(self, angle: int) -> int: return self.t.rotate(self.h.rotate(angle))
前回の記事で紹介したのは、Google GuiceのDI機能のうちの一つ、Linked Bindingsだけでした。この記事はその続きです。 サンプルはScalaで書きましたが、例によってScalaっぽいコードが出てくるわけではないですね……Guiceをどう使えばScalaとよりよく連携できるようになるかは、まだよく分かっていません1。 さて、Guiceはもうちょっと色々な方法でDIができるので、それについても調べて紹介します。 以下では例示のために、前回も使用したServiceとその実装クラス2つを使います。 trait Service { def doSomething(): Unit } class FakeService extends Service { def doSomething() { println("FakeService") } } class RealServic
PythonでDIする 需要はなさそうですが、たまたまPythonでDIする方法を調べたので、、、 いくつかの選択肢 Injector (ドキュメントはこちら) Inject (日本語の記事がありました) siringa(ドキュメントはこちら) di-py Injectは2015年で開発が止まっているようです。 di-pyはあまりドキュメントが充実していないようです。 siringaは型ヒントをごにょごにょしてInjectするちょっと変態チックなやり方だったので避けました。 消去法でInjectorを試してみました。 Injectorの特徴 ドキュメントでも説明されてますが、Google Guiceライクなフレームワークになっています。 Google Guiceの説明はこの方の記事がわかりやすかったです。 Google Guice 使い方メモ InjectやModule、Providerな
はじめに Python3.7が2018/06/15にリリースされる予定です。 https://www.python.org/dev/peps/pep-0537/#release-schedule Python3.7の新機能に Data Classes がありますが、これを使いこなせばクラス定義が楽になりそうです。 尚、Python3.7の環境作成は以下を参照して下さい。 もうすぐリリースされるPython3.7環境をDockerで作る - Qiita Data Classes とは データを格納するためのクラスを簡単に定義できる機能です。 クラス定義にデコレータを1つ付けるだけで__init__や__str__などの特殊メソッドを自動生成してくれます。 基本的な使い方 クラス定義にdataclassデコレータを付ける クラス変数でフィールドを定義する
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く