サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
kk6.hateblo.jp
pythonhosted.org でのホスティングはオワコン 以前は pythonhosted.org でホスティングしていた ホスティングサポート終了 Read the Docs を再び試す 依存ライブラリの ImportError が発生する 他のリポジトリを参考にする Yamlにビルドの設定を書く readthedocs.yml docs/environment.yml 無事ビルド成功 まとめ pythonhosted.org でのホスティングはオワコン 以前は pythonhosted.org でホスティングしていた Annictというアニメの視聴記録等ができるWebサービスがある。 annict.jp REST APIが提供されているのでそのPython wrapperを作っていた。 github.com で、このライブラリのドキュメント、Pipenvすら導入以前の requir
問題 Issueを探る Poetryのキャッシュを削除する 問題 二日前は成功していた pre-commit というライブラリのインストールが失敗するようになった。 $ poetry add -D pre-commit Creating virtualenv demo-py3.7 in /Users/kk6/sandbox/demo/.venv [TooManyRedirects] Exceeded 30 redirects. add [-D|--dev] [--git GIT] [--path PATH] [-E|--extras EXTRAS] [--optional] [--python PYTHON] [--platform PLATFORM] [--allow-prereleases] [--dry-run] [--] <name> (<name>)... -vvv を付けて再実
この記事は BeProud Advent Calender 2018 の20日目の記事です。そのためいつもよりボリュームたっぷり、文体も丁寧にお送りします。 adventar.org 本記事ではPoetryを使ってパッケージ開発→PyPIへ登録するまでの流れを紹介します。 github.com プロジェクト作成からPyPI登録までわずか30秒 Poetry について 基本的な使い方 Poetry と Pipenv Pipenvは確かに便利だけど Pipenv から Poetry に乗り換える Poetry と Pyenv PEP517 と PEP518 Poetryの各種設定 venvの作成先をプロジェクト内にしたい TestPyPIへアップロードできるようにする TestPyPIのユーザー名とパスワードを設定する ここまでの設定 プロジェクトを用意する 新規作成 標準的なレイアウト sr
乗り換えるリポジトリ pyproject.toml の生成 依存パッケージのインストール コマンドラインツールとして実行できるようにする 乗り換えるリポジトリ GitHub - kk6/aeroplast: Transparent PNG conversion (Mainly for Twitter) twitterにアップロードしたPNGがJPGに強制変換されて見栄えが悪いという問題がある。それを回避するために画像の四隅どこかに1pxの透過ドットを打ち込むという方法がある。いちいちペイントソフトでそれを毎回やるのが面倒なのでコマンドラインで画像のPath渡したら変換してくれるコマンドラインツールを以前作った。こいつをPipenvで管理しているので、Poetryへの乗り換えを試してみる。 Poetry については数日中にもうちょっと突っ込んだ記事書きます。 pyproject.toml の
Components Components の命名規則 Elements Elements の命名規則 Element のセレクター 複数の単語が使いたい タグセレクタを避ける Variant Variant の命名 Element の variant ダッシュ・プレフィックス ネストした Component ネストした Component の Variant ネストした Component の単純化 Layout ポジションに関するプロパティを避ける 固定寸法 親要素でポジションを定義する Helpers Helper の命名 Helper の整理 CSS structure ファイル単位でひとつの Component Use glob matching 過剰なネストを避ける 落とし穴 ネストした Component で死亡 懸念事項 その他のリソース その他のソリューション BEM 用
DjangoでImageFieldを持ったFormがあるとします。こんな感じ。ModelFormでもいい(というか実際のコードはそっちで書いてる)。 class UploadForm(forms.Form): title = forms.CharField() photo = forms.ImageField() これをテストする際にStringIOで適当に作ったダミーを食わせたら「画像じゃないよ!」って怒られた。ダミー画像をテスト用に置いておくのもなんだかなぁ…と思ってたら、そうだ、PIL使ってるんだからPILで生成すればいいじゃないか。 #-*- coding:utf-8 -*- import io from PIL import Image from django.test import TestCase from django.core.files.uploadedfile imp
JavaScript module loader for the browser that can load CommonJS/node and AMD modules requirejs/cajon · GitHub cajon(カホンって読むっぽい。ペルー発祥の打楽器の名前らしい)なんてものを見つけた。require.js上に構築されてるとかなんとか。require.jsもよく知らないんだけど、これはこれで簡単だしいいかも。 構成 . ├── index.html └── js ├── cajon.js ├── controller.js ├── jquery.js ├── lib.js ├── model.js ├── template.js └── view.js index.html <!DOCTYPE HTML> <html lang="ja"> <head> <meta ch
チェック用のスクリプト こんな感じのスクリプト作成 #!/usr/bin/env python import os import sys COMMAND = r"find . -name '*.py' | xargs grep -lr '{pattern}'" INFO = '{filename}: pdb found.' def check(pattern): return os.popen(COMMAND.format(pattern=pattern)).readlines() def display_warning(lines): for line in lines: print >> sys.stderr, INFO.format(filename=line.strip('\n')) def check_pdb(*args, **kwargs): lines = check('pd
追記: 記事を公開してからおんなじような記事あったりするかなと思ってググったら2年前にIanさんがほとんど同じ内容書いてた。 Pythonでメソッドをクラスまたはインスタンスに動的に追加する - Ian Lewis しかも僕その記事はてブしてたよ… Interactive Shell で色々試してる時なんかにインスタンスにメソッドを追加したくなる時がある。 >>> class Person(object): ... def __init__(self, name): ... self._name = name ... >>> alice = Person("Alice") >>> bob = Person("Bob") こんなクラスがあって、幾つかインスタンスを作っているとする。で、self._nameを取得するメソッドが欲しくなったとしよう。 >>> def get_name(self)
必要になったので自分用にメモ。今必要な部分だけざっくりと把握しただけなので間違ったこと書いてたらごめんなさい。 Periodic Taskとは Periodic Tasks — Celery 3.0.9 documentation celeryにはPeriodic Taskというタスクをある一定時間ごとに実行してくれる仕組みがある。そのスケジュールを管理してくれるのがcelery beat。 celerybeat: タスクのスケジュールを管理 celeryd: タスクの実行 periodic_taskデコレータ 定期実行タスクをスケジューラーに登録するためにdjangoのsettings.pyにCELERYBEAT_SCHEDULEを設定する必要がある。が、これとは別の方法としてperiodic_taskデコレータを使用する方法があるのでそちらを使うことにする。 from celery.t
はてブのマイホットエントリーを眺めてたらこんなものを見つけた。 シェル操作課題 (cut, sort, uniq などで集計を行う) 設問編 - Yamashiro0217の日記 awkとか全然知らないから勉強になるかなと思って覗いてみたんだけど… いっそpythonのワンライナーで実行したらカッコイイと思うw やりましょう Python3.2でやってみたよ 問1 このファイルを表示しろ $ python3 -c "import functools,operator;print(functools.reduce(operator.__add__, (open('hoge.csv','r').readlines())))" server1,1343363124,30,/video.php server2,1343363110,20,/profile.php server3,134336311
django 1.4 からはプロジェクトを作成した際のディレクトリ構成が変わったのでどのように設定するのがいいかを、まだ数の少ないネット上のサンプルを参考にしつつまとめてみた。 ちなみに以下の様な構成を想定してます。 └── project_root ├── app1 │ ├── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── app2 │ ├── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── manage.py └── package_root ├── __init__.py ├── settings.py ├── site_media │ ├── media │ └── static ├── static ├── templates
Pythonのデコレータ(decorator)を理解する 3 - -を1,2,3全て読んで、以前僕がデコレータを理解するために残したメモもこんな感じだったなというのを思い出した。ずっと記事にしようと思いつつ忘れてたんだけどせっかくなので加筆修正しつつ公開してみる。 引数無しのデコレータ デコレータとは、その名の通り元の関数を装飾するもの。別の言い方をすれば、元の関数そのものを弄ること無く挙動を変更するもの。 まずは単純なデコレータから。 def hello(function): def _hello(*args, **kw): result = function(*args, **kw) return "Hello, {0}".format(result) return _hello @hello def name(arg): """my docstring""" return arg #
探し方が悪かったのか、見つけるのに手間取った。でもその割に設定はすごく簡単だったというオチ。まあそもそも素のdjangoで出来るという考えが全くなかったのがいけない。 まず、docutilsがインストールされてないと元も子もないので、無ければインストールする。 $ pip install docutils続いて、settings.pyのINSTALLED_APPSにdjango.contrib.markupを追加する。 INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', ... 'django.contrib.markup', # これ追加 ... ) あとはテンプレート中に {% load markup %} を追加して、ReSTなテキストに対して restructuredtext というテンプ
pythonとりあえず自分用に。あとでちゃんとまとめ直す...かも。コマンドh(elp) [command]コマンドのヘルプを表示引数なしで利用可能コマンド一覧を表示s(tep)一行実行(ステップイン)n(ext)一行実行(ステップオーバー)unt(il)(Python2.6から)行番号が現在行より大きくなるか、現在のフレームから戻るまで実行r(eturn)returnされるまで実行(ステップアウト)c(ontinue)次のブレークポイントまで実行j(ump) lineno次に実行する行を指定最も底のフレームでのみ実行可能forやfinallyなどの中には飛び込めないl(list) [first[, lastソースコードを表示引数なし 前後11行引数一つ その行から11行引数二つ 与えられた範囲行a(rgs)現在の関数の引数リストをプリントp expression現在のコンテキストでexp
※追記:django-model-utils というパッケージの PassThroughManager が同じようなことしてくれるみたいです Model Managers — django-model-utils 2.3a1 documentation 例えば下記のような、書籍名・本棚登録済みかのフラグ・出版日を持ったモデルクラスがあるとする from django.db import models class Book(models.Model): name = models.CharField(max_length=255) registered_flg = models.BooleanField(default=False) published_date = models.DateTimeField() ここで、「本棚登録済みの本のみを抽出」とか「出版済みの本のみを抽出」とかしたい場
会社のMacを立ち上げて毎回「VirtualBoxを起動→VMを選択→VM起動」というフローが面倒になってきたのでCUIで起動できないかなと思って調べてみた。あと、どうせssh接続しかしないからGUIもいらないのでそれもついでに。 結論としては以下のコマンドでできた。 $ VBoxManage startvm "VMの名前またはid" --type headless あとは自分の用途的には以下の2つ覚えとけばいいかな。 VMのリスト $ VBoxManage list vms 起動中のVMのリスト $ VBoxManage list runningvms VBoxManageのコマンドは他にも大量にあるので時間があるときにでもまた調べてみよう。
大前提として、僕の知識は基本的にCSS2止まりです。また、Webデザイナーでもありません。今は(css3では)こうするのがトレンドだよーとかあれば教えて頂けると大変喜びます。 昨夜twitterで403 Forbiddenという記事を紹介してもらった。確かに昔ハマったことあるなーと思いつつvertical-alignで検索しようとしたら「vertical-align 効かない」が候補に出てきた。結構みんなはまってるんですね。 vertical-alignはblock要素には適用できない まず最初にハマるポイント。こいつはinline, inline-block, table-cellに対してしか効かない。block要素には適用することができない。 昔懐かしいtableレイアウトの感覚で div#hoge { vertical-align: middle; } なんてしても全く意味が無い。「
とりあえず導入部分だけざっくりと。 データベースへの接続 SQLAlchemy from sqlalchemy import create_engine engine = create_engine('sqlite:///:memory:', echo=True) peewee from peewee import SqliteDatabase engine = SqliteDatabase('db.sqlite') engine.connect() peeweeでsqlite:///:memory:する方法はめんどくさくて調べてません... ※2012.1.15 追記 peewee.SqliteDatabase(":memory:")でいけた モデルの定義 SQLAlchemy from sqlalchemy import Column, Integer, String, BOOLEAN
この日は14章「Pythonのためのデザインパターン」。一度は行ってみたいと思っていたのと、デザインパターンに興味があったので参加してみました。 以下気になったところのメモ。 GoFは「じーおーえふ」と読む。ゴフとは読まない。 元々は建築関係で生まれた言葉。それがソフトウェアの世界にもパターンってあるよね、っていう流れでGoFがまとめたらしい。 Singletonパターン 概念としては押さえておくべきだけど、結局グローバル変数なので使い過ぎるのもどうなのよ、という議論があるらしい 本にも書いてあるようにモジュールを使ったほうがよい モジュール内で名前の前にアンダーバーを付けて隠蔽してやる 最後にdelしておく(参照カウント等との兼ね合いから) Adapterパターン その名のとおり「変換アダプター」 本の例だと、文字列をStringIOでラップしてやることで、あたかもファイルであるかのよう
まず前提として、ちゃんと学ぶなら自動カリー化をサポートしてるhaskellなりOCamlなりF#なりで学ぶほうが断然いいと思います。 カリー化TLだったので 自分の理解が正しいかどうか再確認。 # こういう関数があるとする def multiply(x, y): return x * y # これがカリー化 curried_multiply = lambda x: lambda y: x * y print curried_multiply(2)(3) #-> 6 # lambda使わないならこう def curried_multiply_d(x): def _curried_multiply_d(y): return x * y return _curried_multiply_d print curried_multiply_d(2)(3) #-> 6 # こっちが部分適用 from
パッケージ毎に「pip install --upgrade パッケージ名」とするのが面倒だったので書いてみました。 ちなみにLinuxだと $ pip freeze | cut -d = -f 1 | xargs pip install -U という方法もあるみたいですが、これだと最新版使ってても全部インストールし直してしまうのがちょっと…。また、PyPIにあるものが最新版とは限らないようでした。 というわけで書いてみた Python2.6以上(3.x含む) kk6's gist: 1153590 — Gist Python2.5以下 gist: 1153590 のPython 2.5以下用 — Gist WindowsとLinux(ubuntu)で動作確認済み。 500エラーとかの対策はしてません。 一応コードはこんな感じ。 (Python2.5用のはGistで見てください。) #-*-
ふとgithubのtweepyのコード(tweepy/tweepy/streaming.py at master · tweepy/tweepy · GitHub)を眺めてたら、userstreamなんてメソッドがあることに気づきました。つい数ヶ月前くらいまで「tweepyはUser Streamに対応してなかったので自力で対応した」なんて記事を幾つか見かけたので、てっきり未だに対応してないのかと思ってました。 PyPIにあるtweepyもこのgithubのtweepyもバージョンは1.7.1なんだけど、PyPIから落としてきたtweepy/streaming.pyにはuserstreamというメソッドはありません。 さっそく使ってみたけど… 動かない。ていうかコード見る限りsecureオプションの判定が抜けてる気が。httpsじゃなくてhttpになってるんじゃないかなーと思ってたら、どう
はじめに PySideとはGUIライブラリであるQtのpythonバインディングです。兄弟にPyQtというのがいて、PyQtの技術要件にノキアが納得できなくなったからPySideを開発したとかなんとかいろいろ経緯があるようですけど、基本的に似たようなものとおもっていいと思います。PySideのほうがライセンスがゆるいです。(PyQtはGPL、PySideはLGPL) そういえば今年のPyCon JPでは PyQtではじめるGUIプログラミング なんてのがあるらしいですね。PyCon行きたかった…。 あと、PySideとPyQtの違いについてはこちら。 PySideとPyQtの差異 - None is None is None さて、ただUbuntuにPySideをインストールするだけなら sudo apt-get python-pyside とするだけ。が、システム環境内のsite-pac
Ubuntu 11.04 でpythonbrewを使って環境を構築する際にいろいろハマりました。何度かやってるうちに、こうすればひと通り標準ライブラリや有名所のライブラリが動くのかなーというのがわかったので備忘録も兼ねて記事にしてみました。 pythonbrewについての詳細は以下。 utahta/pythonbrew · GitHub まずは必要そうなパッケージのまとめ python-all-dev (以下も一緒にインストールされる) libexpat1-dev libpython2.6 libssl-dev python-all python-all-dev python-dev python2.6 python2.6-dev python2.6-minimal python2.7-dev zlib1g-dev python3-all-dev Python 3.x系入れるならこれも必要
(2017/8/7追記) 当時は記事内容の通りだったんですが、現在のpython3.6や2.7の最新だとローマ数字はisdigitでFalseを返すようです いつもtwitterでお世話になってる方のブログ記事でこんな記述がありました。 #91 [Python][TDD]テスト駆動開発でFizzBuzzしてみようず! « Python « a wandering wolf str型には、次の検証用メソッドがあります。 str.isdecimal() str.isdigit() str.isnumeric() 正直、私にはこれらの違いが分かりませんでした(´・ω・`) Python2.7には isdigit() しかないようなのでPython3.2あたりで追加されたんでしょうか。気になったので違いを検証してみました。 検証 num = "1" # まずはunicodeで num.isdigi
Python 3 からは一部の関数がイテレータを返すよう変更になったということなので、この機会にPython3を触りつつitertoolsモジュールについてひととおり学んでみた。 主に参考にしたのは9.7. itertools — 効率的なループ実行のためのイテレータ生成関数 — Python 2.6ja2 documentation。そのため添えてあるメモは基本的にpython2.6が前提。2.7や3.2で追加されたり変更された点があればその旨を適宜書いてあります。 print関数について 今回はPython3.2であれこれしたのでprint関数を使ってます。Python2.6以降で print("", end=" ") みたいなのを使うには from __future__ import print_function とする必要があります。 バージョン毎のメソッドの実装状況 それぞれのバ
USBに入れて持ち運べるPython環境、「 Portable Python 」のPython3系対応バージョンが、いつの間にかPython 3.0から3.2にバージョンアップしていました。ダウンロードはこちらのページから。 Windowsの場合、最後にインストールしたバージョンのPythonが既定のPythonになってしまうのでPython3系に躊躇していた2.x使いの方も多いんじゃないでしょうか。その場合の対応としては.pyファイルの関連付けや環境変数などを修正すればすむだけの話なんですが、それも面倒といえば面倒ですよね。 「普段はGAEばっか触ってるから2.5からバージョンアップしたくない。けど、いつまでもPython3系を勉強しないのも後々困るだろうしどうしよう」なんて思ってる方とかにオススメです。 また、上で紹介した画像のように、PyScripterというエディタが同梱されていて
結構前に買ったエキスパートPythonプログラミングですが、案の定当時の自分にはちょっとレベルが高かったので寝かせてたのですが最近また再開してます。それで、コルーチンを実装するってところがよくわかんなかったので、ネイティブでコルーチンを実装してるLuaをやってみようと思い立ったのでした。 以下、自分用の備忘録ですがせっかくなので公開用にまとめてみました。 といってもチュートリアル自体はめちゃめちゃ簡単です。問題は自分の編集能力の低さですね。 Windowsへのインストール luaforwindows - Installation of Lua for the Windows operating systems including many lua libraries. - Google Project Hosting から「LuaForWindows_v5.1.4-40.exe」をダウンロ
次のページ
このページを最初にブックマークしてみませんか?
『PYTHONIC BOOM BOOM HEAD』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く