投稿

1月, 2013の投稿を表示しています

Google Drive SDKのクイックスタートをやってみる for Python

イメージ
概要 Googleが運営しているサービスの中に、Google Driveというものがあります。これはオンライン上に自分のドキュメントを保存しておくことができるサービスです。同じようなサービスに Dropbox や Microsoft SkyDrive があります。今回はGoogle Drive SDKを利用して クイックスタート を試してみます。次のような流れで進めていきます。 Googleのアカウントを取得する Google API Console のページでアプリケーションを登録する Drive SDKをインストールする アプリケーションの許可コードを取得するコードを書く アプリケーションの許可コードを取得する ファイルをアップロードするコードを書く クイックスタートをやってみよう 1.Googleのアカウントを取得する APIの利用にはGoogleのアカウントが必要です。アカウントを取得した時点で、 Google Drive にも領域が確保されていますから、一度どんなものか見ておくのもいいと思います。 2.Google API Console のページでアプリケーションを登録する アプリケーションの作成には APIコンソールのページ で申請を出さなければなりません。APIコンソールのServicesのタブをクリックして、Drive APIとDrive SDKのStatusをONに変更します。 その後、API AccessのページでクライアントIDを発行してもらいます。 Client ID、Client secret、Redirect URIsの各項目をプログラムで利用します。アプリケーションの登録はここまでで終了です。次は実際にアプリケーションを作成していきます。また、APIコンソールのページでは、どのくらい利用したかをグラフで見ることもできます。Webサービスで利用する際には頻繁に確認することになるのではないでしょうか。 3.Drive SDKをインストールする どのタイミングでも構わないのですが、SDKをインストールしておきます。私はeasy_installを利用しましたが、特に問題なくインストールをすることができました。SDKのページではpipを利用した方法も合わせて掲載されていま

modoのスクリプトをKit化する

イメージ
modoのKitとは modoにはKitと呼ばれる仕組みがあります。機能を拡張するためのパッケージング方法です。Kitを使う利点はたくさんありますが、主なものを挙げると以下のようになります。 他への依存が少ない KitをOn/Offする仕組みがある 配布が容易 modoの機能を拡張するためにスクリプトやフォームの編集があることは以前にも書きましたが、これらは色々な場所にスクリプトやコンフィグファイルが散らばってしまいます。もしかしたら同じファイル名のスクリプトがあるかもしれません。このような状態で利用者が間違いなくセットアップするのは大分難しいことです。また、Kitはメッシュなどのアセットも一緒に配ることができます。 このような点から、拡張機能を配布するのにはうってつけなのです。 今回のアプリケーションにもKitは大きな存在です。インストールするときに所定のフォルダに保存するだけなので、仕組みもとてもシンプルになります。アプリケーションを開発し始めたころはKitの存在を知らなかったので、どのようにインストールしたらいいのか悩んでいたのです。 しかしながら、世の中に配布されている拡張機能はKit化されていないものも多いのです。そこで、ある公開されているスクリプトをKit化させていただきました。 窓を配置するスクリプト 以前、 modo UserGroup Tokyo の 勉強会 に参加させていただきました。その勉強会の中で、柳村さんが窓のメッシュを効率的に配置するスクリプトを利用されていたのです。非常に便利なスクリプトです。Kit化の承認を柳村さんに快諾いただいたので、早速Kit化してみました。 Kitの仕様 Kit化に当たっては 基本タブにスクリプトを実行するボタンを追加 プリセットにアセットを追加 を実現します。また、キット名は「Set Window P」とします。 スクリプトのほかに窓のメッシュファイルもあるので、プリセットブラウザに表示するように設定を行います。 フォルダ構成 次のような配置としました。 SET WINDOW P ├─ index.cfg … Kit設定 ├─ ui.cfg … ユ

wxPythonでのモーダルダイアログ作成

モーダルダイアログ Webアプリケーションでダイアログを表現するにはなかなか難しいところなのですが、ネイティブアプリケーションでは モーダルダイアログ を作成することができます。wxPythonでもモーダルダイアログを作成できるようです。 wxPythonコーディング # -*- coding: utf-8 -*- import wx class DetailDialog(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, title="modal window") button = wx.Button(self, wx.ID_ANY, "Close") button.Bind(wx.EVT_BUTTON, self.button_close_click) text = wx.TextCtrl(self, wx.ID_ANY) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(text) layout.Add(button) self.SetSizer(layout) self.Layout() self.Center(wx.BOTH) def button_close_click(self, event): yesno_dialog = wx.MessageDialog(self, "close window?", "message", wx.YES_NO | wx.ICON_QUESTION) try: if yesno_dialog.ShowModal() == wx.ID_YES: self.Close() finally: yesno_dialog.Destroy() return Tr

wxPythonを利用する

イメージ
Webアプリケーションとネイティブアプリケーション さて、それではwxFormBuilderを利用してGUIを作っていきます。DelphiやVisualBasicなどでWindowsアプリケーションを作られた経験のある方なら、同じような感覚でGUIをデザインすることができると思います。 このように、 WYSIWYG でGUIをデザインしていくというのは昔からある取り組みですが、すぐにさわることができるということは非常に強力で、直観的です。この仕組み(フレームワークと呼んでも差し支えないでしょう)は、プログラミングを習得していくのに、とてもとっつきやすいと思います。 気を使うべきなのは、レイアウトシステムです。Layoutのパレットにいくつかのコンポーネント(wxPythonではウィジェットと呼びます)が見つかると思いますが、これらの動きを把握することができれば、思い通りのGUIを作っていくことができると思います。 また、HTMLでのデザインと同じ感覚でやっていこうとするとなかなかなじめないように思います。HTMLでは画面がスクロールするということ前提で、デザインをすることができますが、ネイティブアプリケーションではそのようなものはあまり見かけることはありません。お手本にするべきは、WindowsやMacのネイティブアプリケーションだと思います。 wxFormBuilderでGUIを作るときに気を付けること wxFormBuilderではデザインやイベントの定義を行うことはできますが、操作した時のコードを記述することができません。wxFormBuilderにはデザインしたものをPythonのコードとして出力する機能(ショートカットはF8)が備わっていますが、出力されたコードを編集したとして、その後にGUIの修正をする必要が出た場合、編集したコードは上書きされて消えてしまいます。 これを上手く解決するために、「継承」を利用します。出力されたコードを見てみるとよくわかりますが、デザインしたフォームがクラスとして宣言されています。これを継承して実際の画面を作りこんでいきます。wxFormBuilderはさらにそれを助けてくれます。上記のクラスを継承したスタブクラスを出力してくれる機能(ショートカットはF6)があります。 その

クライアント考察 その3

wxPythonを使う modo ディスカッショングループ で相談したところ、どうやらmodoにはカスタマイズ可能なスプレッドシートが用意されていないようです。方針を変更してwxPythonでGUIを作っていきたいと思います。 modoにはwxPythonのモジュールはインストールされていないので、wxPythonでGUIを作成したとしても、そのまま利用することはできません。そこで、py2exe(py2app)を使ってアプリケーション化し、それをmodoのスクリプトで呼び出すことにします。 今回作成するものは、modoとはリアルタイムで情報をやり取りするわけではなく、インストール場所の情報をもらえればいいので、どうやらこれでうまくいきそうです。 とりあえず、簡単なアプリケーションを作成してみて、実際にmodoから呼び出せるのかどうかを試してみなければなりません。wxPythonが利用できるかの判断はそこまで保留です。 なぜwxPythonなのか? ネイティブアプリケーションを作る方法は他にもいくつもあるため、他にも選択肢は考えられます。また、データのやり取りはJSONを介して行うので、JSONをパースすることができれば何でもいいのです。 ですが、ここで一つ注意する点があります。modoはWindowsとMac両方で動作するということです。ですから、今回作成するものも当然クロスプラットフォームが望まれます。それぞれの環境でネイティブアプリケーションを作るという方法もありますが、サーバーからクライアントまで言語を統一したいのでwxPythonを使うことにします。 wxPythonのセットアップ wxPythonのホームページ に行ってライブラリをダウンロードしてきます。インストーラーが配布されていますので、自分のプラットフォームにあったものを選びます。 GUIのデザインを行うにあたって、wxFormBuilderがあるとデザインが容易になります。コントロールのパレットから必要なものを選んでGUIを作っていくのは、DelphiやC++Builder、Windows Formを思い出させます。wxPythonは画面を作るのに比較的少なめのコーディング量で済みますが、それでもコーディングからデザインまでの時間が短ければ、時間を節約する

クライアント考察 その2

引き続きクライアントを作っています スクリプトを作成していると、自分の考えをどのように実現したらいいのか悩む時がたくさんあります。幸い、modoのコミュニティには多くの優れた方たちがいらっしゃいます。先人のお力をお借りしながら前に進んでいきます。 前回の投稿でフォームの編集を行うことができることがわかりました。フォームやスクリプトは3Dモデリングとは直接関係がないからか、特に情報を見つけるのに苦労します。 Takumiさんのページ( modo mode ) Luxologyのアセットシェア( luxology.com ) を参考にさせていただいて、フォームの編集やスクリプトの勉強を進めます。とにかく、たくさんのスクリプトに触れて、そのバリエーションを自分の中にため込んでいくしかありません。 スプレッドシート形式のインターフェイス WebからJSON形式で情報を取得して、modo側でそれを表示します。HTMLのテーブルやExcelのスプレッドシートのように表示したいと考えています。当初、modoにはスプレッドシートのようなインターフェイスがあるので、それを使っていけばいいと考えていましたが、フォーム編集の画面からではどうにもあのようなインターフェイスを実現できません。標準で用意されているインターフェイスを載せることはできるのですが、それらはあくまでも標準のインターフェイスであって、それをカスタマイズすることはできそうにないのです。あまりにも煮詰まってしまったので、 modo ディスカッショングループ に投稿してみました。いい返事が来るといいです。 実現できないことも考えて対策を考えておく必要はあります。今考えているのは、PythonのGUIライブラリである wxPython を利用することです。こちらはスプレッドシートのようなインターフェイスを利用できるようです。 現時点では回答が出ないので、他の作業をすることにします。