サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
qiita.com/haminiku
データを蓄積し予測モデルを更新し続けるために、どういった機能を設計実装したか共有します。 2015年に遺伝的アルゴリズムで自動売買に挑戦したのが2年前。深層学習で再チャレンジして知見が溜まってきたので、運用における辛い話や設計を共有します。システムの話がメインです。 ^ Flask x SQL alchemy で作りました。ワーカーはsupervisordです。最初Rubyからpycall使ってTensorFlow使ってたんですが PyCall.import_module を数回唱えたあたりで全部Pythonで書き換えました。デコレータ便利 伝えたかったこと 深層学習 株価予測 といったワードで調べるとそれなりの事例がすぐ見つかる世の中になりました。汎化能力を本当に有しているか疑問ですが例えばLSTMを使えば少しの情熱でバックテストでは利益が出る自動売買プログラムを開発できる時代です。では
前回KVSを開発したので、いよいよチーム開発にむけてOTPの雛型アプリを作成します。 Erlang本やErlangで書かれたプロジェクトのソースを読んでいると、Erlang OTPアプリケーションのディレクトリ構造や設定ファイルには、どうやら一定のルールがあるようです。 社内のErlangエンジニアに聞いてみたところ、仕事では手でディレクトリ構造を構築せず、rebarかrebar3を利用すべきだとアドバイスを頂きました。早速最新版のrebar3でOTPの雛型アプリを構築してみました。(rebarは古く、一部機能がメンテされず機能不全に陥ったためforkしてrebar3が開発された経緯があるそうです) 概要 rebar3 インストール rebar3を利用したErlang OTPアプリケーションの生成 ビルドとリリース コマンドラインからアプリの起動 1. rebar3インストール Mac上で
世界中でポケモンGO旋風が起こっています。 日本版のポケモンGOがリリースされたら即電話が掛かってくるスクリプトをお昼休みに書いてみました。 これで最速ポケモンゲットだぜ( ・ㅂ・)و アーキテクチャ HTTP通信でitunesのページをポーリングしてステータス取得 + Twilio で電話 PokémonGO の現状調査 Nianticのポケモン公式HPを7月15日確認したところ、iOS版は未公開、Android版は既に公開されています。Android版はソフトウェア側でフィルタされており日本ユーザはプレイ出来ないみたいです。 itunesのページがオープンしたら検知 # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals import requests def app_store_
# -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals from steganography.steganography import Steganography # 画像にテキストを埋め込み path = "/tmp/image/a.jpg" output_path = "/tmp/image/b.jpg" text = 'The quick brown fox jumps over the lazy dog.' Steganography.encode(path, output_path, text) # 画像に隠蔽されたテキストを読み込み secret_text = Steganography.decode(output_path) # 画像にテキストを埋め込み >>>stega
# -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals # テストする関数 def add(a, b): return a + b # テストコード 関数名はtest_ から始めるのがpytestでのお作法 def test_add(): assert add(1, 1) == 2 assert add(1, 2) != 2 >>> $ py.test ../tests/test_add.py =============================================================================== test session starts ================================================
特徴 ノンブロッキングI/O使って書いたサーバなので1台のサーバで数千人同時接続できる..はず(いわゆるC10k問題) TCP通信なので他の人の書き込みがすぐ反映される(サーバからのpush通知を受け取れる) Serverをmono使って書いたのでC#+.netのサーバがlinuxやmacで動く WebAPIによるchatサーバ実装だと、1と2の要件が満たせません Visual C#でserverを書くとWindowsでしかサーバが動かず、3の要件が満たせません。 動作画面 背景 C10K問題に対応したechoサーバをなんとか書けるようになってきたので、Unityと組み合わせてchat機能をクライアント(Unity C#)とサーバ(C#)で実装してみました。またUnityにはNetworkViewを使ったChatのチュートリアルがありますが、NetworkView自体の実装が激しくスマホ向
CircleCIの特徴は1環境であれば無料でCI環境が利用出来る点です。環境構築が完了すると、GitHubのcommit毎にCIコンテナが立ち上がり定義した自動テストがコンテナ上で実行されるようになります。本投稿では、Python3.5とFlaskで構築したWebサーバをCircleCI上で稼働させて、requestsを使ってコンテナ上のWebサーバにアクセスしてHTTP Statusコード200が返却されることを試験しています。 2時間で構築するCI環境の動作フロー Python3.5 + Flaskで構築されたWebサーバを試験する CircleCI上でPythonのWebフレームワークであるFlaskを利用したWebサーバを立ち上げて、HTTPのエンドポイントにアクセスしてHTTP Statusを確認する簡単な試験を行うのが本記事です。 jenkins職人問題へのCircleCIの考
# status systemctl status firewalld # start systemctl start firewalld # stop systemctl stop firewalld # 有効な設定を確認 >>> firewall-cmd --list-services --zone=public --permanent dhcpv6-client # 設定追加(sshとmysqlを追加) firewall-cmd --add-service=ssh --zone=public --permanent firewall-cmd --add-service=mysql --zone=public --permanent # 設定削除(sshを削除) firewall-cmd --remove-service=ssh --zone=public --permanent #
障害が起きたWebサービスは個人で運営しているサービスです。 2016年2月、障害から20日後にサービス再開しましたがアクティブユーザは以前の18%です。未だ回復の目処は立っていません。冗長化していないサーバがウイルス感染し、その後の対応も後手後手に回ってしまいました。 2016年1月末に起こるべくして起こった障害について記事にしてみました。ご迷惑をお掛けしてしまい本当に申し訳ありません。 ■ ユーザは、もう戻ってこない どんなウイルスに感染したのか SYNフラッド攻撃(SYN Flood Attack)を他のWebサイトに行うウイルスに感染して、確認していませんが他のサービスをSYNフラッド攻撃していたと思います。またウイルス感染時にサーバのsshdを書き換えられsshで接続できなくなりました。感染後にコンソールログインして書き換えられた醜い authorized_keys を見た時ゾッ
PythonのWebフレームワークで間違った選択をすることは非常に困難であると、Pyramidのintroductionページに記載されています。調査した結果まったくもってその通りだという結論に至りました。2015年12月に個人でWebサイトを構築する時に、どのWebフレームワークで構築するかで迷いに迷いました。この記事はそのときの検討メモです。 速度 みんな大好きTechEmpower Web Framework Benchmarksで速度比較。サーバ費用をケチって運用費をとにかく下げたいので、その時点で重大長厚なdjangoは検討対象から外れました。bottleはやはり早い。 Webフレームワーク Yes/Noチャート Yes/Noチャートにまとめてみました。ログイン機能は構築しないためSessionは必要ありません。シンプルで学習コストが低く高速に動作するFlaskで構築することにし
背景 RubyのQueueクラスの説明に、これはスレッドセーフだと書いてあったので検証してみました。 スレッドセーフとは 自分でも正確な意味を理解していなかったので調べてみました。スレッドセーフとはアプリケーションをマルチスレッドで動作させても問題がないこと スレッドアンセーフだとどうなるか たとえばマルチスレッドで実行したときに、複数スレッドから同一の変数に変更が発生してデータが消えたり意図しない値になってしまうこと(レースコンディションという) つまり仮説! ArrayとQueueを用意し、100スレッドで複数のワーカーで同時にpopさせて並列計算するとQueueでは正しい結果が出力されるが、Arrayではレースコンディションが発生し、計算結果がズレる..はず 仕様 1..10000000の値を合計する。結果が50000005000000となれば正しい レースコンディションが発生すれば
アンチエイリアスを掛けると写真縮小時のジャギジャギが軽減します。フォルダ内の写真ファイルをアスペクト比(縦横比率)を保ったまま一括で縮小してアンチエイリアスを掛け保存するPythonコードです。 アンチエリアスあり/なし比較 4000pxくらいの写真を300pxに縮小して比較しました。AA有りの鳥画像は地面の小さな砂が、地面と色が一体化して見えにくくなっています。 インストール # -*- coding: utf-8 -*- import commands import Image import re # 縮小する際の画像の高さピクセル PHOTO_HEIGHT = 300 # 画像があるフォルダのフルパス BASE_DIR = "/Users/XXXXX/Desktop/Photos" # 画像の正規表現名 PHOTO_REGEX = r"P.*.[jpg|JPG]" # リサイズ後の画
Web魚拓超怖い。元ネタ削除前に魚拓されると、ずっと残り続けます。今年に入っても某退職エントリとか...サイトミラーリングの対策を実行されたこちらのエントリをより汎用的にしたコードです。ドメイン名が異なると非表示になるためミラーサイト対策にもなります。 魚拓元のサイト http://subc.github.io/gyotaku/ Web魚拓結果 魚拓しましたがコンテンツが非表示になっていてます。 http://megalodon.jp/2015-1102-1443-25/subc.github.io/gyotaku/ ソースコード // ホストネームに含まれる文字列 host_name = 'github.io'; // コピーされたときのredirect先 redirect_deny_url = 'http://megalodon.jp/'; redirect_millisec = 50
私が新規WEBサービス立ち上げ時に取り組んだ内容についてWEBエンジニア向けにまとめた記事です。 例えばNginxの設定でHTTPヘッダーが正しく設定されているかを確認できるGoogleDevelopers PageSpeed Insights を知っていると大変有利です。もちろんPageSpeed Insightsを知らなくてもWEBサービスを公開・運用可能ですがユーザに意図せず不利益を与えていたり、知らず知らずのうちにモバイルフレンドリーでないとGoogleから検索ペナルティを加えられている可能性があります。この記事は独りで新規WEBサービスを立ち上げた際のノウハウと取り組んだ内容について記述しています。 1. 概要(5行くらいで) スマホ対応は必須。トラフィックの50%はスマホから発生する。 速度は武器!速いサイトはそれだけで価値がある。 SEOの内部対策は内部リンク整備とPageS
パスワードをgit commit する前に検討したい、3つの回避方法 GitHub便利ですね。無料で自身のソースコードを管理できます。しかし無料プランだとソースコードは全世界に公開されてしまいます。有料プランですと月7 USドルでソースコードを非公開にできますが、結構お高めなので払っている人は少ないのではないでしょうか? 外部リソースにアクセスするプログラムを書いていると、config にパスワードを書いてしまいたい衝動に駆られます。しかし過去の事件について思いを馳せてみてください。クラウドサーバを生成する権限はお金になります。BitCoinマイニング目的でEC2 インスタンスを不正利用された事例は国内でも数件発生しています。本当にそのパスワードをconfig に書いて大丈夫でしょうか。 この記事ではgit にcommit しないで上手にパスワードを管理する技術について考えていきます。 a
クラウド破産しないためのサービス選び 同じゲームを作った仲間がクラウド破産しそうになりました。個人で破産したくなかったのでこの時点で従量課金制であるAWSとGoogleCloudは除外。さくらかConoHaかなと思っていたのですが、ConoHaがSSDプランを格安で始めていたのでConoHaを選択しました。昨年お仕事で使ってたAWS-RDSのHDDをSSDに切り替えたらCPU使用率とスループットが大幅に改善したのでSSD万能説を信奉することにしました。 サーバ構成をどう設計するか オールインワンかDB+APPサーバ構成にするか。サーバを分割した場合DBとAPP間の通信レイテンシが気になります。サーバが異なっていてもconnection poolingをちゃんと設定していれば1-5msで応答が返ってきます。オールインワンで構築すると将来DBサーバとAPPサーバを分割するときDB移管作業がとっ
リンク切れチェックを手で確認するのは精度が不安で時間掛かる。かといって外部ツールは実行が重いし開発環境で出来ない。ということで自作しました。相対リンクと絶対リンクに対応しています。 リンク切れチェックツールの動作フロー 指定されたURLをHTTP GETしてBeautiful Soup で解析。 リンクを外部サイトリンク、相対リンク、絶対リンクに分類 ページ内の同一ドメインのリンクからリンク先URLを抽出 重複を排除する 4で生成したリンク先URLに対してHTTPリクエスト投げてHTTPステータスが200であることを確認 Python3.5のasync/await版 ノンブロッキングなHTTPリクエストで後述のPython2版より60%高速に動作します。Python2版はページ下部。こちらのコードだと100リンクを1-3秒で確認完了します。 # -*- coding: utf-8 -*-
Pythonの軽量WebフレームワークFlask導入にあたり、DBアクセスとテンプレート継承有りでRailsと比較しました。外部のWeb Framework Benchmarksと異なったRailsの方が早いという結果がでたので原因を特定して解消する記事です。 ベンチマーク結果 個人PJでの利用を想定しているので、用途に特化したベンチマークを書いて比較しました。結果Rails はFlask より1.493倍高速に動作 することが判明しました。Railsすんごいはやい。 Web Framework Benchmarksと異なる結果になった Web Framework Benchmarksと異なる結果になりました。Flaskが遅いのはコード側に問題がありそうなので検証していきます。 ベンチマーク条件 用途に特化したベンチマーク試験となっています。 DBアクセスして1レコード取得し結果をテンプレ
前回の記事でDjangoとFlaskとPyramidを比較して、Flaskいいなーとなったので早速試してみました。 FlaskというPython Webフレームワークにて大規模向けと言われているBlueprintチュートリアルに沿って構築した機能をベンチマークして比較しています。Blueprintとは複数の小さなアプリ毎(機能毎)にViewを切り分けるFlaskの機能です。 構築後Apache Benchを利用して、PyPy3 2.4とPython3.5を比較した ベンチマーク を取得しています。 ディレクトリ構成 デフォルトの単一Viewと異なりviewsディレクトリを設置して、その中に機能毎のviewを設置していきます。今回はroot とreport 機能を追加してみました。 ■ ディレクトリ構成 テンプレートの抽象化 HTMLのHEADやBODYタグといった共通部分をmaster.h
アプセトネデブ って覚えてますか?私の仕事はこの存在がなければ誕生すらしていなかったと思います。OSI参照モデルの覚え方です。 OSI参照モデルの中でもトランスポート層のソケット通信を行うソケットサーバを並行処理を駆使して実装するお話です。この記事は、今年の春にスゴイ級エンジニアにC#のTaskやasync/awaitについて教えてもらったときの内容をPythonで書き換えた記事となっています。部屋の片隅で埃かぶってた『マスタリングTCP/IP』片手に実装。 目的 並列(Parallel)なノンブロッキング(non-blocking)処理を独力で書けるようになる。 geventとasync/awaitでそれぞれ軽量スレッドを使った処理を実装できるようになる。 C10k問題がうっすら理解できるようになる。 マルチスレッド/プロセスまとめ(Ruby編)の記事を読んで、そろそろ復習しようかと思っ
『アッオー』でおなじみICQからIRC,Yahooメッセンジャー,HipChat,Slack,GoogleTalkの共通点は、すべて通信にXMLベースのXMPPプロトコルを利用していることです。インスタントメッセージサービスは目まぐるしく移り変わっていくため、変わらないコアの部分を抑えることが重要だと思います。 XMPPプロトコルを喋ると、大半のメッセージサービスを利用できるBotが作れます。この記事ではXMPPを開発・公開したJabber社のライブラリを利用して複数のメッセージサービスに対応したBotを実装していきます。 作るもの 起動したらHipChatとSlackに両方ログインしていて、話かけたらdeployしたりコマンド実行したりするBot。海外はSlack、国内はHipChatを使う特殊事例が発生して開発することになりました。過渡期つらい 新しいものを、どんどん取り入れていくこと
# -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals from subprocess import PIPE, Popen def cmdline(command): """ コマンドを実行する。shell=Trueの場合シェル経由で実行する。 :param command: str :return: Popen """ return Popen( args=command, stdout=PIPE, stderr=PIPE, shell=True ) # 標準出力 print '標準出力:' + cmdline('date').stdout.readline() # 標準エラー出力 print '標準エラー出力: ' + cmdline('echo 2015|xargs wc -l
3. Python環境構築 Python の環境構築方法は複数存在しますが、便利なvirtualenv + PyCharm + bpython で構築する手順に沿って作業してもらいました。 virtualenv + virtualenvwrapper virtualenv を導入すると、複数のPython環境を簡単に構築・切り換えできるようになります。たとえばコマンド1つで Python2.7 + Django1.5環境と Python3.5 + Django1.7環境をworkon コマンド1つで切り替えられます。 # install sudo easy_install pip sudo easy_install virtualenv sudo easy_install virtualenvwrapper pip install pbr sudo easy_install virtual
※Wikipedia:全文検索から引用 判りにくい箇所のみ解説します。 検索漏れと言語依存で辞書が必要な点についてです。形態素解析型の全文検索は辞書に依存します。たとえば『東京スカイツリー』が辞書登録されていない形態素解析だと『東京』『スカイ』『ツリー』のように分割して認識してしまいます。結果として東京のクリスマスツリーといった意図しない検索結果が表示されます。前後の文脈を認識できない点が形態素解析型全文検索の弱点です。 完成品の検索結果 ■ input1 体の抗酸化力や解毒力 output1 : ++++++++++++++++++++++ 検索結果:体の抗酸化力や解毒力 ++++++++++++++++++++++ - 1位:類似度:0.00787401574803 - 2-アダマンタノン - 2位:類似度:0.00654878847413 - (R)-1-イソチオシアナト-4-(メチ
2015/11/23にPyCharm5.0がリリースされました。リリースノートにはPython3.5サポートと非同期実行の可視化機能などが記載されています。非同期実行の可視化機能が便利そうだったので早速使ってみた記事です。 Thread Concurrency Visualization(非同期実行の可視化機能) 以前書いたasync/awaitの記事を試しにPyCharmで実行して可視化してみた。 今回作るモノ Wikipediaの13記事を同時にダウンロードしてファイルに保存するプログラム 改善前のプログラム ざっくりざっくりで書いてみました。 # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals import aiohttp import asyncio async def d
print文を仕込んで実行時間を出力していくパフォーマンスチューニング作業は辛いのでもう止めにしようってお話です。 プログラムで実行速度が遅いロジックを特定できれば改善は容易です。profilerを利用すると簡単に原因が特定できるので使い方を紹介します。前半はline_profilerを利用した実行速度が遅いロジックの特定方法、後半はPythonでの高速化テクニックです。 どの行が重いかprofilerで特定する ローカル環境でprofilerを使いどの行が重いのかを特定していきます。Pythonには様々なprofilerが存在しますが、個人的にはline_profilerが必要十分な機能を持っていてよく利用しています。ここで特定するのは『どの行がN回実行されていて、全体でM%の実行時間が掛かっている』という点です。 line_profilerの使用例 実行に10秒くらい掛かるサンプルコー
# -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals from review.review import ReviewManager USER_ID = "B00001" manager = ReviewManager(USER_ID) # 権利を持っているか確認 manager.can_review() # アプリ起動を記録 manager.app_startup() # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals import datetime from pip.utils import cached_property import redis PREFIX = 'R
pip installでおなじみのPyPiから人気パッケージを総合と週間ダウンロード数で上位20パッケージ抽出しました。人気24パッケージの使い方まとめです。週間と総合で重複16という結果に驚きました。ASN.1を扱うpyasn1パッケージだけは利用方法が判らなかったので誰か教えてください。 PyPi ダウンロード数ランキング 1.simplejson jsonのエンコードとデコードを行うライブラリです。総合と週間でぶっちぎり1位のパッケージで1億件以上のDL数を誇ります。速度のみならujsonの方が早いです。 # -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals import simplejson # dict to json d = {i: i**3 for i in xrang
※この表は神嶌 敏弘先生が人工知能学会誌に連載した解説記事『推薦システムのアルゴリズム』から転載したものです。 アルゴリズムの説明 ■ 協調フィルタリングとは アイテム利用者の行動履歴を元にレコメンドする方法です。Amazonの『この商品を買った人は、こんな商品も』機能が有名です。協調フィルタリングによるレコメンドはユーザの行動を元にレコメンドする方法です。 ■ 内容ベース(コンテンツベース)フィルタリングとは アイテムの特徴ベクトルで類似度ソートしてレコメンドする方法です。 グルメサイトでユーザが入力した『新宿・エスニック料理』というキーワードに関連付けられたお店が表示される場合が該当します。内容ベースによるレコメンドはアイテムの特徴を元にレコメンドする方法です。 特性の詳細について ■ 多様性 協調: o 内容ベース: x 内容ベースでは商品内容に記載されていない情報はレコメンドされま
次のページ
このページを最初にブックマークしてみませんか?
『@haminikuのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く