2013年1月31日木曜日

ハリウッドでは、ドローン(無人小型ヘリコプター)で映画撮影

ハリウッドでは、ドローン(無人小型ヘリコプター)で映画撮影することになるようです(Hollywood lobbies FAA to allow use of drones to shoot movies)。今まで撮影できなかったアングルから撮影できることはもちろん、大型クレーンのような設備も必要なくなることから、コストも抑えられます。FAA(連邦航空局)の認可を必要とするところが、テロに敏感な米国らしいとも言えます。パパラッチに利用される懸念にも言及されていますが、確かに、良いことばかりではないのかもしれません。



2013年1月30日水曜日

Ceph(せふ)って何?

Ceph(せふ)って何? こちらのTechCrunchのニュースで見かけたので、ちょっと調べてみました。複数のストレージシステムに対して、データを分散管理できるファイルシステムだそうで、Linuxカーネルに組み込まれているそうです。
  • ファイルの保管場所を管理するサーバー
  • ファイルを実際に保存するサーバー
  • 障害を検知するサーバー
オープンソースとして開発されていて、サーバーは、上記のように3分構成になっています。今後、更に注目されることでしょう。



参考サイト
Cephを使ってみる
Cephとは(ITpro)

2013年1月29日火曜日

スマホから操作できるワイヤレスドアモニター「DoorBot」

スマホから操作できるワイヤレスドアモニター「DoorBot」。最近、ワイヤレスドアモニターは、よく見かける人気の商品となりました。このDoorBotは、スマホと連携することにより、一段とその便利さを増しています。玄関に設置した監視カメラがネットワークでつながるので、例えば、遠隔地の別荘などでのドアの応対も可能となっています。「家がおしゃべりする」そんな漫画のような使い方のできる便利グッズです。



2013年1月28日月曜日

数十年後には、DNAがハードドライブに置き換わる?

数十年後には、DNAがハードドライブに置き換わる?(Why DNA Will Someday Replace the Hard Drive)という記事を見つけました。DNAにエンコードすることにより、文書や写真、音楽などのコンピュータファイルを膨大、かつ、コンパクトに保存できると報告されています。エンコード形式は既に実証済みとのこと。DNAの情報記憶密度は、既存のメディアに比べ、千倍以上も大きく、その最大の利点は、数千年のオーダーで保存できることです。今後、数十年以内に価格も競争力を持ったものになるだろうと推測されています。人間の想像力は、本当にスゴイ。

2013年1月27日日曜日

無料で、50GBのオンラインストレージ「MEGA」

無料で、50GBのオンラインストレージ「MEGA」を、早速、利用してみました。Megauploadの創設者が新たに始めたサービスだそうです。危険な香りが、また、ユーザーを引き付けるのかもしれません。利用者が急増しているとのこと。

さて、その使用感ですが、良く練られたユーザーインターフェースで、シンプルでありながら、非常に使いやすい構成になっています。サービス開始に至る背景はさておき、純粋に、その機能面のみで人気が爆発すること間違いなしです。ただ、人気がありすぎるためなのか、回線スピードは遅め? 4GBのファイルをアップロードしようと試みましたが、2時間かかると表示され、挫折しました。というわけで、ファイルサイズに上限はないようです。とにかく、有り難く利用させていただきましょう。





参考サイト
50Gバイト無料の「MEGA」、開始1日で100万人が登録(ITmedia)
Megauploadの創設者が新たなストレージサービス「MEGA」をオープン(ITpro)

2013年1月26日土曜日

透明の3Dテレビで、よりクリエイティブに?

透明の3Dテレビ(Transparent 3D display revealed at CES)で、よりクリエイティブに? 3Dモニターを透明にして何が面白いのかと思いましたが、ショーウィンドウなどに利用すれば、効果絶大? 背景に位置するモノへのインパクトが違います。YouTube映像を見ると、純粋に新鮮な驚きがあります。まさに、これぞバーチャル。主役の人や物が、映像の中に位置していることが、大きな違いを生み、衝撃をもたらしています。


2013年1月25日金曜日

PHPクラウドの比較記事「Cloudscapes – Comparing PHP Cloud Hosting Platforms」

PHPクラウドの比較記事「Cloudscapes – Comparing PHP Cloud Hosting Platforms」は、一読の価値あり。PHPクラウドを運営されているfortrabbitの方が執筆されている記事で、現在展開されている主要なPHPクラウドサービスが網羅されています。ベータ運用中など、スタートアップ段階のものも紹介されており、さすがは業界人。チェックが厳しいです(笑)。もちろん、比較記事を書かれているだけあり、サービス内容ではfortrabbitがトップクラスだと思います。

fortrabbit

2013年1月24日木曜日

Django Admin(管理サイト)での、データの並べ替え

Django(1.4.3) Admin(管理サイト)での、データの並べ替えです。orderingで、タプル型のリストデータを指定すると、オーダーバイ(oder by)してくれます。改めて、Django Adminのその操作性に感動です。こんなに簡単でいいのでしょうか? 間違いなく開発者をダメにしますね(笑)。

/blog/admin.py
class BlogAdmin(admin.ModelAdmin):
    list_display = ('title', 'pub_date')
    ordering = ['-pub_date',]


参考サイト
django admin order by alphabet(Stack Overflow)

2013年1月23日水曜日

Djangoで「No module named Image」のエラー

Django(1.4.3)で「No module named Image」のエラー表示です。 Python Imaging Library (PIL)をインストールして、救われました。前回も同じエラーに遭遇したので、忘れないように備忘録です。Pythonで画像を扱う場合は、インストールしておくべきなのでしょう。

pip install PIL


参考サイト
No module named Image(Stack Overflow)

2013年1月22日火曜日

mysql-pythonのインストールで、「Command python setup.py egg_info failed with error code 1」のエラー

mysql-pythonのインストールで、「Command python setup.py egg_info failed with error code 1」のエラーが表示され、先に進めず、しばらく右往左往しました。libmysqlclient-dev をインストールしたら、無事、解決です。今まで動いていたのに、何だったのでしょうか? ちなみに環境は、Ubuntu12.10 Server。Djangoを1.4.3にアップグレードしたことが原因? ちょっと環境が変わると躓くようでは、まだまだ修行が足りません。己の未熟さを思い知らされました。

sudo apt-get install libmysqlclient-dev
pip install mysql-python

参考サイト
mysql_config not found when installing mysqldb python interface(Stack Overflow)

2013年1月21日月曜日

PythonのDjango実験サイト、一区切り

PythonのDjango(1.4.2)実験サイト、一区切りです。今まで作成してみた機能をまとめてみました。誇れる機能は無いのですが、少なくとも、Python+Djangoに対する免疫はできたように思います。特に、Djangoの設計思想や、Django管理サイトは、本当に素晴らしいものだと感銘を受けました。これからも、積極的に利用していこうと思っています。

  • 会員登録
  • ブログ
  • アンケート
  • ソーシャルアカウント連携

といった機能が実現できました。簡易CMSとして利用できるかな? そのシンプルさが売りです(笑)。

実際のまとめサイトはこちら


2013年1月20日日曜日

Djangoで、django-social-authを利用して、ソーシャルアカウントログイン

Django(1.4.2)で、django-social-authを利用して、ソーシャルアカウントログインです。taichino.comさんのページを参考にして、設定させていただきました。拍子抜けするほど、簡単に設定出来ます。先日より設定していた、Twitter+tweepyの苦労は何だったのでしょう(笑)。

対応しているソーシャルサービス
OAuth
OpenId
Angel List
Behance
Bitbucket
BrowserID
DISQUS
Douban
Douban OAuth
Douban OAuth2
Dropbox
Evernote OAuth
Facebook
Flickr
GitHub
Google
Google OAuth
Google OAuth2
Google OpenID
Orkut
Instagram
LinkedIn
MSN Live Connect
Mail.ru OAuth
Mixcloud OAuth2
Odnoklassniki.ru
OAuth
IFrame applications
Readability
Shopify
Skyrock
SoundCloud
StockTwits
Stripe
TripIt
twilio-backend
Twitter
VKontakte
OAuth2
OpenAPI
Weibo OAuth
Yahoo OAuth
インストール
pip install django-social-auth
python manage.py syncdb
settings.pyに、設定追加
TEMPLATE_CONTEXT_PROCESSORS = (
    'social_auth.context_processors.social_auth_by_name_backends',
    'social_auth.context_processors.social_auth_backends',
    'social_auth.context_processors.social_auth_by_type_backends',
    'social_auth.context_processors.social_auth_login_redirect',
)

INSTALLED_APPS = (
    'social_auth'
)

AUTHENTICATION_BACKENDS = (
    'social_auth.backends.twitter.TwitterBackend',
    'social_auth.backends.facebook.FacebookBackend',
    'social_auth.backends.google.GoogleOAuthBackend',
    'social_auth.backends.google.GoogleOAuth2Backend',
    'social_auth.backends.google.GoogleBackend',
    'social_auth.backends.yahoo.YahooBackend',
    'social_auth.backends.browserid.BrowserIDBackend',
    'social_auth.backends.contrib.linkedin.LinkedinBackend',
    'social_auth.backends.contrib.disqus.DisqusBackend',
    'social_auth.backends.contrib.livejournal.LiveJournalBackend',
    'social_auth.backends.contrib.orkut.OrkutBackend',
    'social_auth.backends.contrib.foursquare.FoursquareBackend',
    'social_auth.backends.contrib.github.GithubBackend',
    'social_auth.backends.contrib.vkontakte.VKontakteBackend',
    'social_auth.backends.contrib.live.LiveBackend',
    'social_auth.backends.contrib.skyrock.SkyrockBackend',
    'social_auth.backends.contrib.yahoo.YahooOAuthBackend',
    'social_auth.backends.contrib.readability.ReadabilityBackend',
    'social_auth.backends.OpenIDBackend',
    'django.contrib.auth.backends.ModelBackend',
)

TWITTER_CONSUMER_KEY         = ''
TWITTER_CONSUMER_SECRET      = ''
FACEBOOK_APP_ID              = ''
FACEBOOK_API_SECRET          = ''
LINKEDIN_CONSUMER_KEY        = ''
LINKEDIN_CONSUMER_SECRET     = ''
ORKUT_CONSUMER_KEY           = ''
ORKUT_CONSUMER_SECRET        = ''
GOOGLE_CONSUMER_KEY          = ''
GOOGLE_CONSUMER_SECRET       = ''
GOOGLE_OAUTH2_CLIENT_ID      = ''
GOOGLE_OAUTH2_CLIENT_SECRET  = ''
FOURSQUARE_CONSUMER_KEY      = ''
FOURSQUARE_CONSUMER_SECRET   = ''
VK_APP_ID                    = ''
VK_API_SECRET                = ''
LIVE_CLIENT_ID               = ''
LIVE_CLIENT_SECRET           = ''
SKYROCK_CONSUMER_KEY         = ''
SKYROCK_CONSUMER_SECRET      = ''
YAHOO_CONSUMER_KEY           = ''
YAHOO_CONSUMER_SECRET        = ''
READABILITY_CONSUMER_SECRET  = ''
READABILITY_CONSUMER_SECRET  = ''

LOGIN_URL          = '/login-form/'
LOGIN_REDIRECT_URL = '/logged-in/'
LOGIN_ERROR_URL    = '/login-error/'
urls.py
urlpatterns = patterns('',
    url(r'', include('social_auth.urls')),
)
/templates/index.html
<a href="{% url socialauth_begin 'twitter' %}?{{ redirect_querystring }}">...</a>
syncdb後、データベース内にの3つのテーブル(social_auth_association、social_auth_nonce、social_auth_usersocialauth)が出来がっています。今回試したのは、Twitterアカウントのみですが、ログインすると、ユーザーテーブル(auth_user)にもデータ登録され、ユーザー管理されるようになります。ユーザー登録したくない場合は、「SOCIAL_AUTH_CREATE_USERS = False」と設定すると良いらしい。詳しい設定項目の数々は、こちら。細かく動きを制御できるようになっています。とにかく素晴らしいの一言。

実際に設定してみたサイトがこちら



参考サイト
Django Social Auth documentation
Djangoでソーシャルアカウントを扱う(taichino.comさん)

2013年1月19日土曜日

Fedora 18をネットワークインストール

Fedora 18をネットワークインストールしてみました。使用したイメージは、Fedora-18-x86_64-netinst.iso。ダウンロードはこちら。インストール作業はかなり簡素化されていて、入力する部分は最低限の項目のみ。ネットワークインストールとはいえ、勝手にダウンロード先のサーバーを見つけてくれるので、普通のインストールと何ら変わりません。使っているPCが非力なためなのか、結構、時間がかかりました。Live CDでも利用できますので、インストールしてまで利用する必要はないのかもしれません。

さて、ちょっと利用してみての感想です。相変わらず、Gnome3が重いです。良くも悪くも、デスクトップOSとして、まとまっていると思います。一方で、個性は、なくなりつつあるかもしれません(笑)。Fedoraよ、何処へ? 岐路に立っていることは、明らかでしょう。

2013年1月18日金曜日

Herokuで、Django+tweepy挫折

Herokuで、Django(1.4.2)+tweepy挫折です。もう、何をやっても、ダメ。開発サーバーでは、何の問題もなく、TwitterのOAuth認証ができ、ユーザー名やタイムラインを取得でき、更には、つぶやきをポストしたりできるのですが、Herokuではできない。localeの設定をいろいろ変えてみるも、変化なし。「unsupported locale setting」のエラーメッセージが表示されるばかり。使えない。心の底から、ガックリです。失意のブログとなりました。

unsupported locale setting

heroku config
LANG: ja_JP.UTF-8
views.py
import locale
locale.setlocale(locale.LC_ALL, '○○')
実際に設定してみたサイトがこちら。使い物になりません。笑ってやって下さい(涙)。

2013年1月17日木曜日

Djangoで、Twitterログイン

Django(1.4.2)で、TwitterのOAuthログイン認証を設定してみました。Tweepyパッケージを利用すると、簡単に実現できるようです。何とかログインはできるようになったのですが、ユーザー情報とライムラインが上手く取得できない(笑)。まだまだ不完全ですが、特に、spiri-tua-lismさんのサンプルは、いろいろと参考にさせていただきました。ソースを公開いただいているので、本当に有難い。感謝であります。

Tweepyパッケージのインストール
pip install tweepy
実際に設定してみたサイトがこちら。まだ不完全です(汗)。



参考サイト
twitterAPI用pythonライブラリtweepyを使えるようになるまで(六番さん)
初学者の自分がPython/Django/TweepyでTwitter OAuth認証作ったのでまとめ(spiri-tua-lismさん)

2013年1月16日水曜日

Djangoで、キーワード検索

Django(1.4.2)で、キーワード検索です。ブログ一覧表示画面に、タイトル(title)と本文(body)を検索する機能を追加してみました。Julien_Phalipさんのサイトを参考にさせていただきました。実は、ソースがエレガントすぎて、何をやっているのかわからない(笑)。それでも、見事なまでに動いています。今は、このまま利用させていただいて、後から、じっくり悩むことにしましょう。

from django.db.models import Q
import re

# 空白文字の削除
def normalize_query(query_string,
                    findterms=re.compile(r'"([^"]+)"|(\S+)').findall,
                    normspace=re.compile(r'\s{2,}').sub):
    query_string = query_string.replace(u' ', ' ')
    query_string = query_string.replace(u'、', ' ')
    return [normspace(' ', (t[0] or t[1]).strip()) for t in findterms(query_string)] 

# 検索クエリ作成
def get_query(query_string, search_fields):
    query = None 
    terms = normalize_query(query_string)
    for term in terms:
        or_query = None 
        for field_name in search_fields:
            q = Q(**{"%s__icontains" % field_name: term})
            if or_query is None:
                or_query = q
            else:
                or_query = or_query | q
        if query is None:
            query = or_query
        else:
            query = query & or_query
    return query

# 検索フォーム
class SearchForm(forms.Form):
    q = forms.CharField(label="キーワード")

# ブログ表示
def index(request):
    form = SearchForm(request.GET) 
    if ('q' in request.GET) and request.GET['q'].strip():
        query_string = request.GET['q']
        entry_query = get_query(query_string, ['title', 'body',])
        blogs = Blog.objects.filter(entry_query).order_by('-pub_date')
    else:
        blogs = Blog.objects.all().order_by('-pub_date')
テンプレート
<h2>検索</h2>
<form action="" method="GET">
  <label for="id_q">キーワード</label>
  {{ form.q }}
  <input type="submit" value="検索">
</form>

実際に設定してみたサイトがこちら

参考サイト
Adding search to a Django site in a snap({{ Julien_Phalip }}さん)

2013年1月15日火曜日

Pythonの正規表現おさらい

Pythonの正規表現おさらいです。今回、「re.compile」がわからずに、調べてみたのですが、改めて正規表現の奥深さに、その深淵を覗き見た気分になりました。ちなみに、re.compileは、正規表現パターンを正規表現オブジェクトにコンパイルし、最利用可能にするものとのこと。すぐに忘れそう(笑)。それにしても、Djangoを極めるなら、まずPythonの正規表現を自由に操れなくてはならない。時々目を通すことにしましょう。



参考サイト
Pythonで正規表現による文字列処理(検索・置換・分割)を行う(試験運用中なLinux備忘録さん)

2013年1月14日月曜日

グーグルやインテルの未来にLTEから自動運転車まで--2013年のテクノロジ10の予想

グーグルやインテルの未来にLTEから自動運転車まで--2013年のテクノロジ10の予想」 このような予想は、当たらないのが常ですが、それでも、的を外しているものばかりでもないでしょう。既にそうなりつつある予想も入っていますが、「ネットTV」はクラウド化も手伝って(?)、今年こそ大きくブレイクしそうな気もします。どのような流れが起きるのか、楽しみです。

2013年1月13日日曜日

天気予報を様々な視点から紹介してくれる「WeatherSpark」

天気予報を様々な視点から紹介してくれる「WeatherSpark」、ビジュアルでわかりやすいのはもちろん、グラフで気温や雲に覆われる確率、風の強さ、向き、湿気や気圧、露点といったデータまで時系列で提供してくれます。天気予報をビジネスで利用されている方などには、非常に有益なサイトではないでしょうか。年代別の平均データなども表示できて、科学的に天気に迫れます。

2013年1月12日土曜日

Djangoで、データベーステーブルのLEFT JOIN

Django(1.4.2)で、データベーステーブルのLEFT JOINです。どうやって実現するのだろうと、いろいろなサイトを調べて回ったのですが、クエリセットAPIのextraを利用することで、うまいことデータを取得できました。しかし、「データベースエンジン間の可搬性がなく、DRY則の侵犯でもあるため、可能な限り、使わないようにして下さい」と記されています。確かに、直接ソース内にSQL文を書き込むことになるので、応急措置的な使い方になるのかもしれません。設計自体を見なおした方がいいのかも?

Blog.objects.extra(
    select={
        'entry_pic': 'SELECT pic FROM blog_pic WHERE blog_pic.blog_id = blog_blog.id'
    },
)


参考サイト

2013年1月11日金曜日

Djangoで、メール送信の雛形文章をテンプレート化

Django(1.4.2)で、メール送信の雛形文章をテンプレート化してみました。テンプレート化することによって、ソースがすっきりしました。使い方は、Djangoテンプレートをそのまま利用できるので、管理も楽。同じ要領で、HTMLメールなども送信可能です。

/contact/views.py
# メールテンプレート
from django.core.mail import EmailMultiAlternatives
from django.template.loader import get_template
from django.template import Context

# テンプレートを読み込み
plaintext = get_template('email.txt')

# フォームの入力受け取り
sender = 'to@sampledomain.com'
fullname = '受信者'
message = 'お問い合せです。'

# 送信先
recipients = ['admin@sampledomain.com']
bccrecipients = ['bcc@sampledomain.com']
subject = 'お問い合せ' 

# テンプレートに変数割り当て
d = Context({ 'fullname': fullname, 'message': message })
textcontent = plaintext.render(d)

# メール送信
msg = EmailMultiAlternatives(subject, textcontent, sender, recipients, bccrecipients)
msg.send()
/templates/email.txt
{{ fullname }}様

下記の通り、お問い合せを承りました。

{{ message }}
参考サイト
Creating email templates with Django(Stack Overflow)
拡張コンテンツ形式のメールを送信する(Django documentation)

2013年1月10日木曜日

Djangoで、フォームのカスタムバリデーション

Django(1.4.2)で、フォームのカスタムバリデーションです。既存のモデルに追加して、条件を加えたいたい時などにcleanメソッドを使うと、細かくデータの入力チェックが行えます。複数をまとめてチェックする場合は、メソッド名を「clean」に、個別に行う場合は、「clean_(変数名)」とすれば良いようです。

views.py
import re

class RegistrationForm(ModelForm):
    class Meta:
        model = Member
        fields = ('nickname','gender','age','zip','address','tel',)

    # ニックネーム
    def clean_nickname(self):
        nickname = self.cleaned_data['nickname']
        if len(nickname) < 3:
            raise forms.ValidationError(u'ニックネームを3文字以上で')
        return nickname

    # 郵便番号
    def clean_zip(self):
        zip = self.cleaned_data['zip']
        if zip:
            if not re.match(r'^\d{3}-\d{4}$', zip):
                raise forms.ValidationError(u'郵便番号はXXX-XXXXの形式で')
        return zip

    # 電話番号
    def clean_tel(self):
        tel = self.cleaned_data['tel']
        if tel:
            if not re.match(r'^\d{2,4}-\d{2,4}-\d{4}$', tel):
                raise forms.ValidationError(u'電話番号はXXXX-XXXX-XXXXの形式で')
        return tel


参考サイト
フォームやフィールドのバリデーション(Django documentation)
forms.pyでバリデーションするときにハマった(AtAsAtAmAtArAさん)

2013年1月9日水曜日

Djangoの組み込みテンプレートタグとフィルター(Built-in template tags and filters)

Django(1.4.2)の組み込みテンプレートタグとフィルター(Built-in template tags and filters)です。よく使うタグやフィルターが揃っています。特に便利だなと思ったものを備忘録として、2つ挙げておきます。

cycle
ループ内で規則的に表示を変更したい場合などに便利です。
{% for o in some_list %}
    <tr class="{% cycle 'row1' 'row2' %}">
        ...
    </tr>
{% endfor %}
spaceless
タグのスペースを取りのそいてくれます。
{% spaceless %}
    <p>
        <a href="foo/">Foo</a>
    </p>
{% endspaceless %}

2013年1月8日火曜日

Djangoで、デバック用のSQLクエリの表示

Django(1.4.2)で、デバック用のSQLクエリの表示です。今ごろになって、ようやく設定できました(笑)。いろいろ試してみましたが、coordinatesさんの設定例がベストです。これで目の前が、開けた気がします。

views.py
queryset = MyModel.objects.all()
print queryset.query
テンプレート上で確認する場合は、以下の通り。settings.pyに出力先を設定して、テンプレートを準備すれば、OKです。

settings.py
DEBUG = True
TEMPLATE_DEBUG = True
# SQLクエリを表示させたい端末のIPを指定
INTERNAL_IPS = ('127.0.0.1', '192.168.1.1',)
/templates/base.html
{% if debug %}
    {% if sql_queries %}
        <h3>Queries</h3>
        <table>
        <thead>
        <tr>
            <th scope="col">#</th>
            <th scope="col">SQL</th>
            <th scope="col">Time</th>
        </tr>
        </thead>
        <tbody>
        {% for query in sql_queries %}
            <tr class="{% cycle odd,even %}">
                <td>{{ forloop.counter }}</td>
                <td>{{ query.sql|escape }}</td>
                <td>{{ query.time }}</td>
            </tr>
        {% endfor %}
        </tbody>
        </table>
    {% endif %}
{% endif %}
実際にSQLクエリが表示されている様子。


参考サイト
デバッグでSQLのログを出力させる(coordinatesさん)

2013年1月7日月曜日

DjangoのQオブジェクト(Q object)でデータベース検索

Django(1.4.2)のQオブジェクト(Q object)でデータベース検索です。別途、用意されたオブジェクトを読み込まなければならないので、最初は面倒だなと思ったのですが、実は、非常に便利だということがわかりました。ドキュメントにもある通り、複数の条件を組み合わせて利用することができるので、複雑な検索にも対応できます。その使い勝手に、感激してしまいました。

views.py
from django.db.models import Q

# aから始まるニックネームのメンバーのみ取得
members = Member.objects.filter(Q(nickname__startswith='a')
# ニックネームの記入があるメンバーのみ取得
members = Member.objects.filter(~Q(nickname = None))


参考サイト
DjangoのORMのすごいところ(偏った言語信者の垂れ流しさん)
How do I do a not equal in Django queryset filtering?(Stack Overflow)

2013年1月6日日曜日

薄さ4ミリ、LGの55インチ有機ELテレビ(OLED TV)

LGの55インチ有機ELテレビが、発表されています(LG's 55-inch OLED TV enters the third dimension, we slide on our glasses )。映像の鮮明さにも圧倒されるのですが、驚くべきは、その薄さ、わずか4ミリ(mm)。凄すぎます。薄さも手伝って、重さも衝撃の16.5ポンド。約7.5kgです。しかも、シンプルで上質なデザイン。お値段は高そうですが、人気が出ること間違いなし。



2013年1月5日土曜日

Djangoで、Cloudinary上にアップロードした画像の削除

Django(1.4.2)で、Cloudinary上にアップロードした画像の削除です。public_id を指定すると、見事に削除できました。簡単に操作できます。これで、アップロードその2)、表示編集、削除と、一通りできるようになりました。ちょっと前進?

views.py
from cloudinary import CloudinaryImage
import cloudinary, cloudinary.uploader, cloudinary.forms, cloudinary.api

def delete(request, id):
    ret = cloudinary.uploader.destroy(public_id = imagename)
    # リターン(ret)として、{u'result': u'ok'} といった結果が返ってきます
実際に設定してみたサイトがこちら。会員さんのプロフィール写真が登録できるようになりました。

2013年1月4日金曜日

Djangoで、Cloudinaryを利用した画像のアップロード

Django(1.4.2)で、Cloudinaryを利用した画像のアップロードです。ファイル名(public_id)やフォーマット(format)などを指定してアップロードすることが可能です。ローカルの開発環境からもアップロードできるので、いろいろなことが試せます。

views.py
from cloudinary import CloudinaryImage
import cloudinary, cloudinary.uploader, cloudinary.forms, cloudinary.api

ret = cloudinary.uploader.upload(image, public_id='samplename' format='jpg')

# リターン(ret)として、以下のようなデータが返ってきます。
{
u'secure_url': u'https://res.cloudinary.com/samplename.jpg', 
u'public_id': u'samplename', 
u'format': u'jpg', 
u'url': u'http://res.cloudinary.com/samplename.jpg', 
u'height': 200, 
u'width': 200, 
u'version': 1340625837, 
u'signature': u'01234567890', 
u'resource_type': u'image'
}

参考サイト
django cloudinary upload remote image via url - invalid file name(Stack Overflow)

2013年1月3日木曜日

Djangoテンプレートで、CloudinaryのAPI操作

Django(1.4.2)テンプレートで、CloudinaryのAPI操作です。今まで、views.pyでCloudinaryのAPIを利用してりましたが、テンプレートで利用すると、デザインに合わせて、きめ細かく調整できます。Cloudinaryのライブラリをインストール後、settings.pyのINSTALLED_APPSに「cloudinary」を追加し、テンプレート内でロードすれば、準備OK。まさに、クラウドサービスの醍醐味が味わえます。

settings.py
INSTALLED_APPS = (
    'cloudinary',
)
/templates/blog/post.html
{% load cloudinary %}

{% cloudinary image width=300 height=300 crop="fit" gravity="center" effect="pixelate_faces" %}
実際に設定してみたサイトがこちら



参考サイト
pycloudinary(GitHub)

2013年1月2日水曜日

世界各地の新年の様子をフォトギャラリーでめぐる「CNN Photos: The world rings in the new year」

世界各地の新年の様子をフォトギャラリーでめぐる「CNN Photos: The world rings in the new year」、世界各地の様子を眺めてみると、花火を打ち上げ、ド派手に新年を迎えるスタイルが多いように感じます。お国柄を色濃く反映しているとも言えますが、静かに新年を迎える日本と、軍服を着た兵士がささやかに新年を祝うアフガニスタンの光景は、かなり異質。とにかく、いずれの写真も、シャープで印象深いものになっています。カメラマンの腕なのでしょうか。はたまた、カメラ性能のおかげなのでしょうか(笑)。

2013年1月1日火曜日

「量子テレポーテーション」て何?

量子テレポーテーション」て何? 次世代通信技術として、量子テレポーテーション通信の開発が進んでいるそうです。向学心に燃え、いろいろウェブ上の文献に目を通してみましたが、更に謎が深まりました(笑)。技術的な内容は別にして、盗聴不可能な、遠距離衛星通信が実現できる未来が待っている。そんな理解に落ち着きました。名前だけでも覚えておきたいと思い、備忘録です。



参考サイト
量子ITでも躍進する中国 97kmのテレポーテーションに成功(日本経済新聞)
中学レベルの数学で量子テレポーテーションを理解してみよう(misatopology)
3者間の量子テレポーテーション実験に成功(基礎研究最前線)
量子テレポーテーション(NAVERまとめ)