2014年5月21日水曜日

Django、ユーザー認証

■概要

djangoのログイン認証を利用して楽をしたい!!

■環境

python
django
mysql

■問題

ログイン、ユーザー作成は提供されているViewの利用で問題ないが、
テンプレート側でユーザー等を利用したときに値がとってこれない。

■解決策

djangoのログイン認証の機構を利用するときには、
クラスビュー利用したあと、
setting.pyに
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    )
が必要。
上記設定後テンプレート側で
{{user.username}}{{messages }}
が利用可能に

■詳細はこちら

Python プログラマのための Django テンプレート言語ガイド
Always including the user in the django template context


2014年5月17日土曜日

Markdown2+pygments

■概要

markdownでcodehiliteを表現したい。

■環境

python
Markdown2

■Markdown2をインストール

ここから
>pip install markdown2

■pygmentsをインストール

ここから
>pip install Pygments

■python

markdownのextrasにfenced-code-blocksを入れる。
result = markdown2.markdown(
    self.planetext,
    extras={"wiki-tables",'fenced-code-blocks'}
    )
わかりにくいと思いますが
生成されるhtml(ソース)に
が出ていれば成功だと思います。

■markdown

```html

見出し h1

見出し h2

見出し h3

``` ```python if True: print('hi') ```
1行目コード範囲開始
8行目コード範囲終了
1行目、9行目で言語を指定

■html

色つけるのならCSSの追加が必要


css自体は以下などここら辺から入手
いい場所ほかにありそうですが・・・

■備考

正しいかどうか不明・・・
期待通りの色付けはできましたが、いい配色を探すのが難しいと思ったりしています。

■参考




2014年5月11日日曜日

Djangoメッセージフレームワーク

■概要

最近Djangoでシステム構築するとどうなるかと思いいろいろ試行錯誤中。
FlaskのFlushと同様のことDjangoで・・

■環境

Django[1.6.4]

■注意点

公式ドキュメントに記載されているsettings.pyの設定はstartappでほぼ入っていました。

■python/django/views.py

from django.contrib import messages
from django.shortcuts import render_to_response, RequestContext
# ...
def some_view(request):
    messages.set_level(request, messages.DEBUG)
    # ...
    messages.debug(request, '%s SQL statements were executed.' % count)
    messages.info(request, 'Three credits remain in your account.')
    messages.success(request, 'Profile details updated.')
    messages.warning(request, 'Your account expires in three days.')
    messages.error(request, 'Document deleted.')
    # ...
    return render_to_response('my_template.html',
      my_data_dictionary,
      context_instance=RequestContext(request))
1行目:messageのimport
2行目:RequestContextが必要
5行目:set_levelで利用可能なメッセージタグのレベルを設定。デフォルトはinfoのようです。(ここで詰まった)
7~11行目:それぞれのメッセージのテスト
15行目:requestをcontext_instanceに渡してやる必要あり。

■html


{% if messages %}
    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %}
4行目:タグの情報をそのまま、classに渡すと楽ですね。

■備考

以下の識別がしっくりきたのでメモ
DEBUG:
  開発用のメッセージ、本番環境では無視される(または削除される)
INFO:
  ユーザーに対して情報を伝えるためのメッセージ
SUCCESS:
  アクションが成功した、例) “あなたのプロフィールの更新が成功しました”
WARNING:
  失敗ではないが、その危険性がある
ERROR:
  アクションが成功していないか、何かの失敗がある

■参考

http://docs.djangoproject.jp/en/latest/ref/contrib/messages.html
http://www.18th-technote.com/post/5386511650/django

2014年5月8日木曜日

filterの登録

■概要

template側でフィルター(filter)を利用したい。
たとえば、変数内の改行を「<br />」に変更する。
jinja2の機能を利用

■python/flask

from jinja2 import Markup, Environment, FileSystemLoader, evalcontextfilter
from jinja2.utils import soft_unicode
@app.template_filter("nl2br")
@evalcontextfilter
def nl2br(eval_ctx, value):
    res = soft_unicode(Markup.escape(value)).replace("\n", Markup("\n"))
    if eval_ctx.autoescape:
        res = Markup(res)
    return res
env = Environment(loader=FileSystemLoader("."), autoescape=False)
env.filters["nl2br"] = nl2br
1,2行目:必要なメソッドをインポート
3,4行目テンプレートフィルターであることの宣言、evalの特殊処理であることの宣言
5行目;おまじない・・・
10行目、11行目:環境変数のフィルターに登録

■html

{{each['planecontent'] | nl2br}}
変数の後に「|」(パイプ)でつないで呼び出したいフィルター名を記載

Flaskでflashを使ってみる

■概要

一度テンプレート側で利用すると、セッション上から消えるメッセージをテンプレート側に渡せる
利用者に一度だけ伝えたい情報などを記載するのにてきしていると思われ。
具体的には、登録成功したよ~など


■メソッド

flush(messege,category)
 messege:内容
 category:属性
属性は省略可能、省略した時には「get_flashed_messages」の引数なしになります。

■注意点

セッションを利用するので、secret_keyの設定が必要

■python/flask

from flask import Flask, flash
app.secret_key = 'hogehoge'
def fileimport():
    result = []
    log = []
    if request.method == "POST":
        flash('Import file succece!', 'info')

    return render_template(
        'test.html',
        )

7行目で、flashにメッセージを登録しています。

■html

{% with messages = get_flashed_messages(category_filter=["info"]) %} {% if messages %}
    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %} {% endwith %}
2行目:flashからメッセージを取り出し 3行目:メッセージの有無を確認 5行目:メッセージをforで回して、6行目で描写 10行目:処理終了

2014年5月6日火曜日

FlaskでのWebサービスでの投げっぱなしのPOSTをやってみた。


■目的

画面更新せずに、データのみを登録したいという動きを
サーバー側Flask、クライアント側ajaxを利用した環境での実装を行う必要あり。

■問題

jQueryのajaxで呼び出したときに
データの登録のみをWebサービスで行いたいのに
Flask側で画面展開されてしまう。
Html側
$("#ajaxstart").click(function(){
  $.ajax({
    type: "POST",
    url: "/hoge/",
    datatype:"json" ,
    contentType:'application/json',
    data: {objid:$('form#hogehoge').attr('value'),
    }, 
  }).done(function(data, status, xhr) {
  }).fail(function(xhr, status, error) {
  }).always(function(arg1, status, arg2) {
  });
});

Flask,Python側
@app.route('/hoge/', methods=['POST'])
def hoge():
    # オブジェクトの入手
    objid = Mongodb().objectid(request.form['hogehoge'])
    response = Response()
    return response

■対策

返答するresponseにコンテンツはないことを明示的に表現する必要があり。
Flask,Python側
@app.route('/hoge/', methods=['POST'])
def hoge():
    # オブジェクトの入手
    objid = Mongodb().objectid(request.form['hogehoge'])
    response = Response()
    # ステータスコードは NoContent (204)
    response.status_code = 204
    return response

■参考

resoponse.status_codeはほかにもいろいろあるみたいです。
詳しくはここいらで。
本当に204で正解は少し疑問

Python の Flask で REST API を作ってみる
WikiPedia

■追伸

どうも違ったみたいです。
formのactionのpostと、.ajaxでリクエストが二つ飛んでいました。
postのほうが画面をredirectで作っていたようです。最終的にはstatus_code指定しなくても大丈夫でした。
教訓:submitは要注意、目指すページの構成によって使い分けるべし。



2014年5月1日木曜日

Webサービスの作り方

実装までの企画のすべて

  1. 哲学
  2. アイデア
  3. テーマ
  4. コンセプト
  5. 名前
  6. デザイン
  7. 内部設計

哲学

ここが持っている特定の興味関する揺るがない気持ち。生産の原動力

アイデア

実現するための手順、方法、複数あってもいい。切磋琢磨して残ったものを採用

テーマ

具体的に勝負する領域。どこを強みにするか。手を抜かない場所

アコンセプト

アイデアを実現するための骨格。他者に伝わるイメージ

名前

仮でもいいので早めにつける。名前をもって初めて見えてくるものもある。

デザイン

全体のディテールを決める。モックアップや同じテーマのプロダクトを調査
無駄なものをそぎ落とす

内部設計

内部的な実装を検討する。情報区分け、データモデル。物理実装ユースケースの作成など

2014年4月30日水曜日

コマンドプロンプトを管理者モードで。

とりあえず、忘れないように

コマンドプロンプトの起動方法として一番しっくりきているのはWindows8なら、「win」キーおしてから「cmd」とタイプして、エンターキー。
ただし、管理者モードでは立ち上がらなかったので、ちょっとググルと楽そうな方法発見。


  1. Windowsキーを押下
  2. 「cmd」と入力
  3. 「Shift」+「Ctrl」押しながらEnter押下
  4. コマンドプロンプトが管理者モードで立ち上がります。

タスクバーから起動するときにも、「Ctrl」+「Shift」おしながらだと管理者モードで開くことが可能。
「Shift」+「Ctrl」押していると管理者モードで起動しようとするようです。


2014年4月29日火曜日

ThumbGugu とりあえず、デプロイ

やりたかったことある程度片す

  1. 検索窓のデザイン
    →Bootstrap3では難しそうかな・・・。前のバージョンだとできたのに
  2. ロゴの作成
    →完成。いろいろネット見てたけど、パワポ→PNG保存が一番簡単でシンプルなロゴなら最適な気がします。
  3. 利用者ごとの検索単語の削除機能
    →実装済み。ただしAdminiモードはつける必要あるな。
  4. ページング処理
    →実装済み。

といことで完成したイメージは以下の通り。
ひとまず自分がほしい機能は一通りそろえ終えたかな。


久しぶりに作ってみた。ThumbGugu

最近のマイブームはPythonになってしまいました・・・・
て分けでGAE+Python+KayFrameworkでWebサイト作成してみた。
Flaskなんかもよさげですが、Mongodbとセットで使ってみたいのでまたの機会に~
まぁ、http://searchwitharea.appspot.com/と同じというのは置いといて中身が違います!

タイトル:ThumbGugu
概要:検索結果をイメージで表示
使ってる技術:Python、Gae、KayFramework、Yahoo検索サイト、UrlFetch、DataStore




やり残してること
  1. 検索窓のデザイン
  2. ロゴの作成
  3. 利用者ごとの検索単語の削除機能
  4. ページング処理


2012年6月6日水曜日

AJax使えないかな・・・

AJaxつかって、画像を非同期で表示できないかなぁ
要件)
検索結果を表示
画像は遅れて表示

現在
①検索結果出力
②他ドメインのイメージ作成サーバーを利用してイメージを表示

更新後
①検索結果表示
②同一ドメイン内のイメージ表示コントローラーへリンク
③イメージ表示コントローラーが他ドメインのイメージ作成サーバーを利用して画像を作成


ん、元画面でCallBackの動きが必要か・・・
ちょっと大変かな。

2012年5月28日月曜日

セキュリティソフト変更~


ノートPC(Let'sNote CF-N9)のセキュリティソフトをtrendmicroからSmartSecurity5.0に
変えたら自宅でWifi経由のネットしてて固まることがなくなった・・・相性ってあるのかな・・・

http://canon-its.jp/product/eset/

2012年5月26日土曜日

SearchWithArea

検索結果をイメージとして覚えているときある。
そんな時に、目的のページをみつけるのが結構大変なことに・・・

そんな人へのページ!
っていっても、サイトのイメージと検索結果をくっつけただけですが。




Yahooウェブ検索 と HeartRails Capture を利用しています


2012年5月23日水曜日

Yahoo API Premiumにハマる


YahooAPI
【現状】
Web検索APIを使ったWebServiceを作ってみたいなと模索中
画像検索、Web検索にはPremiumがある。
ウォレットなど一部のYahooのサービスを利用すると
利用できて、APIからのサービス利用のの上限などが
桁違いに良くサービスの利用しやすさが変わるとのこと

【問題】
PremiumになったがうまくPremiumSearchWebが動かない

【対策】
Premium取得後Appidを取得するときに、
Premiumのサービスを利用することを登録する必要が有るみたいです。
APPIDが上記の選択をしているかどうかで違うようです

【教訓】
3日ぐらいはまったかなtt
迷った時には手順を最初からおっていくこと・・・

2012年5月18日金曜日

Google中の人


■Googleの中の人
・動くもの作れ
→それを共有してプロジェクトにする?
・マイルストーン
→技術的、利用者数
・作り直し
→徐々に
→ドーンと作りなおす
・お金を稼ぐ部分とProductを生産する場所がづれている
収入→検索
リソースはそれ以外につぎ込んでいる
検索機能→エンジン
・お金を稼せがないけどやらないと行けないこと
昔は政府の仕事
今はグルーグルがやっている
→すべての情報を整理する
・ScaleUpを前提としたサービス
・一緒に仕事ができるかどうかが大事
・創造的な仕事は問題を明確化する過程が一番難しい
・日常と検索はまだ離れている
→朝何食べるかな~などに対して答えはでない。
→近すぎるとGoogleスタイルになってしまう。

http://live.nicovideo.jp/watch/lv92787473


■アイデア
・Googleの検索結果を一つの画面で
→面積でヒット度を展開する画面

FreemindでJavaの依存が・・・


FreeMind
Google日本語入力がFreeMindでうまく動かないって現象にぶつかってもしかしたら最新版でうまくいくかな~っと安易な考えでFreeMind1.0をDLしてインストール。

そうしたら、いままでのファイルが見えなくなった(汗)

FreeMindeでmmファイルを開くとメッセージが・・・

-javax.xml.transform.TransformerConfigurationException

ググると、インストール失敗しているとのこと
インストーラーでインストールが失敗しているのかと思い
アンインストール、インストールを繰り返すがNG

どうやらインストーラーでは既存のファイルを利用するので
コンポーネント間の依存のヅレが発生していた模様です。

別PCでうまく動いているフォルダ(C:\Program Files\Freemind)をそのままCopyしたら動きました。
危なかった・・・

Javaはローカルにあるコンポーネントを優先して使うとかどこかで聞いたことがあったのが役にたちました~


2012年5月17日木曜日

JAVAアプレットでのGoogle日本語入力


javaアプレットで表示場所がおかしくなる・・・
変換中の文字のすぐ下に表示されて欲しいけど左下にとんでいく。
画面が大きいの使っている時にはかなり辛い。
なんとかならんかなぁ
変換の賢さはMS-IMEと比較にならないだけに残念です。

http://productforums.google.com/forum/#!topic/ime-ja/grmLVZ2TgWE


2012年5月15日火曜日

文字認識とAPIとスマートフォン


アイデア
docomoの文字認識APIと、スマートフォンでお手軽検索できないかな
1・写真を取る
2・写真を選択する
3・選択された画像をAPIで文字認識
4-1・単語に対して検索をかけた結果を出す
4-2・地域名、駅などならGoogleMapを表示する

アプリ2本でいいかも

2012年5月13日日曜日

「GALAXY S II LTE」購入



動かしてみたかった「Chorme To Phone」がいい感じで動いてる!
PCのChrome上でクリックするだけでスマホにアドレスに転送させるみたいです。
続きはスマホで見たいとかの時にめちゃくちゃ重宝しそうです。
もうちといろいろ触ってから「いいところ」「わるいところ」上げてみたいと思います


Eclipse内のローカルサーバーで検証中のものみれればなぁって思ったけどやっぱり無理でした・・orz
そらそうかw

使い方はこちらで~


2012年5月11日金曜日

TimeZoneについて

GAEへの登録はnew Date()なのでUTC
取りだしたあと、表示するときに、JSTへ変換

Timezone下手に触らないこと


/***
     * 日付を表示用の文字列に変換
     * @param date 日付型(当然UTC)
     * @return 日本時間での日付の表記
     */
    public static String getDispJpnDate(Date date) {
        //表示したい型を指定
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm");
        //TimeZoneを日本に
        sdf.setTimeZone(TimeZone.getTimeZone("JST"));
        //整形して返す
        return sdf.format(date);

    }