Hatena::ブログ(Diary)

at_yasuの日記もといメモ書き RSSフィード Twitter

2014-05-14

相手を招待する

|  相手を招待するを含むブックマーク

今の今まで知らなかった、Gmail+Calenderの機能。

相手がGmailを使ってる場合、招待状を送ることでカレンダーに予定を追加させることができるっぽい。

もちろん許可、不許可や中止など、最終的な操作は向こうができるから、強制的にカレンダーへ追加することはできないけどね。

ただ、Gmailからだと新規作成で予定の作成ができたが2014/07以降は使えなくなるっぽいので、Calenderで予定を作ってから招待という手順になる。

これ: https://support.google.com/calendar/answer/37161?hl=ja

Gmail から送った招待メールはただのText/HTMLだけなんだけど、スパムメール業者がOutlookで送ってきて、それ見たらどうもcalenderのフォーマットであればうまくいくっぽい。

そのスパム業者のメールを見たら、こんな感じだった。

Content-Type: text/calendar; method=REQUEST; name=meeting.ics
Content-Transfer-Encoding: 7bit

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
ATTENDEE;CN=A.YASUI+TEST@GMAIL.COM;RSVP=TRUE:mailto:A.YASUI+TEST@GMAIL.COM
CLASS:PUBLIC
CREATED:20140514T140009Z
DTEND:20140514T200009Z
DTSTAMP:20140514T202209Z
DTSTART:20140514T203009Z
LAST-MODIFIED:20140514T143050Z
LOCATION:Test Nanodesu
ORGANIZER;CN="Tesutonano":mailto:a.yasui@gmail.com
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=ja-jp:Tesuto nano
TRANSP:OPAQUE
UID:{1e991223-9e1c-4aa9-b8c6-92d9b6e13dce}
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
X-MS-OLK-AUTOSTARTCHECK:FALSE
X-MS-OLK-CONFTYPE:0
X-MS-OLK-SENDER;CN="Tesuto Nano":mailto:a.yasui@gmail.com
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

とりあえず。

トラックバック - http://d.hatena.ne.jp/at_yasu/20140514

2013-11-24

Cake の Session->flash みたいなのはないのか?

|  Cake の Session->flash みたいなのはないのか?を含むブックマーク

メモ書きを一気に。

view 側

{% if messages %}
<ul class="messages"> {% for message in messages %} <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> {% endfor %}
</ul>
{% endif %}

view.py 側

from django.contrib import messages
MESSAGE_TAGS = {
    messages.INFO: '',
    50: 'critical',
}

def action(request):
    messages.error(request, u'ルーム名を入力してください')
    return render_to_response("hogs.html", {}, context_instance=RequestContext(request))

ログインしてないとアクセス出来ないようにしたい

|  ログインしてないとアクセス出来ないようにしたいを含むブックマーク

デコれ

views.py

from django.contrib.auth.decorators import login_required

@login_required(login_url='/accounts/login/')
def user_index (request):
    ...

CakePHP の DebugToolbar みたいなのがほしい

|  CakePHP の DebugToolbar みたいなのがほしいを含むブックマーク

django-debug-toolbar をいれればいい(Django1.6で動いた)

1. pip install django-debug-toolbar

2. インストールした先(virtualenv で py27 とかしている場合、「py27/lib/python2.7/site-packages/debug_toolbar」)にあるtemplates と static を適切なディレクトリにまるごとコピー

3. settings.py に色々追記

MIDDLEWARE_CLASSES = (
    …
    'debug_toolbar.middleware.DebugToolbarMiddleware', # 一番最後出ないとダメだけ、GZip 使ってる場合はそれより上に。
)
INTERNAL_IPS = ('127.0.0.1',)
DEBUG_TOOLBAR_PANELS = (
    'debug_toolbar.panels.version.VersionDebugPanel',
    'debug_toolbar.panels.timer.TimerDebugPanel',
    'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel',
    'debug_toolbar.panels.headers.HeaderDebugPanel',
    'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
    'debug_toolbar.panels.template.TemplateDebugPanel',
    'debug_toolbar.panels.sql.SQLDebugPanel',
    'debug_toolbar.panels.signals.SignalDebugPanel',
    'debug_toolbar.panels.logger.LoggingPanel',
)
DEBUG_TOOLBAR_CONFIG = {
    'INTERCEPT_REDIRECTS': True,
    'SHOW_TOOLBAR_CALLBACK': lambda (request): True,
    'EXTRA_SIGNALS': [],
    'HIDE_DJANGO_SQL': True,
    'TAG': 'div',
}

4. これでだいたい見れた

__str__ と __unicode__ と Python3

| __str__ と __unicode__ と Python3を含むブックマーク

いちおう、Django1.5から(だっけ?忘れた)はPython3対応をうたってるけど、__str__ と __unicode__ があってそれの対応方法

デコレ

from django.utils.encoding import python_2_unicode_compatible 
@python_2_unicode_compatible 
class Room (models.Model): 
  def __str__ (self): return self
  # def __unicode__ (self): return self # これが有効になっているとエラーを出す

テンプレートでモデルのクエリーを出す

|  テンプレートでモデルのクエリーを出すを含むブックマーク

テンプレートタグ内で、よく関連する情報を引っ張ってきたい時がある。その時は、Modelにメソッドを付けて {{ hoge.method }} としてやればいい

トラックバック - http://d.hatena.ne.jp/at_yasu/20131124

2013-10-25

パスワードに使うと混乱するアルファベッドと数字

| パスワードに使うと混乱するアルファベッドと数字を含むブックマーク

パスワードを「ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789」からランダムに生成すると、表示上とてもよく似てるアルファベッドがあります。フォントによっては区別するように出来ていますが、標準フォントなどでは区別つきにくい場合が多いです。それらの文字はタイプミスを起こして混乱しやすいので、とても似ている文字はどちらか片方だけを使うとか、どちらも使わないというのがあります。で、とても似ている文字一覧という名のメモ。たまに更新する。

- - - -
S(大文字「S」) 5(数字5) - S5S5SSSS5
O(大文字「O」) 0(数字0) - O0O0OOO0
I(大文字「I」) l (小文字「 l」) 1(数字「1」) I1lI1l1l1lllI1lIl
b(小文字「b」) 6 (数字6) - b6b6b6bb6bb6 案外ほとんどのフォントで見分けられる
D(大文字「D」) O(大文字「O」) - DODODOOODOD 案外(ry
トラックバック - http://d.hatena.ne.jp/at_yasu/20131025

2013-10-17

PHP53/PHP55比較メモ

| PHP53/PHP55比較メモを含むブックマーク

switch連想配列の取り出し、どっちが速いか気になったので比較してみた。


PHP5.5 での比較

$ /usr/local/Cellar/php55/5.5.4/bin/php switch_or_array.php
start arr ... Finish: 8.5129861831665
start sw ... Finish: 5.0694410800934

PHP5.3 での比較

$ /usr/local/Cellar/php53/5.3.27/bin/php switch_or_array.php
start arr ... Finish: 10.038110971451
start sw ... Finish: 6.0564711093903

まぁこんなことになりましたよっと。

GIST: https://gist.github.com/a-yasui/7019012

トラックバック - http://d.hatena.ne.jp/at_yasu/20131017

2013-09-02

Django + Uwsgi + nginx in CentOS6

 Django + Uwsgi + nginx in CentOS6を含むブックマーク

なんか uWSGI が(私の中で)はやりっぽいので使ってみる。久しぶりに Django で遊びたくなったし。



要は WSGI だけど、それを Cで書いて速くした感じ?

いろいろな機能があるみたい。

設定がLDAPから取れたりクラスタリングとか複数インスタンスの管理とかRPCのサポートとかメモリー内ストレージとかUDPでロギングとか。

VirtualEnv 対応してるみたい。

よくわからん。


SakuraVPS の無料券もろたのでやってみる。せっかくだしね。

で、初めは標準の python2.6 でやってたけど、 thread に対応してないのと開発環境がPython2.7でやっちゃったので、threadに対応した python2.7 を作ってやる。でもこれやっても「*** Python threads support is disabled. You can enable it with --enable-threads ***」と言われる。解せぬ。

1. Pythonインストール先は `/opt/local`

2. 作ったアプリケーションインストール先は `/srv/www`

3. virtualenv の先は `/srv/www/py27`

先に断っておくと、shell の実行で先頭が「$」のは一般ユーザ、先頭が「#」が チャーリールート です。



必要なのを入れておく

忘れないように。git いります。

$ sudo mkdir -p /opt/local /srv/www
$ sudo chgrp wheel /opt/local /srv/www
$ sudo yum install git
$ sudo yum install libxml2-devel libxml2-python


Python2.7 のインストール

$ yum install mysql mysql-server mysql-devel
$ curl -O http://python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
$ tar jxf Python-2.7.5.tar.bz2
$ cd Python
$ ./configure --with-thread --enable-shared --prefix=/opt/local
$ make -j2
$ sudo make install

でこれだと、libpython2.7.so.1.0 がねーぞksと言われて動かんので対応させる。

# echo '/opt/local/lib' > /etc/ld.so.conf.d/python-2.7.conf
# ldconfig

setuptools 入れて、pip入れて、virtualenv を入れて、環境汚染がないように venv で作業環境を作って、その中にdjangoやuwsgiを入れる。

# wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | /opt/local/bin/python
# /opt/local/bin/easy_install setuptools
# /opt/local/bin/easy_install pip
# /opt/local/bin/pip install virtualenv
# cd /srv/www
# virtualenv --distribute --no-site-packages --python=/opt/local/bin/python py27
# source py27/bin/activate
(py27)# pip install MySQL-python uwsgi django

ここまで出来たら、MySQLDjangoの設定する。ここでは割合。


ハマったところだけメモ。Django の MEDIA_ROOT 及び TEMPLATE_PATH を `os.path.abspath("./template") ` にしていたのを絶対パスで指定。


次にフロントエンド側。何かと使う機会がなかった Nginxを使ってみる

# yum install nginx

アプリの設定

今回は趣味でやったものだから github(https://github.com/a-yasui/djangoTest) に投下済。起動スクリプトや、nginxの設定、uwsgiの設定も入ってるよ☆

  • uwsgi: uwsgiのLinux用起動スクリプト
  • uwsgi_http.ini: uwsig の設定ファイル
  • uwsgi.conf: nginx の設定ファイル

以下に各ファイルの設定方法など。


uwsgi

uwsgi は init.d に置くスクリプトです。環境によっては中の変数などは変えてください。

# cp uwsgi /etc/init.d/
# chmod +x /etc/init.d/uwsgi
# chkconfig --levels 235 uwsgi on
# service uwsgi start

uwsgi.conf

Nginx の設定ファイルです。同上

SERVER_DOMAIN および IPADDRESS にはそれぞれ適切な値を。

# cp uwsgi.conf /etc/nginx/conf.d/
# service nginx restart

uwsgi_http.ini

uwsgi の設定ファイル。SERVER_DOMAIN には適切な値を入れてください。そして、uwsgi にある変数「UWSGI_VASSALS」で指定しているパス上に置いてください。

django/tonbo/tonbo/settings.py

django の設定。django/tonbo/tonbo/settings.py.default を django/tonbo/tonbo/settings.py にコピーして、django/tonbo/tonbo/settings.py の中身を編集。

編集する変数

1. ADMINS: (名前, メールアドレス)のタプルにする。エラーなどが起きた時に飛んでくる。

2. ALLOWED_HOSTS: ホスト名を入れてください。サブドメインとかもここで追加するみたい。

3. TIME_ZONE, LANGUAGE_CODE: お国に合わせてください

4. MEDIA_ROOT: この場合だと、 /srv/www/djangoTest/django/tonbo/media

5. STATIC_ROOT: この場合だと、 /srv/www/djangoTest/django/tonbo/static

6. TEMPLATE_DIRS: この場合だと、 /srv/www/djangoTest/django/tonbo/template


最後に

最後に忘れないようにやっておく。

MySQL のユーザ作成とパスワードと、データベースの設定。データベース作成時に文字コードの指定忘れてたら、どこぞの誰かみたいに友人知り合いに見してバグってやがるwwwと言われて泣きをみる。私だけど。

(py27)$ mysql -uroot -p> grant usage on *.* to django@localhost identified by '';
> create database django_db default character set utf8;
> grant all on django_db.* django@localhost;
> flush privileges;
> ^D
(py27)$ python ./manage.py syncdb
(py27)$ python ./manage.py collectstatic

こんな感じ。


nginx でキャッシュさせるようにしてなかったり色々アレなのは今後の課題。

Ex: 参考一覧

https://gist.github.com/jniltinho/5565617

http://d.hatena.ne.jp/paraches/20120321/1332307423

http://uwsgi-docs.readthedocs.org/en/latest/Install.html

http://taichino.com/engineer-life/linux/2170

http://d.hatena.ne.jp/m-hiyama/20120312/1331513519

トラックバック - http://d.hatena.ne.jp/at_yasu/20130902