Quantcast
Channel: もくもくブログ
Viewing all 216 articles
Browse latest View live

IT系主夫の塩麹鶏肉じゃが

$
0
0

肉じゃがが得意料理という女子力の高さ手に入れたかった。

作ってみた塩麹鳥肉じゃがの写真

材料

  • にんじん1
  • じゃがいも中3
  • たまねぎ1
  • インゲン(お好みの量)
  • 鶏肉300g
  • こんぶだし(500mlに対して必要な量)
  • 水300ml
  • 塩麹大さじ2
  • オリーブオイル大さじ1
  • (きのこ、舞茸とかしめじとか)

作り方

  1. 鶏肉を一口大に切って、塩麹大さじ1と和えて小1時間ほどつけておく
  2. じゃがいも、にんじん、たまねぎを一口大に切る
  3. オリーブオイル大さじ1でつけておいた鶏肉を中火で炒める
  4. 鶏肉の色が変わったくらいで水300mlとこんぶだしを入れて、切ったじゃがいも、にんじん、たまねぎを入れる(きのこがあったらここで入れる)
  5. 10〜15分、弱火で煮詰める
  6. 2~3cmくらいに切ったインゲンを入れて1,2分くらい煮て完成

感想

待ち時間が長く、意外と作業が少ないのでその間に色々できるしうまいので最高。

塩麹は自家製を使用しています。市販のものを使用する場合は分量を変えたほうが良いかもしれないので注意。

イメージ画像がないのでそのうち追記しよう。


Pelicanでブログを始める最初の一歩 - Python

$
0
0

PelicanはPython製の静的サイトジェネレータ。

このブログもPelicanで作られています。

Pelicanでgh-pagesにブログをデプロイする方法をまとめました。

Pelicanのインストールとセットアップ

Pythonをある程度触ったことのある人ならPelicanを使うのは簡単です。

まず、Pelicanと必要なパッケージをインストールします。

$ pip install pelican Markdown

Pelicanはquickstartコマンドが用意されているので、それを利用して環境を整えます。質問を幾つかされるので答えていく形式です。

$ pelican-quickstart

以下のようなディレクトリが作られます。

yourproject/
├── content
│   └── (pages)
├── output
├── develop_server.sh
├── fabfile.py
├── Makefile
├── pelicanconf.py       # Main settings file
└── publishconf.py       # Settings to use when ready to publish

記事を書く

記事はcontent以下に書きます。

記事にはタイトルや日付、タグなどのメタデータを書く必要があります。

reStructuredTextの場合

:title: <title>
:date: YYYY-MM-DD HH:MM
:modified: YYYY-MM-DD HH:MM
:tags: <tag>, <tag>
:category: <category>
:slug: <slug>
:authors: <author>, <author>
:summary: <summary>

Markdownの場合

Title: <title>
Date: YYYY-MM-DD HH:MM
Modified: YYYY-MM-DD HH:MM
Tags: <tag>, <tag>
Category: <category>
Slug: <slug>
Authors: <author>, <author>
Summary: <summary>

titleとdate以外は省略可能です。

Note

slugは記事のURLを指定できます。
slugを省略するとtitleのlower-caseがURLになります。

Markdownをインストールしたので*.mdという拡張子でファイルを作ればMarkdownが使えます。

ビルドは以下のコマンドで、outputに静的ページがビルドされます。

$ pelican content -s pelicanconf.py

contentのディレクトリ構成

contentにディレクトリを作成するとcategoryとして扱われます。

├── content
│   ├── category1
│   ├── category2
│   ├── category3
│   ├── no_category.md
│   └── pages

ディレクトリでカテゴリ分けをすれば、メタデータにcategoryを書く必要がない+わかりやすいので基本的にカテゴリ分けはディレクトリですれば良いと思います。

content以下のディレクトリでpagesは特殊なディレクトリ名で、メタデータ不要で書けます。基本的に、AboutやContactなどの独立したページの作成を目的としているのでそのような用途で使用します。

GFMぽく使う

PelicanでGitHub Flavored Markdown(GFM)をマジで使いたい! - Qiita

上記の記事を参考にパッケージのインストール、pelicanconf.pyの編集をします。

$ pip install mdx_del_ins

pelicanconf.pyにMD_EXTENSIONを追加して、必要な項目を書きます。

MD_EXTENSIONS = ['del_ins', 'fenced_code', 'codehilite(css_class=highlight)', 'tables']

デフォルトのExtensionは以下にまとまっています。

Extensions — Python Markdown


PythonのMarkdownを調べて、おすすめ設定を以下にまとめましたので参考までに。

PythonでMarkdownをGFM的に使う方法

gh-pagesにpushする

gh-pagesブランチを作ります。さくっと作るためにghp-importというPythonパッケージをインストールします。ghp-inmportは指定したディレクトリをgh-pagesブランチにしてくれます。

$pipinstallghp-import$ghp-importoutput

これでgh-pagesブランチが作られたのでpushします。

ユーザーページ(.github.io)の方にデプロイする場合は、ローカルのgh-pagesブランチをmasterにpushします。

$ git push origin gh-pages:master

プロジェクトのgh-pagesの場合はそのままローカルのgh-pagesブランチをpushします。

$ git push origin gh-pages

まとめ

Pythonに慣れているのであれば、reStructuredTextとMarkdown両方使えるPelicanはすごく良い気がする。

ドキュメントも英語だけど読みやすくて詳しくまとまっていて良い。

Pelican 3.6.3 — Pelican 3.6.3 documentation

IT系主夫のエビチリ

$
0
0

クックドゥじゃないエビチリ。

作ってみたエビチリの写真

材料

  • エビ200g
  • たまねぎ中1
  • 長ネギ1本
  • 片栗粉大1
  • 酒大1
  • 塩・こしょう

合わせ調味料

  • ケチャップ大3
  • 醤油小2
  • 酒小1
  • 砂糖小1
  • 豆板醤小1(辛くしたいときは増やす)
  • にんにく一欠片
  • しょうが一欠片

作り方

  1. エビを酒大1と塩コショウ(ひとつまみずつ)を入れて少し放置
  2. たまねぎと長ネギをみじん切りにする
  3. 合わせ調味料を作る(にんにくとしょうがはみじん切りにする、チューブなら2cmくらい)
  4. エビに片栗粉大1をつけて多めのごま油で火を通す、さっと火が通ったらフライパンから上げておく
  5. みじん切りにしたたまねぎと長ネギを炒める
  6. 軽く炒めたらエビを戻して、合わせ調味料を入れて少し炒めて完成

感想

北海道からボタンエビが届いてそれで作ったら最高だった。

IT系主夫レシピシリーズとしてレシピを書いていこうと思った。

PelicanのTheme【使う編】- Python

$
0
0

前回の記事でPelicanをgh-pagesにデプロイする方法を書きましたが、PelicanはThemeがデフォルトで2つしかなくてパッとしません。

デフォルトのThemeをカスタムして使う方法から、Themeリポジトリを利用する方法をまとめました。

デフォルトのTheme

notmyideaというThemeがデフォルトで使用できます。もう一つ"simple"というThemaがありますが、プレーンテキストです。

notmyideaについてはドキュメントに詳しく書いてあります。

Settings — Pelican 3.6.3 documentation

このThemeはpelicanconf.pyに変数を追記することである程度拡張できます。

変数名効果
SITESUBTITLEサブタイトル
DISQUS_SITENAMEDISQUSのsitenameを書くと、DISQUSのコメント欄が追加されます
GITHUB_URLgithubのリンクリボンが追加されます
GOOGLE_ANALYTICSGoogle AnalyticsのIDをセットできます
GOSQUARED_SITENAMEGoSquaredのIDをセットできます
MENUITEMS(Title, URL)のタプルのリストでメニューを追加できます
PIWIK_URLPiwikiのURL
PIWIK_SSL_URLPiwikiのSSK-URL
PIWIK_SITE_IDPiwikiのSite ID
LINKS(Title, URL)のタプルのリストでリンクリストを作れます
SOCIAL(Title, URL)のタプルのリストでsocialセクションを作れます
TWITTER_USERNAMETwitterのボタンが追加されます

CSSも拡張することができて、pelicanconf.pyに以下のように書きます。

CSS_FILE = "wide.css"

これでもそこそこ使えそうです。

Themeリポジトリを使う

getpelican/pelican-themes

色々なThemeが落ちています。

このリポジトリをクローンして、pelicanconf.pyの”THEME"にパスを指定する or ビルド時に-tオプションでパスを指定すると使えます。

$ git clone --recursive https://github.com/getpelican/pelican-themes ~/pelican-themes
THEME = "path/to/pelican-themes/theme-name"

or

$ pelican contents -s pelicanconf.py -t path/to/pelican-themes/theme-name

お気に入りのものが見つかればこれで良さそう。

まとめ

Pelican、英語圏では割りと流行っていそうな様子。日本でももっと流行っていい気がする。

PythonでMarkdownをGFM的に使う方法

$
0
0

Pythonには、Daring Fireball: Markdownを実装したMarkdownというパッケージがあります。

使い方は以下のようになります。

importmarkdownprintmarkdown.markdown("input")

extensionsで拡張できます。

importmarkdownextensions=["fenced_code","tables"]printmarkdown.markdown("input",extensions)

Extensions — Python Markdown

ここに書いてあるExtensionsはデフォルトで利用可能です。このドキュメントには指定するのに'markdown.extensions.footnotes'と書いていますが、単に'footnotes'だけでも使えます。

おすすめ設定(GFM的に使える)

delタグとinsタグを使うために以下のパッケージをインストールします。

$ pip install mdx_del_ins

del_insがExtensionで使えますので以下のように設定します。

importmarkdownextensions=['extra','admonition','codehilite(css_class=highlight)','nl2br','sane_lists','toc','del_ins']printmarkdown.markdown("input",extensions)

GFMライクに使えます。

Pelicanで使用する場合には、pelicanconf.pyに以下のように書きます。

MD_EXTENSIONS = ['extra', 'admonition', 'codehilite(css_class=highlight)','nl2br', 'sane_lists', 'toc', 'del_ins']

この記事もこの設定で書いています。

標準のExtensionリファレンス

Extensions — Python Markdown

以下は上記のドキュメントを簡単にまとめました。興味のある方どうぞ。

目次

extras

色々含まれているので1つずつ見てみます。

Abbreviations (abbr)

Abbreviations Extension — Python Markdown

略語tag(\<abbr>)を追加できます。以下に例を示します。

The HTML specification
is maintained by the W3C.

*[HTML]: Hyper Text Markup Language
*[W3C]:  World Wide Web Consortium

The HTML specification
is maintained by the W3C.

(正直余り使わないし、調べるまで知りませんでした)

Attribute Lists (attr_list)

Attribute Lists Extension — Python Markdown

classやidなどのattributeを追加できます。便利そう。

This is a paragraph.
{: #an_id .a_class }

A setext style header {: #setext}
=================================

### A hash style header ### {: #hash }

[link](http://example.com){: class="foo bar" title="Some title!" }

blockに対して, inlineに対して両方使えます。

cssセレクタぽく書けます。ダブルクォーテーション("")で囲むことで複数指定もできます。

{: #someid .someclass somekey='some value' }

{: #id1 .class1 id=id2 class="class2 class3" .class4 }

Definition Lists (def_list)

Definition Lists Extension — Python Markdown

dl>dt>ddを書けます。

Apple:PomaceousfruitofplantsofthegenusMalusinthefamilyRosaceae.Orange:ThefruitofanevergreentreeofthegenusCitrus.
Apple
Pomaceous fruit of plants of the genus Malus in
the family Rosaceae.
Orange
The fruit of an evergreen tree of the genus Citrus.

Fenced Code Blocks (fenced_code)

Fenced Code Blocks Extension — Python Markdown

```で書こうとコードブロックになります。デフォルトの機能にしてほしいくらいです。

このExtensionは指定行だけハイライトするということもできるみたいです。以下のように指定します。

python hl_lines="2 3 4"

こんな感じになります。

$catsample.py# cat result# code block [python]importantigravity

Footnotes (footnotes)

Footnotes Extension — Python Markdown

脚注です。

Footnotes[^1] have a label[^@#$%] and the footnote's content.

[^1]: This is a footnote content.
[^@#$%]: A footnote on the label: "@#$%".

Footnotes1 have a label2 and the footnote's content.

脚注内に複数行を入れることもできます。

[^1]:
    The first paragraph of the definition.

    Paragraph two of the definition.

    > A blockquote with> multiple lines.

        a code block

    A final paragraph.

Tables (tables)

Tables Extension — Python Markdown

テーブルが使えます。

First Header  | Second Header
------------- | -------------
Content Cell  | Content Cell
Content Cell  | Content Cell
First HeaderSecond Header
Content CellContent Cell
Content CellContent Cell

Smart_Strong (smart_strong)

Smart Strong Extension — Python Markdown

賢く強調してくれます。

>>>importmarkdown>>>markdown.markdown('Text with double__underscore__words.', \extensions=['markdown.extensions.smart_strong'])u'<p>Text with double__underscore__words.</p>'>>>markdown.markdown('__Strong__ still works.', \extensions=['markdown.extensions.smart_strong'])u'<p><strong>Strong</strong> still works.</p>'>>>markdown.markdown('__this__works__too__.', \extensions=['markdown.extensions.smart_strong'])u'<p><strong>this__works__too</strong>.</p>'

Admonition (admonition)

Admonition Extension — Python Markdown

reStructuredTextにあるAdminisions(reStructuredText Directives)のMarkdown版を使えます。

!!! note
    You should note that the title will be automatically capitalized.

!!! warning "WARNING"
    ...

!!! important ""
    This is a admonition box without a title.

Note

You should note that the title will be automatically capitalized.

WARNING

...

This is a admonition box without a title.

CSSをいい感じに書いておくと良いです。

CodeHilite (codehilite)

CodeHilite Extension — Python Markdown

css_classを指定しないとうまくハイライトされませんでした。

extensions=['codehilite(css_class=highlight)']

HeaderId (headerid)

HeaderId Extension — Python Markdown

headerにheader_<数字>というIDをつけてくれます。

Meta-Data (meta)

Meta-Data Extension — Python Markdown

以下の様にメタデータを定義できるようになります。

Title:MyDocumentSummary:Abriefdescriptionofmydocument.Authors:WaylanLimbergJohnDoeDate:October2,2007blank-value:base_url:http://example.comThisisthefirstparagraphofthedocument.

New-Line-to-Break Extension (nl2br)

New Line to Break Extension — Python Markdown

以下の例に示すように、改行が新しい行になるようにパースされます。

>>>importmarkdown>>>text="""... Line 1... Line 2... """>>>html=markdown.markdown(text,extensions=['markdown.extensions.nl2br'])>>>printhtml<p>Line1<br/>Line2</p>

Sane Lists (sane_lists)

Sane Lists Extension — Python Markdown

listを賢くパースしてくれます。

  1. Ordered item 1
  2. Ordered item 2
  • Unordered item 1
  • Unordered item 2

SmartyPants (smarty)

SmartyPants Extension — Python Markdown

文字参照を置き換えてくれます。詳しくは以下を参照。

Table of Contents (toc)

Table of Contents Extension — Python Markdown

目次を表示します。

[TOC]

WikiLinks

WikiLinks Extension — Python Markdown

内部参照が使えるようになります。

[[Bracketed]]

パースすると以下のようになります。

<ahref="/Bracketed/"class="wikilink">Bracketed</a>

  1. The first paragraph of the definition.

    Paragraph two of the definition.

    A blockquote with
    multiple lines.

    a code block

    A final paragraph. 

  2. A footnote on the label: "@#$%". 

PelicanのTheme【作る編】 - Python

$
0
0

前回は人の作ったThemeを使う話でしたが、今回は作る話です。


目次

Themeを作成する

Pelicanのドキュメントはとても親切でThemeを作る場合のことも書いてあります。

Creating themes — Pelican 3.6.3 documentation

構成は以下のようにします。

├── static
│   ├── css
│   └── images
└── templates
    ├── archives.html         // to display archives
    ├── period_archives.html  // to display time-period archives
    ├── article.html          // processed for each article
    ├── author.html           // processed for each author
    ├── authors.html          // must list all the authors
    ├── categories.html       // must list all the categories
    ├── category.html         // processed for each category
    ├── index.html            // the index (list all the articles)
    ├── page.html             // processed for each page
    ├── tag.html              // processed for each tag
    └── tags.html             // must list all the tags. Can be a tag cloud.

staticとtemplatesというディレクトリに分かれていて、staticにはcssや画像、jsなどを配置、templatesにはhtmlを配置します。

上記のtemplates内にあるファイルは必要なファイルです、jinja2を使っているのでオリジナルのhtmlを追加して他のhtmlからincludeすることもできます。

個人的に一から全て書くのは割とつらいので、他のThemeを参考にアレンジする方法にしたほうが良いと思います。自分の場合、notmyideaをベースにしました。

pelican/pelican/themes/notmyidea at master · getpelican/pelican

このThemeを参考にする場合、編集の中心になるのは、base.html, index.html, article.htmlです。どういう配置にするのか、CSSフレームワークを使うのか、など好みの条件に合わせて書くと良いと思います。

templates内で使用できる変数などはドキュメントにまとめられているので参考にするといいです。

Creating themes — Pelican 3.6.3 documentation #templates-and-variables

Theme作成Tips

PelicanのThemeは基本的にjinja2の機能をフルに活かして書いていきます、細かいところは色々ありますのでよく使ったところをまとめました。

include xxx.html

jinja2の機能でincludeがあります、サイドバーなどのパーツをincludeするように設計するといい感じになります。

Bootstrapのグリットデザインにサイドバーを組み込んでいる例です。

base.html

<divclass="container"><divclass="row"><divid="content"class="col-lg-9"><divclass="bs-component">{%blockcontent%}{%endblock%}</div><!-- /.bs-component --></div><divid="extras"class="col-lg-3"><divclass="bs-component">{%include'sitebar.html'%}</div><!-- /.bs-component --></div><!-- /#extras --></div><!--./row --></div><!--./container -->

sidebar.html

{# ... #}{%ifDETAILS%}{# 内容 #}{%endif%}{%ifSOCIALorFEED_ALL_ATOMorFEED_ALL_RSS%}{# 内容 #}{%endif%}{# ... #}

if [pelicanconf.pyの変数]

pelicanconfの内容で表示/非表示したい内容に使えます。

例えば、Disqusの場合は以下のようになります。

disqus_script.html

{%ifDISQUS_SITENAME%}<scripttype="text/javascript">
    var disqus_shortname = '{{DISQUS_SITENAME}}';
    (function () {
        var s = document.createElement('script'); s.async = true;
        s.type = 'text/javascript';
        s.src = 'https://' + disqus_shortname + '.disqus.com/count.js';
        (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
    }());</script>{%endif%}

pelicanconf.pyに"DISQUS_SITENAME"が設定されていたらDISQUSのscriptをロードするようになります。

このファイルは必要な部分でincludeします。コメントなのでarticle.htmlの下のほうにincludeします。

{% include 'disqus_script.html'%}

if article

これは、記事ページのときのみ表示したい(記事一覧やタグ一覧のときは表示しない)、SNSリンクボタンなどを表示するとき使えます。

sitebar.html

{%ifarticle%}<divclass="sns"><h2>Share</h2>{%include'sns.html'%}</ul></div>{%endif%}

pelican-plugins

Themeを作成するときにpelican-pluginsには便利なものが色々落ちています。

getpelican/pelican-plugins

インストールは、このリポジトリを好きなところにクローンして、pelicanconf.pyでパスと使用するプラグインを指定します。

$ git clone --recursive https://github.com/getpelican/pelican-plugins
PLUGIN_PATHS = ['path/to/pelican-plugins']
PLUGINS = ['always_modified', 'pelican_youtube']

色々便利なものがありますが、使っているものだけ紹介します。

Always Modified

pelican-plugins/always_modified at master · getpelican/pelican-plugins

最近の記事を表示するために必要なプラグインです。Pelicanはデフォルトでは、index.htmlでしかarticlesを参照できないのでこのプラグインは便利です。

サイドバーなどに以下のような記述を追加すると、最新の記事を表示できます。

{%forarticleinarticles|sort(reverse=True,attribute='date')%}{%ifloop.index0<5%}{{article.title|striptags}}{%endif%}{%endfor%}

articleには記事情報全て含まれているので、ループ内で日付"{{ article.date.strftime("%Y %B %d") }}"なども参照できます。

Pelican YouTube

kura/pelican_youtube

reStructuredTextのディレクトリに"youtube"を追加します。

..youtube::<video_id>:width:800:height:500:align:center

こういう記述が使えます。

まとめ

このブログもPelicanのThemeを作成しています。この内容は主にそのときに調べたことをまとめてみました。

ちなみにこのブログのThemeは以下にあります。

yymm/mokumoku

Google Adsenseがあっさり通った(2015/10)

$
0
0

Google Adsenseが通りました、なんかドキドキ、何日待てばいいのかなぁって思ってたら1日待ったら通っていました。

色々Google Adsenseについて調べていると、申し込みの流れや審査の基準などが調べて出てきたのと違う場合が多かったです、古い情報は参考にならないことが多いので注意です。

通った様子

  1. 2015/10/15 15:00頃、Google Adsenseを申し込む
  2. 1時間くらいで、"Google AdSense: お支払いの連絡先情報が変更されました "という件名のメールが届く
  3. Adsenseの管理ページで広告を設置して下さいとなっているので、広告を作成し設置。
  4. 次の日、2015/10/16 12:00に"Google AdSense アカウントの有効化が完了いたしました"というメールが届く

2.が一次審査と呼ばれるもの、4.が二次審査と巷では呼ばれるものだと思います。

結構待たされるし通らないという情報が多かったので、即効で通って逆に不安になりました。

ちまみに、申し込時は15記事くらいあって、4.のメールが届くまでに2つ記事を更新下感じでした。

このブログのこの記事より前の記事を見ていただければどんな感じで書いていればいいのかわかるはずです。

他にやったことは、は"Google Adsense 審査 通らない"などでぐぐり、ダメっぽいことはしないようにしました。

通った後

  • 他に広告をのせられそうなサイトにも広告を設置
  • 一つのサイトには広告は3つまでみたいなので守る

さいごに

1000円超えないと報酬もらえないです。

Pelicanのブログにsitemapを追加する方法 - Python

$
0
0

Tips n Tricks · getpelican/pelican Wiki

こちらに方法がのっていたので実践してみた。

sitemap.htmlを作成

使っているテーマのtemplatesにsitemap.htmlを作成し、以下の内容を記入。

<?xml version="1.0" encoding="UTF-8"?><urlsetxmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

{% for article in articles %}
  <url><loc>{{ SITEURL }}/{{ article.url }}</loc><priority>0.8</priority></url>

  {% for translation in article.translations %}
  <url><loc>{{ SITEURL }}/{{ translation.url }}</loc><priority>0.8</priority></url>
  {% endfor %}
{% endfor %}

{% for page in pages %}
  <url><loc>{{ SITEURL }}/{{ page.url }}</loc><priority>1.0</priority></url>

  {% for translation in page.translations %}
  <url><loc>{{ SITEURL }}/{{ translation.url }}</loc><priority>1.0</priority></url>
  {% endfor %}
{% endfor %}</urlset>

pelicanconf.pyの編集

DIRECT_TEMPLATES=('index','tags','categories','archives','sitemap')SITEMAP_SAVE_AS='sitemap.xml'

あとはデブロイすると、きっとsitemap.xmlができていていい感じになっているはずです。

できている様子

できたー


最近やりたさが高まってきていること

$
0
0

モチベーションを保つための個人的なメモである。

Cycle.js

Vue.jsで書いていたアプリを置き換えたい。

Cycle.jsが肌に合わない場合はReact.jsを検討しようと思ってる。

Electron

  • Windowsでビルドする方法とか
  • Golangで書いたサーバを内部で動かせるかどうかとか(無理だったらNode.jsで書き直す)
  • mainyaa/gulp-electronとか使いたい

Electron勉強会行ったけどあまり成果出してないのなんかアレな気持ちなので何か作りたい。

Google Extension

MarkdownとかReSTのURLをクリップボードにコピーするの雑に作ったけど、かなり雑でローカルでしか動かしてないので修正してちゃんとリリースしたい。

便利に記事を書きたい

最近は、もっぱらMarkdownで記事を書くことが多い。Pythonでも便利にMarkdown書けるのでreStructuredTextの登場回数がめっきり減っている。

埋め込み機能がほしい

埋め込み機能がほしい

embededなURLを書くといい感じに表示してくれるMarkdown Extensionが欲しい。

[url:embed]

とか書くと、URLになるやつ。hatenaにあるやつ。

hatenaは良しなにブログカード作ってくれるAPIを公開しているので基本的にそれを利用させて頂く予定。

でも、oEmbed APIを提供しているサイトはできるだけそちらを使いたい気持ち。

TEXとか書きたい

mdx_mathみたいなTEXを書けそうなPythonのMarkdown Extensionがあるらしいので導入したさがある。

Google Chart APIを使って自分で作っても良いかもしれない。

pyenvとvenvでPython3開発環境を整える

$
0
0

Python3.3からvenvというのが入ってきてvirtualenvを置き換えられるという感じでしたが、日本語情報では色々不便という情報が多かったのでなんとなく敬遠していました。しかし、Python3.4からensurepipという便利なものがvenvで使えるようになって、煩わしさがなくなっているようなので使ってみました。

※Python3.4以上を対象にしています。

pyenv

使っているOSのパッケージマネージャでは新しいPythonはすぐにインストール出来ないので、Pythonのバージョンマネージャが必要です。

そこでpyenvです。

embed.ly

インストールはREADMEにまとまっていますのでそちらを参考にするといいです。

インストール可能なPythonの一覧を確認して、3.5と3.4をインストールしてみます。

$ pyenv install -l$ pyenv install 3.5.0$ pyenv install 3.4.3

インストールしたPythonは"pyenv global"コマンドで使えます。

$ pyenv global 3.5.0

バージョンが変わらない問題

自分はMacOSXで起こりました。他のOSでも起こるかもしれません。
MaOSXの場合、brewでインストールしたPythonが優先されてしまうのが問題みたいです。

$ brew uninstall python

brewのpythonを消したくない場合はやむを得なくPATHを書き換える方法があります。(.bashrcや.zshrcに書く)

PATH=/Users/<USER>/.pyenv/shims:$PATH

大変暴力的なのでお勧めできませんが、これで共存できます。

venv

パッケージはグローバルにインストールするのではなくプロジェクトごとに独立してインストールして使いたいです、そういう場合にvenvを使います。

さっきglobalに設定した3.5.0を使ってやってみます。venvはPython3.3以降だとデフォルトで使用可能です。

venvはpyvenvコマンドから実行できます。プロジェクトを作成してvenvを初期化し有効化します。

$ mkdir venv_test$ pyvenv venv_test$ source venv_test/bin/activate(venv_test)$ 

venvが有効化されると"([evn名]) "がシェルの先頭につきます。

この状態でpipもこの環境内のみで有効なpipなので必要なパッケージをインストールして開発を開始できます。

venvを無効化する場合は、

$ deactivate

するだけです。

まとめ

Python3.5が便利そうという情報を聞いて、Python3の環境構築をまとめてみました。

venvはデフォルト使えるのでインストールの手間などが無く便利だと思っています、言語標準になってくれて良さを感じます。

これでpython2+virtualenvを捨ててpython3+venvライフを送れそうです。

ensurepipの詳しいことなどは以下の参考記事を見ると良いかもしれません。

参考記事

Chrome46でDuet Displayの表示が乱れるのを治す方法

$
0
0

Duet Displayを愛用しているのですが、Duet Display内のChromeの表示がv46で乱れる現象がありました。

例えばGIGAZINEを開くとこうなってしまいました。

GIGAAAAAAZINE

治し方

Duet Display — When Chrome is dragged over to the iPad it distorts the website.

公式のFAQに治す方法が書いてありました。

  1. Chromeの設定を開く
    2.下の方にある「 詳細設定を表示」をクリック
  2. システムの「ハードウェアアクセラレーションが使用可能な場合は使用する」のチェックを外す

この方法以外はChrome45に戻す方法が書いてありますが、めんどくさいので試してません。

これで快適にDuetできるように戻りました。めでたしめでたし。

PelicanとPython-MarkdownでEmbedlyが使える便利なExtensionを作った

$
0
0

埋め込み機能がほしいので作りました。

embed.ly

書式はよくあるembedの形式です。

[{URL}:embed]

やたらに便利です。

Pelicanで使う方法

$ pip install mdx_embedly

pelicanconf.pyのMD_EXTENSIONSに'embedly'を追加すると使えます。

MD_EXTENSIONS=['embedly']

PythonのMarkdownを拡張する方法

$ pip install mdx_embedly

markdownの引数のextensionsに'embedly'を追加すると使えます。

source="[{URL}:embed]"html=markdown.markdown(source,extensions=['embedly'])

Embedly

EmbedlyのCardsを使っています。

embed.ly

例外 - gist

gistはgist-embedが便利なのでこちらを使用しています。

embed.ly

便利です。

ギャラリー

むやみやたらに便利な様子です。

embed.ly


embed.ly


embed.ly


embed.ly


embed.ly

ASUS Zenfone2 laserの裏蓋を開ける方法

$
0
0

目次


IIJmioで音声通話付きSIMとZenfone2 lazerを購入しました。

embed.ly

裏蓋が開かない問題と、どこにSDカードとSIMを挿せば良いのか迷ったので参考のためここに記しておきます。

裏蓋が開かない

ググると

  • 右下のところから普通に開くよ!
  • 爪が長かったら開くよ!
  • 電源付近は開きやすいよ!

とでてきますが、個体差があるのか全然開きません。

ぼくは爪がやられました。

そこで最強の方法が、財布に入ってる薄いけど割りと頑丈なカードをどこでも良いのでちょっと隙間があるところに刺す作戦です。

こういう感じです。

embed.ly

微妙に隙間がある箇所がきっとあるので刺さったらそのままぐるーっと隙間を広げるように一周すると開きました。

B−PUMPのカードで試していますが、フィルムで挟んで保護してあるタイプのカードが薄さと強度の面で良いかもしれません。

お試しあれ。

SDカードとSIMをどこに入れるのか

embed.ly

  • SDカードは写真の向きで上の層にぐっと入れます、結構差し込みます
  • SIMはSDカードを入れた真下に金属面を下にして、切れ込みのある方を先端にして差し込みます

Githubリポジトリにいっぱいバッジをつける方法

$
0
0

Build Status

Coverage Status

PyPI

PyPI

PyPI

PyPI

PyPI

PyPI

PyPI

GitHub license

Pythonのリポジトリつけられそうなバッジです。

主に、Shields.ioで作っています。

すぐに作れるので紹介します。

Shields.io

embed.ly

さまざまなバッジが用意されていて、しかもURLを適切に指定するとメタデータを取ってきてバッジの内容に反映してくれます。便利。かなり便利。

例えば、PyPIのバッジだと以下のように作ります。(試しにDjango)

Djangoの最新バージョンのPyPIバッジがさくっと作れます。

Shields.ioは、Node.js,Ruby,Rustなどのパッケージマネージャのバッジ、さまざまなCIサービスやカバレッジサービスに対応しています。

バッジを作ったらMarkdownとreStructuredTextの形式でコピーできるので、READMEにペチペチ貼り付けるだけでokです。

内容はサービスと連携されているので勝手に随時更新されます。

あと、バッチがなかったらShields.ioのページの下のほうで自由に作れます。

まとめ

Sheilds.ioを使うとバッジを量産できます。

そして、GitHubリポジトリにバッジいっぱいあると謎の満足感を得られます。

PyPIにパッケージを登録する必要最低限の流れ

$
0
0

目次


PyPIにパッケージを登録してみたので流れをまとめました、詳しい説明は抜きで必要最低限のことだけをまとめてあります。

主にPyPAの公式sampleprojectを参考にしています。

embed.ly

1. 必要なファイル

.
├── MANIFEST.in
├── README.rst
├── setup.cfg
├── setup.py
├── XXX
│   ├── __init__.py
│   └── XXX.py
└── tests
    ├── __init__.py
    └── test_XXX.py

※XXXは適宜置き換えます

setup.cfgは以下のように書いておきます。

[bdist_wheel]universal=1

MANIFEST.inはPyPIにアップロードするファイル書きます。

include README.rst
include setup.cfg
recursive-include tests *

README.rstとなっているのでreStructuredTextです。PyPIでMarkdownは使えません。

2. setup.pyの内容

importsysfromsetuptools.command.testimporttestasTestCommandfromsetuptoolsimportsetup,find_packagesfromcodecsimportopenfromosimportpathhere=path.abspath(path.dirname(__file__))withopen(path.join(here,'README.rst'),encoding='utf-8')asf:long_description=f.read()classPyTest(TestCommand):user_options=[('pytest-args=','a',"Arguments to pass to py.test")]definitialize_options(self):TestCommand.initialize_options(self)self.pytest_args=[]deffinalize_options(self):TestCommand.finalize_options(self)self.test_args=[]self.test_suite=Truedefrun_tests(self):#import here, cause outside the eggs aren't loadedimportpytesterrno=pytest.main(self.pytest_args)sys.exit(errno)setup(name='sample',version='0.1.0',description='Description',long_description=long_description,url='https://github.com/foo/sample',author='foo',author_email='foo.bar@example.com',license='MIT',py_modules=['sample'],classifiers=[# How mature is this project? Common values are#   3 - Alpha#   4 - Beta#   5 - Production/Stable'Development Status :: 3 - Alpha',# Indicate who your project is intended for'Intended Audience :: Developers','License :: OSI Approved :: MIT License','Programming Language :: Python :: 2','Programming Language :: Python :: 2.7','Programming Language :: Python :: 3','Programming Language :: Python :: 3.3','Programming Language :: Python :: 3.4',],keywords='Sample',packages=find_packages(exclude=['contrib','docs','tests']),install_requires=['peppercorn'],extras_require={'dev':['check-manifest'],'test':['coverage'],},tests_require=['pytest'],cmdclass={'test':PyTest},entry_points={'console_scripts':['sample=sample:main',],},)

※sampleというパッケージになっているので適宜置き換えます

特筆すべき内容

  1. README.rstをPyPIのトップに表示
  2. "python setup.py test"でテストが走る
  3. モジュール名の指定(py_modules)
  4. コンソールアプリのコマンド追加(entry_points)

他は基本的なsetup.pyの内容です。

setupの引数の、name,description,url,authorなどの内容は適宜書き換えて使います。

3. PyPIへの登録

(1) PyPI - the Python Package Index : Python Package Indexでユーザーを作ります。

(2) ~/.pypircを作成します。

[distutils]index-servers=   pypi[pypi]username:{Username}password:{Password}

(3) setup.pyの内容を確認します。

$ python setup.py check -r -s

(4) PyPIに登録します。

$ python setup.py register

(5) パッケージをアップロードします。

$ python setup.py sdist bdist_wheel upload

コマンドを実行するにあたって必要なパッケージがいくつかあるので適宜インストールが必要です。

まとめ

必要最低限の情報で説明はないので、PyPIについて詳しいことは他のブログエントリや公式のドキュメントを参照するといいです。

参考記事

PyPIについて多くのことはこちらのスライドに学びました。わかりやすかったです。

embed.ly


toxを使って複数のPythonバージョンでCIしてカバレッジする方法

$
0
0

Pythonのプロジェクトでtoxを使って複数PythonバージョンでTravisCIしてCoverallsを使う方法です。

手元ではPython3.5で開発して、2.xでも動くのかな?Coverageは大丈夫かな?という想いを全てをgit pushにのせていくスタイルです。

tox + TravisCI

toxを使ってPython2.7, 3.3, 3.4でテストする".travis.yml"と"tox.ini"です。

testsディレクトリにテストが用意してあって、テストツールにはpytestを使っています。

.travis.yml

language:pythonenv:-TOXENV=py27-TOXENV=py33-TOXENV=py34install:-pipinstalltoxscript:tox

tox.ini

[tox]envlist=py{27,33,34}[testenv]basepython=    py27: python2.7    py33: python3.3    py34: python3.4deps=    pytestcommands=    py.test tests

TravisCIでリポジトリを有効してpushするとそれぞれのPythonでテストが始まります。

PyPIに登録してあるパッケージを、toxでテストするとShields.ioでいい感じのバッジを作れます。

PyPI

READMEに貼ってあるとわかりやすくて良い感じです。

TravisCI + Coveralls

TravisCIのテストが成功したときCoverallsにカバレッジさせるようにします。

PythonにはCoverallsのパッケージがあるのでこれを使うことで.travis.ymlに設定を追加するだけでCoverallsを使えます。

Coverallsの公式ドキュメントでも紹介されています(Python – Coveralls)。

embed.ly

Coverallsに対応した.travis.ymlの内容です。

language:pythonenv:-TOXENV=py27-TOXENV=py33-TOXENV=py34install:-pipinstalltox-pipinstallcoverallsscript:-tox-coveragerun--source=samplepy.testtests-coveragereport-mafter_success:coveralls

Coverallsでリポジトリを有効にしておけば、TravisCIで成功後にCoverallsが走ります。

まとめ

ローカルでtoxの用意したり、カバレッジを確認するのが面倒な方にはこの方法いいかもしれません。

IDCFクラウドで自分だけのHerokuを構築する

$
0
0

IDCFクラウド1周年めでたいですね。

この間からIDCFクラウドの最小インスタンスを借りて日々便利しています。

個人用途で使っていたHerokuに乗せていたアプリをことごとくIDCFクラウドにのせ替えたので紹介します。個人用途なら最小インスタンスでも割りと快適です。

その前に私の感じるIDCFの良さを紹介します。

IDCFの良さ

選んだ理由

子供のお小遣いで済みそうなくらい安いVPSを探していて最終的に、DigitalOceanとIDCFで迷っていました。

-IDCFDigitalOcean
料金/month500円$5
CPU11
RAM1G1G
Storage20G20G
rootありあり

最小インスタンスの基本的なスペックの比較ですが、気のせいかもしれないですがDigitalOceanをメタっているふうに見えます。両者ともインスタンスを登録後すぐに起動できる点でも似てる..

DigitalOceanのデメリットは為替の影響を受けるので大体700円くらいになってしまうのと、一番近いサーバでもシンガポールなのでアクセスが遅いことです。(あと、管理コンソールが英語)

逆にDigitalOceanのメリットは選べるOSが充実しているところで、CoreOSを使えるのは面白いと思いました。

結局IDCFにしたのですが、決め手はサーバが日本あるのでアクセスが速いことでした。

用途が個人利用のアプリの運用や試運転なのでSSHでログインして作業することが多いのでコマンド1つ1つにいちいち遅延があるとすごくストレスなので、そういう場合サーバが日本にあるのはかなりメリットだと思いました。

使ってて良さを感じる点

  • インスタンスが速攻で立ち上がる
  • 管理コンソールがわかりやすい
  • グローバルIPに対して、ローカルIPからポートフォワーディングする仕組みが良い
  • ロードバランサが使える
  • Mackerelに公式対応

自分だけのHeroku構築

DokkuというOSSを使えば、IDCFでHerokuライクなPaaSを構築することができ、デプロイ先をHerokuからDokkuに変えるだけで手軽に移行できます。

Dokku

embed.ly

Dokkuはmini-herokuと書いてある通り、HerokuライクなPaaSエンジンです。

Dockerを使っていて、アプリのビルドにはherokuishを使っているのでHerokuで動かしていたアプリは割りとすんなり動きます。

しかし、miniというだけあってできないこともあるので、用法用量を守るのが大事です。

準備

IDCFの最小インスタンスでUbuntu14.04を立てます。

インストール

$ wget https://raw.githubusercontent.com/progrium/dokku/v0.4.4/bootstrap.sh$ sudo DOKKU_TAG=v0.4.4 bash bootstrap.sh

これで必要なパッケージ(dockerやnginxなど)も一緒にインストールされます。

設定

ホスト名とSSH公開鍵の設定をします。foo.barとは適宜置き換えてください。

# echo "foo.bar" > /home/dokku/VHOST
# echo "foo.bar" > /home/dokku/HOSTNAME
# cat ~/.ssh/id_rsa.pub | sudo sshcommand acl-add dokku <name>

ホスト名は使っているDNSサーバ側でAレコードの設定が必要です。

IDCFクラウドの管理コンソールでファイアウォールとポートフォワーディングで22portを開けておきます。(22portをフルで開けるのは怖いのでファイアウォールでIPを制限すると良いです。)

使い方

Herokuにデプロイしていたアプリのgitリポジトリのremoteにdokkuを追加します。foo.barとは適宜置き換えてください。

$ git remote add dokku dokku@foo.bar:<project>

"git push dokku"するとdokkuにデプロイが始まり、Herokuで見たことあるような出力が返ってきます。

$gitpushdokkumasterCountingobjects:21,done.Deltacompressionusingupto8threads.Compressingobjects:100%(17/17),done.Writingobjects:100%(21/21),1.81KiB|0bytes/s,done.Total21(delta6),reused0(delta0)----->Cleaningup...----->Buildingpython-samplefromherokuish...remote:Unabletofindimage'gliderlabs/herokuish:latest'locallyremote:latest:Pullingfromgliderlabs/herokuishremote:835c565d00e2:Pullingfslayerremote:c5c659229e15:Pullingfslayer(中略)remote:359e311e765f:Pullcompleteremote:359e311e765f:Alreadyexistsremote:Digest:sha256:7aaa5dd65a7f90a47f2bb1266375b27d4f273ff94495527949536c9e944a871aremote:Status:Downloadednewerimageforgliderlabs/herokuish:latest----->AddingBUILD_ENVtobuildenvironment...(中略)----->DOKKU_SCALEfilenotfoundinappimage.Defaultingtoasinglewebprocess----->NewDOKKU_SCALEfilegenerated----->Runningpre-flightchecksFormoreefficientzerodowntimedeployments,createafileCHECKS.Seehttp://progrium.viewdocs.io/dokku/checks-examples.md for examplesCHECKSfilenotfoundincontainer:Runningsimplecontainercheck...----->Waitingfor10seconds...----->Defaultcontainerchecksuccessful!=====><project>containeroutput:*Runningonhttp://0.0.0.0:5000/=====>end<project>containeroutput----->Runningpost-deploy----->Creatingnew/home/dokku/<project>/VHOST...----->Configuring<project>.foo.bar...----->Creatinghttpnginx.conf----->Runningnginx-pre-reloadReloadingnginx=====>Applicationdeployed:http://<project>.foo.barTodokku@foo.bar:<project>*[newbranch]master->master

さらに詳しくは

以前にブログにまとめたものがあります。

IDCFクラウドの一番安いのでDokkuを使う

IDCF + お名前.com + Dokkuの構成を作っています。

あと、Dokkuを構築する際にDockerを使っているのでSwap領域を作っておいたほうがいいです、そのへんの基本的な設定も以前にブログにまとめたので参考にどうぞ。

IDCFクラウド借りました

まとめ

HerokuからIDCF+Dokkuにいくつかのアプリをのせ替えて使っていますが、今のところ快適に動いていますのでおすすめできるかなと思います。

しかし、HerokuのAddonをガッツリ使っていたりなど、Dokkuではどうしようもない部分もあるので、Herokuを捨てられる銀の弾丸ではないのでご注意を。

Sushiコマンド

$
0
0

Sushicorp Advent Calendar 2015、2日目の記事です。

寿司のことを考えながらコマンドを打っているとつい"sushi"と打ってしまいますね。自分にはよくあります。

というわけで、sushiとコマンドしてしまうと、寿司でかかれたSUSHIが流れてくるようにしました。

めでたしめでたし。


急遽寿司ネタをでっち上げたので雑な感じになりました。次回はスッシコープとはについて書く予定にします。

SushiCorpとは

$
0
0

Sushicorp Advent Calendar 2015、7日目の記事です。

SushiCorpについてぼく目線で簡単に紹介します。

SushiCorpとは

ぼく(@yymm6666)と、@hashedrockさんがノリで作りあげた任意団体です。

技術といえば寿司なので寿司が食べたい気持ちで作られました。ピザも肉も食べたいです

はっしゅろっく「名乗ると良いらしいよ」

ぼく「寿司食べたいです」

ぼく・はっしゅろっく「スッシコープ」

みたいな感じで設立したと記憶しています。(覚えてない)

スッシコープ情報

SuhiCorpについての情報は、主にGitHubから確認できます。

embed.ly

@hashedrockさんに作って頂いたホームページが秀逸です。

embed.ly

モチベーション

寿司が食べたいです。

寿司を無限におごられるのが夢です。

活動

基本的にGitHubを見れば大体の活動の様子がわかります。時々社内勉強会を主催したりもしています。

社内勉強会を主催

embed.ly

社内勉強会を主催したりしています。

会社の若手を集めて、もくもくしたりLTしたり寿司を食べたりピザを食べたりしています。

次回は外部から人が招待されたり営業の方が参戦したりと、徐々にカイシャで注目され始めています。この回はもしかしたら寿司をおごってもらえるかもしれないと思い一人で期待しています。

アドベントカレンダー

embed.ly

勢いで始めました。

頑張ります。

さいごに

HashiCorpと似た名前ですね。

謝罪

Viewing all 216 articles
Browse latest View live