スキップしてメイン コンテンツに移動

投稿

2015の投稿を表示しています

第2回 Python 勉強会 by SoftLayer ユーザー会 API分科会(レポート)

ご報告が遅くなりましたが、先日行われたPython勉強会のレポートです。 eLv勉強会の会場を使わせていただき開催いたしました。 弊社、下村が講師としてお話しさせていただきました。 当日は、20名弱の方にご参加いただきました。 ご参加いただいた皆様、ありがとうございました。 今回はQiitaの記事を説明しながら実際にコードに触れてもらいました。 スライド等は用意してないので悪しからず Qiitaの記事は前回のブログをご参照ください。 主な内容は、Pythonのフレームワーク”Django”を使ってWebアプリケーションを作ってみることをテーマとして開催しました。 初心者向けの講座ですが、次回からはもう少し突っ込んだ内容で開催したいと思います。 次回開催予定は今の所未定ですが、12月中旬あたりに開催したいと考えています。 ぜひ皆様ご参加ください。 参加費は基本無料です。 このご機会をお見逃しなく! Pythonを勉強するのにお勧めな書籍なども次回ブログでご紹介させてもらおうと思っています。

第2回 Python 勉強会 by SoftLayer ユーザー会 API分科会

第2回 Python 勉強会 by SoftLayer ユーザー会 API分科会 in eLV で使用した資料を公開します. 第2回ではpythonのwebフレームワークであるdjangoを使用したwebアプリケーション作成を行いました. 最初ということで,本家のチュートリアルを辿りつつアプリケーション開発の流れを紹介しました. 今回はスライドではなくQiitaのほうに資料を作成しています. Python Django チュートリアル(1) 環境整備に詰まった方はこちらも合わせてご覧ください. Python Django チュートリアルのチュートリアル 次回勉強会ではチュートリアルの続きと,勉強会でリクエストのあったrestapiの話をしたいと思います.  また,勉強会ではテーマも募集しています. 「こういうアプリを作りたいんだけど作り方がわからない」 「エラーが出たけど直し方がわからない」など,お気軽に相談してください.

第1回 Python 勉強会 by SoftLayer ユーザー会 API分科会

第1回 Python 勉強会 by SoftLayer ユーザー会 API分科会 in eLV で使用した資料を公開します。 Pythonの基礎的な内容となっています。 これからPythonをはじめてみたい方は是非目を通していただければと思います。 また、わからないところや、不明点があればコメンとなりメールなりいただければ折り返し お返事させていただきます。 第2回は10月末に開催予定です。ご興味ある方は参加ください。 第1回python勉強会 from Yoshio Shimomura

APIを理解しクラウドをコード (Python)で操作する #02 ~SoftLayer編

前回の続きで、 SoftLayerをプログラム言語で操作してみようの初級バージョンの2回めです。 実際にPythonでSoftLayerのAPIを叩いてみます。 Pythonを触ったことがない人にでも分かるようにまとめています。 Pythonは非常に便利に使える言語ですので、この機会にぜひ入門してみてください。 近いうちにPythonの勉強会の資料もアップしますので、興味ある方は参照してください。 Softlayer勉強会#2 from Shuichi Yukimoto

プログラム言語でSoftLayer APIを操作する!

以前勉強会で使った資料を公開します。 SoftLayerをプログラム言語で操作してみようの初級バージョンです。 SoftLayerは非常に強力なAPIが用意されており、ほぼすべての操作がAPIによって操作可能です。プログラムからAPIが操作できるようになると、非常に強力な武器になります。 今回の内容は初期の初歩ですが、SoftLayer APIがどのようなものなのか? または、これからちょっとAPI触ってみようかなって考えている方の手助けに慣れれば幸いです。 クラウドの時代になると、インフラエンジニアもプログラムが書けないとダメな世の中になってきましたね。しっかりプログラムも勉強していきましょう。 弊社の方ではたまに、無料のPythonの勉強会などを開催しています。 そういった機会にぜひご参加ください。   勉強会資料#1 from Shuichi Yukimoto

nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化

少し古い資料になりますが、nginxにluaで拡張モジュールを書いてファイルのアップロードを高速化する方法についてまとめた資料です。 nginxはluaで拡張モジュールがかけるのでそれの使い方の資料です。 nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化 from Shuichi Yukimoto

名古屋SoftLayer勉強会でSendGridのお話をしてきたので、資料を公開します

9/15、名古屋でSoftLayer勉強があり、お話してきた時の資料を公開します。 SoftLayerからSendGridを使うための初歩的な内容になっています。 Send grid softlayer_nagoya from Shuichi Yukimoto SendGridの記事は以下のブログにも記載していますのでご参照ください。 SoftLayerで提供されているメール配信サービス、SendGridを使ってみる もう少し細かい使い方について近いうちにレポートします。

SoftLayer-Bluemix Summit 2015発表資料

遅くなりましたが、SoftLayer-Bluemix Summit 2015でお話した資料を公開します。   SoftLayerでアプリ開発する際に工やったら一番効率いいかなって思っていることをまとめています。 弊社はメインでDjangoを使ったWebアプリを作っているので、それが前提の話になっています。 Softlayer_summit from Shuichi Yukimoto

SoftLayerBluemixSummitのレポート

9月2日にベルサール渋谷ファーストでSoftLayerBluemixSummitが開催されました。 IBMのクラウドサービスのSoftLayerとBlueMixのユーザ会主催のイベントです。 ユーザ会の運営委員としてコミュニティが活性化していくことはとても嬉しいことです。 東京でしかまだ開催がないですが、いつの日か地方でもこのようなイベントが開催できればいいなーなんて思ってます。 SoftLayerのユーザ会では地方でも勉強会をやっていますので、お近くで開催されるときはぜひ顔を出してください。 今回のイベントに弊社は展示スポンサーとして、また実行委員として参加させてもらいました。 展示では、バージョンアップしたPBOXを展示しました。 たくさんのお客さんに来て頂きありがとうございます。 1700人の事前登録があり、会場は沢山の人で賑わいました。 朝早くから会場入りし、展示の準備と一日疲れましたが、とても充実した一日でした。 今回、セッションの一つをDMM.COMラボの小峰君と一緒に担当しました。 発表した資料は公開してますので、興味ある方はご参照ください。 h ttp://www.slideshare.net/yukimoto/softlayersummit 開発現場から効率的な開発手法やSoftLayerの活用事例についてご紹介 雪本修一@MNU http://www.slideshare.net/yukimoto/softlayerbluemixsummit DMM.com  Laboでの会員基盤リプレイスにおけるSoftLayer活用事例 小峰 央志@ DMM.com  Labo 弊社ではエンジニアを募集しています。 プログラミングが好きな方は以下のメールでお問い合わせください。 yukimoto@usa-mimi.jp

INTEROP Tokyo2015

6月11日(木)Interop Tokyoへ行ってきました。 私の目当ては、CITRIX社 ブース会場で行われた クラウド・エバンジェリストの北瀬公彦さんと常田秀明さんの講演です CITRIX社のロードバランサーであるネットスケーラーの活用事例を IBM社のクラウドサービスSoftLayerを例に説明されていました。 CITRIX社は、IBM社のグローバル提携企業だから、 CITRIX社のロードバランサーであるネットスケーラーと SoftLayer は、セットで説明されていました。 SoftLayer は、データセンターをプライベートにつなぐネットワークだっていう話でしたので、 IBM社のSoftLayer の物理サーバーを使えば、 データセンターをクラウド化ができる。 (オンプレミスの環境をそのまあ維持してデータセンターへ移行できる) 従来のオンプレミスユーザー最適だってことでした。 そのため、仮想化とか、クラウドがどうかとか説明必要ないということになり、 企業の情報システム担当者は、安心して使えるし、経営者にも説明しやすいと思いました。 自前で仮想化システム研究できる余裕はなく、 PaaSは不安という感じがあれば、 SoftLayerのIaaSサービスって、選択しやすいし、わかりやすい。 最適なクラウド基盤を選択できるっていいなと思いました。

インターン(その13)

実務訓練としてお世話になっています、 豊橋技術科学大学の近藤です。 本日、2月25日をもって、インターンが終了となります。 今回のインターン中に学ぶことができた、コーディングの習得の方法についてまとめてみました。 コードリーディングの重要性 当初、私はDjangoはおろか、Pythonすらあまり理解していない状態で Djangoチュートリアルを一通り行い、アプリケーションの開発を始めました。 しかし、チュートリアルや簡単なアプリケーションだけでは、実際に 使用するような美しいコーディングのアプリケーションの開発を行うことは、 非常に難しいと思います。  今回、Django本体のコードを読む必要があり、コードリーディングを行うことで、 「どのような記述方法があるのか」、「各処理の正しい手順」、 「Djangoでのプログラミングの考え方」が学べたのではないかと思います。  初心者が他人のコード、ましてや複雑な処理を書いている本体のコードを読むのは、 非常に抵抗があります。しかし、嫌々でもコードを読み、理解できるようになれば、 ある程度のコーディングができるようになります。初心者だからこそ、 しっかりと書き込まれたコードを読むことが重要であると感じました。 「何がどうしてダメなのか」を知る コードリーディングを行い、ある程度のコーディングができるようになりましたが、 書くコードはまだまだ無駄が多く、美しいとは言えませんでした。 コーディングしている際は、とりあえず動くコードを記述するので精一杯で、 知識不足であるため、「実はもっと楽な方法がある」ということを知らずに書いて いました。  今回、私が書いたソースコードを見て頂き、「どこが直すべき点か」、 「どうしてダメなのか」、「どのような記述にすべきか」という点の方向性を 教えて頂くことができ、改めて自分でリファレンスなどを調べ、 楽なコーディング、きれいなコーディングをすることができるようになりました。  ダメ出しをして頂ける方がいて、方向性だけを教えるということが、自分で調べて 解決するということにつながり、結果きれいなコーディングが身に付くのではないか と思います。 プログラミングに取り組む環境 新たなプログラミング言語を学ぶ際に重要になる点は、   ・ある程度の期間、しっかり集中して取り組める環

インターン(その12)

MNUにてインターンをさせていただいています、 豊橋技術科学大学の近藤です。 現在作成中のアプリケーションで行った作業の一部をまとめてみました。 Adminサイトの表示変更 AdminサイトのChangeListをいじっている際に、 1つのインスタンスにつき2行を割り当てて、 2行目の表示、非表示を切り替えるようにするため、 無理やりコーディングしてみました。 def detail(self, obj): pre = u'<pre>%s</pre>' % obj.message span = len(self.list_display) - 1 msg = u'<th >Message</th><td colspan="%s">%s' % (span, pre if obj.message != '' else '') detail = u'<button class="btn btn-info toggler_row_btn" id="%s" type="button 詳細</button>' % (obj.pk) button = u'<div class="btn-group btn-group-sm" role="group">%s</div>' % (detail) return u'%s</td></tr><tr class="toggler_row" id="%s"><td></td>%s' % (button, obj.pk, msg) detail.allow_tags = True 単純に、行を閉じて新しい行を開いてpreタグで くくったメッセージを表示させているだけです。 後はdjango.contri

インターン(その11)

MNUにてインターンをさせていただいています、 豊橋技術科学大学の近藤です。  DjangoのAdminサイトをカスタマイズしていたので、内容をまとめてみました。 アクションの追加 FileFieldを使ってファイルを管理していたので、ファイルを削除できるアクションを追加してみました。 from django.contrib import admin from .models import Hoge def file_delete(modeladmin, request, queryset): for query in queryset: query.file_delete() # modelsに記述した除去メソッド file_delete.short_description = u'ドロップダウンに表示するアクション名' class HogeAdmin(admin.ModelAdmin): actions = [ file_delete ] admin.site.register(Hoge, HogeAdmin) フィルターの追加 アクション追加のついでにファイルがあるかでフィルターできるように。 call FileListFilter(admin.SimpleListFilter): title = u'フィルター名' parameter_name = 'file' # urlのパラメタ def lookups(self, request, modeladmin): return ( ('true', u'あり'), ('false', u'なし'), ) def queryset(self, request, queryset): if self.value() == 'true': return queryset.exclude(file__exact='') elif self.value() == 'false': return query

インターン(その10) デブサミ2015

MNUにてインターンをさせていただいています、 豊橋技術科学大学の近藤です。 本日行われた、Developers Summit 2015のセッション、  「クラウドAPIを利用した開発について」を聴講してきました。 このセッションでは、SoftLayerの豊富なAPIを利用した開発について、 SoftLayerエバンジェリストの北瀬さん、MNUの 石橋さん、 エクストリーム・デザイン・ラボの柴田さん、クリエーションラインの前佛さんが 話されていました。 SoftLayerの大きな特徴として、ベアメタル(物理サーバ)を使用することができる という点があります。 セッション冒頭で、北瀬さんがSoftLayerのポータルを使用して、 ベアメタルサーバを実際にオーダーするというデモを行われました。 CPU, Memory, Storageなどのほか、 Intel TXT など、様々なハードウェア構成、 専用線などのネットワーク構成をポータルからオーダーすることが可能だそうです。 カスタマイズを施した物理サーバは数時間、テンプレート化されたもので数十分、 仮想サーバーだと数分で使用可能になるという、たいへん短いビルド時間、 高機能なポータルは、SoftLayerを使う大きな利点であると感じました。 石橋さん、柴田さん、前佛さんが、SoftLayerを使用することのメリットと、 SoftLayerの問題点をそれぞれ以下のようにあげられていました。 メリット ・ ObjectStorageがデフォルトでつかえる ・ サーバ構成がフレキシブルである  - ベアメタルを用いることで、ハイパフォーマンスなサーバ構成が可能である ・ 純粋なIaaSである ・ 高い安定性  - ベアメタルを使用した占有環境であると、性能にほとんど揺らぎがない  - 非占有環境であっても、他のサービスと比較して安定している ・ Catalystプログラム  - 起業家支援プログラムの内容が充実 月額1,000ドル分の無償利用が可能 ・ コミュニティの存在  - 困ったときに助け合える環境がある 問題点  ・ 月末締めに対応していない  - アカウントを作成した日付が Anniversary Bil

インターン(その9) Djangoで非同期処理

MNUにてインターンをさせていただいています、 豊橋技術科学大学の近藤です。 DjangoでBuild用のコマンドを作成しましたが、 そのまま使用すると、コマンド終了までページが戻ってこないので、 非同期処理を使用したいと思います。 Djangoで非同期処理を実装する際には、Celeryというモジュールを使うのが 一般的らしいです。Celeryはタスクキューを管理するインタフェースを提供しており、 内部で実際にキューイングするブローカーが必要でした。今回は、ブローカーに Redisを使用します。 インストール django-celeryのインストール pip install django-celery この時、Celery本体も一緒にインストールされる Redisのインストール yum install redis pip install redis 設定 setup.py INSTALLED_APPS += ( 'djcelery', ) import djcelery djcelery.setup_loader() # BrokerサーバのURLを指定 Redisのポートはデフォルト6379 BROKER_URL = 'redis://127.0.0.1:6379/' # 実行結果のストア先 CELERY_RESULT_BACKEND = 'djcelery.backends.database.DatabaseBackend' # 実行できるメッセージのホワイトリスト CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] 実行するタスクの記述 実行するアプリ内にtasks.pyを用意する。この中に非同期処理させる記述を書くのが一般的。 from __future__ import absolute_import, unicode_literals from celery.task import Task from celery import shared_task from .apis import build log

インターン(その8) SoftLayer Summit 2015

豊橋技術科学大学の近藤です。 昨日、虎ノ門ヒルズで行われた「 SoftLayer Summit 2015 」に 参加させていただきました。 SoftLayerユーザーコミュニティが中心となって開催されたカンファレンスで、 500人以上の方が参加されました。 アメリカSoftLayerのフィリップス・ジャクソンさんが基調講演で登壇され、 pythonで書かれたコードを実行し、APIを用いて20台のサーバを立ち上げるという デモンストレーションを行われていました。 SoftLayerの価格設定は、他のサービスと比較して低価格で、データセンタ間の通信が 無料で行えるという、太っ腹なサービスであり、 「一体どこで儲けているのか」という質問に対し、ジャクソンさんは、 「700人で12万台のサーバを管理していました。これは、自動化やスクリプトなどをAPI に反映してきたから。」とおっしゃっていました。 このキモであるAPIをいかに使うかについて、APIの魅力を IBMの小薗井さん、国政さん、そしてMNUの雪本さんが話されていました。 。 また、本日2/13 18:00から、APIをつかって開発が体験できる 第1回東京SoftLayer Hackathon を開催するそうです。 終了後に行われた懇親会では、ライトニングトークが行われ、 SoftLayerを使用したオンラインストレージであるPBOXについて、 MNUの石橋さんが説明されていました。 とても貴重な体験ができました。今後、実際にSoftLayerを使用してみたいと思います。

インターン(その7)

豊橋技術科学大学の近藤です。  pythonをあまり触ってこなかった私が、 躓いた点、気を付けるるべきと思った点をまとめてみました。 Logger Djangoで使うコマンドを作成した際、ログ表示にprintを使っていましたが、 printでのロギングはよろしくないということなので、Loggerについて調べてみました。 基本的な使い方 import logging logger = logging.getLogger('hoge.command') logger.setFormatter(logging.Formatter('HogeCommand:%(message)s')) logger.setLevel(logging.DEBUG) logger.info('fuga') ログのレベルは DEBUG < INFO < WARNING < ERROR < CRITICAL の順。設定レベル以下のログは出ない printだと改行させずにログをだし、処理が終わったらステータスを出して改行する のような使い方ができたが、loggerでは難しいようで。 python ver3.2以降であれば、stream_handler.terminatorに改行コード が入っているので、空文字にしてやれば改行されないらしい。 Exception.message @ version2.6 except Exception as e: logger.warning(e.message) Filepython 2.6だと怒られるので、 logger.warning(e) logger.warning(e[0]) logger.warning(e.args[0]) logger.warning(e.str()) のどれかでOK。ただ、e.str()だとUTF-8が化けるので注意。  Popen os側のコマンドをたたく際に、os.systemや、commands.getstatusoutput を使っていたが、subprocess.Popenのほうが出力等の制御がしやすく、 Ctrl-cが送られてきた際にも処理を止めてくれたりするので使って

インターン(その6)

豊橋技術科学大学の近藤です。 只今、Djangoプロジェクトのリポジトリを指定して実行すると、 Clone,  Virtualenv作成, pipでのfreezeインストール, Test, cx_freezeでのBuild, ZIP圧縮 を自動的に行うDjangoアプリを作成中です。 その際に、いくつか躓いた点があったのでまとめてみました。  os.path.realpathではチルダは使えない よく考えたら動かないのは当然ですが、なかなか気づきませんでした。 os.path.realpath('~/.virtualenv/hoge/bin/pip') は、 /home/kondo/django/fuga/~/.virtualenv/hoge/bin/pip になるそうで。 チルダの展開は os.path.expanduser がやってくれる。 os.path.expanduser("~/.virtualenv/hoge/bin/pip') -> /home/kondo/.virtualenv/hoge/bin/pip Test時のカレントディレクトリに注意する ビルドしたいプロジェクト内でテストを実行しようと、manage.py test を実行したら こんなエラーをはいていました。 File "/usr/lib64/python2.7/unittest/loader.py", line 267, in _find_tests raise ImportError(msg % (mod_name, module_dir, expected_dir)) ImportError: 'tests' module incorrectly imported from '/home/kondo/django/ fuga/.build/piyo/myapp'. Expected '/home/kondo/django/fuga/myapp'. Is this module globally installed? 発生条件が 親プロジェクト内のディレクトリに存在する 子プロジェクトをテストしようとする

インターン(その5) Slack Bot 作成まとめ2

豊橋技術科学大学の近藤です。 昨日のSlackBotまとめに足りない点があるので、 別にまとめます。 1. API Tokenの取得 https://api.slack.com/web から取得するのは、ユーザのTokenでした。 Bot用のトークンを取得する方法は、 Configure Integrations(左チーム名のドロップダウン)  -> Bots を Add(下の方)    -> デフォルトの名前を決定する      -> API Token  でした。 2. Markdownを使う mrkdwnをTrueにする。 data = { 'text': '``` print(`hoge`) ```', 'mrkdwn': True, 'attachments': [attachment, ], } attachments内では、mrkdwn_inにキーを記述 attachment = { 'fallback': 'fuga', # attachmentsの表示ができない端末用の文字列 'pretext': 'piyo', # attachmentの上にtextと同じように出力 'title': 'タイトル', 'text' : '*hogehoge*',  'fields': [field, ], 'mrkdwn_in': ["pretext", "text", "title", "fields", "fallback"], } mrkdwn_inに記述できるのは5種類。 3. URLの記述 URLを記述する際は '<' , '>' を使うといいらしい。 ただ、使わなくてもリンクを張ってくれる。 ただ、 'text': '[ <http: www.youtub

インターン(その3・肉)

豊橋技術科学大学の近藤です。 29日の夜、築地にある「大阪焼肉・ホルモン ふたご」さんに連れて行って頂けました。 度のお肉も美味しかったのですが、名物の「名物黒毛和牛のはみでるカルビ」は、 そのサイズにびっくり、いろいろな部位が頂けて非常に美味しかったです。 網から溢れんばかりの肩ロースを、それぞれの部位に切り分けていただきました。 特に、中央にあるロース芯(リブロース)は、口の中でとろけて絶品でした。  このロース芯、牛肉の等級を決定する際に基準になるそうで、 霜の量によって1~5の肉質等級が付けられます。 この等級が、牛全体の等級になるそうです。 等級決定に重要なロース芯ですが、明確な境目はなく、人間のカンによって線引きされています。 等級をつけることは、画像解析によって脂身の割合を出すことによってできますが、 ファジーな処理を行わなければならない、ロース芯の抽出の自動化は難しいようです。 ご馳走様でした。

インターン(その2)

豊橋技術科学大学の近藤です。 前回に引き続き、AdminSiteのオーバーライドに関して まとめてみます。 基本的にはModelAdminのオーバーライドと同様に、 if perms.get('change', False): try: model_dict['admin_url'] = reverse('autoview:%s_%s_changelist' % info, current_app=self.name) except NoReverseMatch: pass このようにページ名を変更していけばOKでした。 (前回は付け忘れていましたが、autoviewという名前空間をつけました) オーバーライドし、ページ名を変更する関数は、 __init__ register index app_index さらに、全ユーザに権限を与えるため、has_permissionの オーバーライドを行います。 これによりadminサイトと同様に、 urls.pyのurlpatternsに url(r'^autoview/', include(autoview.urls)), を追加し、 使用したいモデルをadmin.site.registerのように、 autoview.register(Hoge) とすれば、使用できました。 もちろんAdminのようにリストに表示したいものを list_displayに登録することで変えることも可能です。 ただ、このままではAdminサイトの更新履歴と同じデータベースを 利用しているので、その点を修正する方法について 次回の記事にまとめようと思います。

インターン(その1)

初めまして。 1月8日から2月24日まで、株式会社MNUに実務訓練としてお世話になっています、 豊橋技術科学大学の近藤です。 実務訓練の期間中に学んだ事、感じた事を、 こちらのブログにまとめていこうと考えています。 成果を出し、プログラマとして成長できるよう、 頑張りたいと思います。 現在作成中の、DjangoのAdminサイト出力機能を利用した、 汎用的なフォーム出力機能について、まとめてみたいと思います。 DjangoのAdminサイト出力を実装しているのは、 AdminのIndex部分:django.contrib.admin.sites 各モデルのに関する部分:django.contrib.admin.options で行っているようです。 今回は最初に、モデルのインスタンス追加・編集・一覧・削除 機能の実装から始めました。 ModelAdmin内の response_add, response_change, response_post_save_add, response_post_save_change, delete_view にて、TemplateResponseを返してページ表示を行っています。 なので、viewsでこれらの関数を呼び出せば、 Adminページと同様のものが出力されます。 しかしながら、リンク先まで同じであったり (つまり、adminページに飛んでしまう) 管理者権限を持っていないと使えないなど、問題があるため ModelAdminをoverrideしたクラスを作成し、実装することにしました。 Responseを返す関数内で、adminのページをリンク先として指定しているので、 ページ名の変更を行う必要がありました。 また、テンプレート内でも同様の部分があるため、 変更しました。 # ex. In response_add if post_url_continue is None:     post_url_continue = reverse( '%s_%s_change' , %         (opts.app_label, opts.model_name),  変えた名前でurlを用意し、viewsに記述した関数でそれぞ