きゃべログ

プログラミングや電子工作などについての記事がほとんどです

libpython2.7.so.1.0: cannot open shared object file

最近SonyからNeural Network LibrariesというDeep Learningのライブラリが公開されたので試してみようと環境構築していました。

環境構築当時Python2.7にしか対応していなかったのでpyenvで環境構築しました。
Installation on Linux — Neural Network Libraries 0.9.4 documentation

ぐぐってみたら、どうもシンボリックリンクを貼れば解決するようだ。
Python エラー対処:error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory - 長生村本郷Engineers'Blog

そもそもはいってないからリンクはれない、きれそう

[vagrant@localhost nnabla]$ ldd /home/vagrant/.pyenv/versions/2.7/bin/python
linux-vdso.so.1 => (0x00007ffdbe3a5000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f22cb0c2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f22caebe000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f22cacba000)
libm.so.6 => /lib64/libm.so.6 (0x00007f22caa36000)
libc.so.6 => /lib64/libc.so.6 (0x00007f22ca6a2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f22cb2e7000)</module></module></string>

問題発生

pyenvでpython2.7系でnnablaをインストールしたときに、libpython2.7.so.1.0: cannot open shared object fileとなる問題が発生しました。

[vagrant@localhost nnabla]$ python -c "import nnabla"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/vagrant/.pyenv/versions/2.7/lib/python2.7/site-packages/nnabla/__init__.py", line 16, in <module>
import _init # Must be imported first
ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

解決方法

$ CONFIGURE_OPTS="--enable-shared" pyenv install 2.7.6

インストール時にオプションを設定する必要があるらしい。下記がソース

え?君せっかく Python のバージョン管理に pyenv 使ってるのに Vim の補完はシステムライブラリ参照してるの? - Λlisue's blog

まとめ

ひょっとしたらライブラリ側で解決されているかもしれませんが、同様の問題の解決の一助になれば幸いです。

Amazon Kindleストアで一部の技術書が50%オフ中「夏のプログラミング特集」

久しぶりの投稿になりますが、どうしてもシェアしたいセールがあります。 その名もAmazon Kindleストア、夏のプログラミング特集。 2017年8月31日までなので買い忘れにご注意を。

Amazon.co.jp: 【50%OFF以上】夏のプログラミング特集 (8/31まで): Kindleストア

iOS開発入門書でSwift2時代の少し古い書籍があったりするので、 買うものは選ばないといけないですが、中にもベストセラー級の書籍があるので興奮しています。 いい本は高価なものが多いので今回のセールはかなりうれしいです。

このエントリではせっかくなので私が注目する書籍をピックアップしたいと思います。

Pythonの入門書です。機械学習やRaspberry Piのプロトタイピングなど最近活用の幅が広い言語なので、プログラミング初心者の方にはおすすめしたい1冊です。 ただし他の言語を習得済の方は公式チュートリアルを読んだほうが有意義かと思います。

ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで
SBクリエイティブ (2015-09-24)
売り上げランキング: 1,930

Unityについての本というよりは、しっかり数学の知識が書かれている印章です。 ぱらぱらめくって見ましたがUnity初学者には向かない本です。 さらに一歩すすんだスキルを身に着けたい方には良い本だと思いました。

実装の容易さからプログラミングはどんどん容易になってきているので、 こういったコンテンツのクオリティを高める書籍は是非今のうちに読んでおきたいと考えています。

これが今回1番の目玉商品ではないでしょうか。 Webアプリのセキュリティ本ではまずこれが出てくるという書籍です。 言語はPHPですが取り上げるセキュリティの問題は他の言語を使う人も知っておきたい内容じゃないかと思います。

以上4冊が今回のセール品全63冊からのピックアップ本です。 ひょっとしたらもっと良い本があるかもしれません。 もしイチオシの本があったら是非教えてください。 今年の夏はあんまりお金を使わないつもりだったけど、一気にお金が飛んでいきそうだ…。

ToAtm:Python用Twitterのアクセストークンマネージャを作りました


credit: Pete Simon

アクセストークンの管理が面倒くさい

今更ながらPythonからTwitter APIを使ってみようと試みました。
複数のアカウントからAPIを叩こうとすると、どのアカウントがどのアクセストークンに対応づくかという管理が面倒でした。そこで今回はアクセストークンを管理するコードを書いてみました。

最初のうちはコンシューマーキーをコード内に直打ちして認証!みたいな力技をやってしまいがちなのですが、それはちょっとリスキーですね。GitHubなんかでソースを公開する場合であったり、あとはセキュリティの観点から1番理想的なのはデータベースに保存して管理することでしょう。

データベースがポピュラーな方法だと思いますが、今回は飽くまでプロトタイプレベルで簡単にコーディングするためにセットアップ不要の外部ファイルによる永続化という方法を取ってみました。本番環境に使えるかはあまり自信がないのでサポートツールだと思ってもらえれば幸いです。

まずいところがあるなーと思った方がいらっしゃればコメントお願いします!

機能

  • 複数アカウントのアクセストークンが簡単に管理できます。
  • アプリのAPIキーも同時に管理でき、簡単に呼び出せます。

注意点

出力されたデータベースファイル(keys.shelve)は外部に漏れないように取り扱ってください。セキュリティの観点からGitHubにPushするときにはkeys.shelveを.gitignoreに指定するなど対処が必要です。

入手

GitHubからクローンした上でご利用頂けます!
toatm.pyを開発したいpythonコードと同じところに入れましょう。そのディレクトリにアクセストークンが格納されるデータベースファイルが生成されます。
cabbage63/toatm: Twitter OAuth Access Token Manager for Python

使い方

Tweepyのインストール

このツールではその後にTweepyを使うことも想定してPythonのTwitter APIにアクセスするためのライブラリであるTweepyを使用しています。まずはTweepyを導入しましょう。

pip install tweepy

Gitからインストールしたい場合はこのような形でマニュアルインストールします。

git clone https://github.com/tweepy/tweepy.git
cd tweepy
python setup.py install

ToAtmを実行

本アプリ、ToAtmを実行します。

$ python toatm.py

使用するアプリのAPIキーを登録します

プロンプトが出るので指示に従って入力していってください。
これでアプリのAPIキーは登録完了です。

Please select mode.
        1 Update API keys
        2 Update Access tokens
        3 Show access tokens
        q Exit
>> 1
CONSUMER KEY: ************
CONSUMER SECRET: *************

アクセストークンを登録する

指示にしたがってブラウザから指定されたURLにアクセスし、そこで得られたVerifierをアプリで入力することでアクセストークンが登録されます。

Please select mode.
        1 Update API keys
        2 Update Access tokens
        3 Show access tokens
        q Exit

>> 2
Access: https://api.twitter.com/oauth/authorize?oauth_token=***************
Verifier: *******
Updated access token for @****** successfully.

Pythonアプリからアクセストークンを呼び出す

@hogeというユーザアカウントを想定して使用例を掲載します。

import shelve
# Open database file
d = shelve.open('keys.shelve')
print d["hoge"]

こちらのコードを実行するとd["hoge"]の内容として次のものが表示されます。

{'access_token': u'****', 'access_token_secret': u'****'}

アプリのコンシューマーキーも呼び出せます。

print d["consumer_key"]
print d["consumer_secret"]

str型で呼び出したい場合は次のように変換しましょう。

str(d["hoge"])

使用例: タイムラインの読み出し

あらかじめ@hogeというユーザのアクセストークンを登録していると想定します。

# -*- coding: utf-8 -*-

import shelve
import tweepy

# アクセストークンを登録したTwitter IDを入力(@hoge)
SCREEN_NAME = "hoge"

# データベースファイルを読み込み
d = shelve.open('keys.shelve')
consumer_key = d['consumer_key']
consumer_secret = d['consumer_secret']
access_token = d[SCREEN_NAME]['access_token']
access_token_secret = d[SCREEN_NAME]['access_token_secret']

# Tweepyをセットアップ
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

# メイン処理:タイムラインの読み出し
public_tweets = api.home_timeline()
for tweet in public_tweets:
    print tweet.text

まとめ

Python用のTwitter APIを利用した開発者向けのアクセストークンマネージャを作成・公開しました。
普段アクセストークンの管理に悩んでいる方はお試しください。

賛否両論のスーパーマリオランは本当にクソゲーなのか?

ついに発表、しかし賛否両論……

2016年12月15日にNintendoより片手で遊ぶマリオ「スーパーマリオラン」が発表されました。記事を書いていている時点ではレーティングは平均3程度。どでかく広告が打たれていたことが期待を大きくさせ、思ったよりも面白くなかったという反応が多いようですね。それだけでなくゲームの課金システムに一般の方には受け入れがたいところがあるようです。

こちらは2016年12月15日までの1週間の任天堂の株価を示しています。(Yahooファイナンスより引用) 見事にアプリのリリースタイミングに売りが発生していることがわかります。 「スーパーマリオラン」の公開が発表され、任天堂の株価が上昇していたことを考えると、投資家にとっては期待を下回ったものだったのかもしれません。

関連ニュース
任天堂が続急伸、「スーパーマリオラン」12月15日配信開始で再び走る | 個別株 - 株探ニュース
任天堂:スマホ向けマリオ配信、株価は1カ月ぶり日中下落率 - Bloomberg

プレイしてみた

取り敢えずインストールして、一通り遊んでみました。私としてはこのゲームの命運は今後の方針次第かなと思っていて現状はなんとも言えないです。というふうに感じている理由をつらつらとかいてみます。

ゲーム概要

大きくわけて2つのプレイモードがあります。

1つ目がワールドツアーというモードです。これは従来のマリオ動揺、ステージをクリアして楽しむというもの。ゴールに到達すればクリアというシンプルなゲームです。

2つ目がキノピオラリーというゲームで、オンライン上の他のプレイヤーのゴーストとポイントを競って遊ぶというモードです。先にゴールしたほうが勝ちというのではなく、コインの枚数や決めたトリックの回数などから総合的に評価されるスコアに基づいて勝利判定がなされます。

その他にはソシャゲに見られるまちづくりのような「王国づくり」というモードもあります。進度に応じて解禁されるショップアイテムを王国に配置していくというもの。

以降詳細について説明していきます。

ゲーム起動画面

こんなかんじ。
スマホにはとても鮮やかに映る。

メニュー画面

こちらはメニュー兼王国のプレビュー画面です。
マリオ独特の世界観が広がっています。

ワールドツアー

画面をタップするとマリオがジャンプするという実にシンプルな仕様なのですが、タップする長さによって飛ぶ高さが変わったり、2回タップすると滞空時間が長くなったりとシンプルさの中に奥深さがあるデザインになっています。また、小さな敵は自動的に飛び越えるようになっており、初心者の人にもとっつきやすい仕様と言えます。上の図は自動的にクリボーを避ける様子です。

通常のマリオ通りゴールすることが目的ですが、色がついた「カラーコイン」を5枚集めるという遊び方もあります。ある色のカラーコインを集めると別の色が異なる配置で配置されるようになっていて、ピンク→青→緑と順に解禁されていき3度楽しめるようになっています。

さて、Twitterなど世間的に議論を呼んでいるのがこのワールドツアーモードです。その理由は初期で用意されている1-1 ~ 6-4のステージのうち、1-1,1-2,1-3の3ステージしか無料で遊べないという点にあります。それ以外の21ステージを遊ぼうとすると1200円の課金が必要になっています。スマホゲームは無料で遊べるというのが一般的な感覚になっているためか、この点が議論になっているようですね。

キノピオラリー

こちらのモードでは世界中のライバルとランを競うことができます。いかにかっこよくランできるかを競うというのがこのモードのコンセプトですが、詳細には得たコインの数と決めたアクロバットの数でスコアリングされます。タップするタイミングによりアクロバットが発生し、スコアが発生します。

最終的に勝者の王国にキノピオがやってきて、そのキノピオの数によって王国が成長していくというシステムになっています。

なおこのモードをプレイするにはチケットが必要です。これを入手する方法はいくつかあります。

  • ワールドツアーにてカラーコインを5枚集める
  • はてなボックスからたまに出て来る
  • ボーナスゲームの館のゴールで一定確率で入手

これらの条件を満たすことでキノピオラリーに参加するチケットを得られます。

王国づくり

先述の2つのランゲームによって得たコインを使って建築物を購入し、配置するというモードです。キノピオラリーにより王国のレベルがアップしますが、それに伴って新たな建築物が解禁されたりします。

ボーナスゲームの館

通常ステージに比べてたくさんコインが出て来るボーナスゲームをプレイすることができます。8時間に1回プレイできるという仕様です。キノピオラリーのプレイに必要なチケットが一定確率でゴールにて入手できるようになっています。

考察

さて、以上をふまえてスーパーマリオランが良ゲーかはたまたクソゲーか、というところを考えたいと思いますが現状ではどちらとも言えないのではないかと思います。

ワールドツアーモードは課金しなければ3ステージしか遊べないという強い制限があります。いわゆるスマホのゲームは通常プレイは無料というものが普通になっている現状としては少しギャップがあるかもしれません。

ですがキノピオラリーというモードがある点でこの問題は埋め合わせ出来ているのではないかと思います。こちらはプレイできる回数に制限はあるものの、その点ではスタミナというシステムを導入している通常のソシャゲと大差ありません。またこのモードはプレイできる内容について課金如何によって大きな差は生じないので、この点でもソシャゲとしては良心的な部類だと思われます。

通常家庭用ゲームは購入して遊ぶものということを考えるとワールドツアーモードのステージ解禁に1200円かかるというのはそれほど不自然ではないでしょう。Nintendoとしてもワールドツアーモードは従来の据え置き型ゲームのソフトと同じような立ち位置で買い切りのゲームとして制作しているのではないかと思います。対してキノピオラリーというモードは完全に無料で遊べるものとして切り分けているのではないでしょうか。

私個人としては課金システムについては有料・無料のゲームがパッケージングされていると考えれば特に不満を抱いてはいません。ただし1点問題だと感じているのが、キノピオラリー参加に必要なチケットの入手が困難なことです。先程これを入手する3つの方法を挙げました。(ほかにもあるかもしれません。)

  • ワールドツアーにてカラーコインを5枚集める
  • はてなボックスからたまに出て来る
  • ボーナスゲームの館のゴールで一定確率で入手

1つ目の入手法は各ステージ、カラーコインの種類の数と同じ3回×2枚しかチケットを手に入れることができません。つまり1200円の課金をしていない場合は「2枚 × 3種類 * 3ステージ = 18枚」に限られます。

また2つ目については出現する確率が高くないため、手に入れようと思ってすぐに手に入れることができません。筆者は20回ほどゲームをしましたがまだ一度も出てきていません……。

3つめについてはボーナスゲームは8時間に1回しかプレイできない上、最終的に2分の1の確率でしか手に入れることがかなわないのでこちらも確実とは言えません。

上記のようにチケットの入手条件が厳しすぎるような気がします。すなわちチケットが手に入るまでは3ステージしかない体験版のような状態がある程度続いてしまうことになるのです。これが改善されればユーザの満足度が向上するのかなと思っています。

ゲーム自体はNintendoらしいシンプルな面白さがあります。したがって無課金ユーザの権利バランス調整次第でスーパーマリオランは良ゲー、クソゲーいずれにも転ぶかなと感じています。

書評:クリエイティブ思考の邪魔リスト

概要

Kazunobu Setoさんの著書です。クリエイティブ思考をするために心がけることを著者本人の経験や偉人の言葉を交えて活き活きと描かれています。クリエイティブ思考を妨げる15の悪習を軸に話を展開していきます。

文字は大きめでページ数も少なく、すらすらと読めました。2016年7月30日に発行された著書で、この記事を執筆している時点ではかなり新しい本です。データの引用元も201X年と新しいものが多く、話題に上がるものごとも最近のものであるように感じました。

クリエイティブ思考の邪魔リスト
朝日新聞出版 (2016-07-20)
売り上げランキング: 13,185

面白い点

Chapter1 クリエイティブ思考って何?

初めて「クリエイティブ思考」という単語を見た時、わかるようでわからないような印象を受けました。ですが、このChapter1で定義されているのでもやっとした感じが解消されます。

この書籍全体にも通じる所ではあるのですが、クリエイティブ思考の話から少し逸れてビジネスにおけるライフハック的なものが語られることがあります。このことに対し私は悪い印象は持っておらず、むしろこの本の面白さを増しているところだと思います。瀬戸さんの体験談を交えて、こうすると日々の過ごし方が良くなるというアイデアが語られているのです。特に好きな話が「名刺代わりのビジュアル」という見出しのお話です。是非読んでみてください。

Chapter2 いま、世界中が注目する理由

ここではどうしてクリエイティブ思考が必要とされるのかを統計データを用いながら説明されています。AIが登場した未来においては特に必要な能力であることを強く主張されています。人間におきかわってAIが仕事をするような未来を生き抜くためには、職業が如何というのではなく、個人のクリエイティビティが問題になるのかもしれないなと思わされる章でした。

この章にも好きな話があって「上司に求めるのは直感」という話です。上司というのはその道を長く歩いてきた人なので、経験も豊富なはずです。ものごとがうまくいくかどうかの判断は優れていると考えていいでしょう。一方で新しいアイデアに対して否定的すぎるようなものは求められるべき直感ではないように感じます。このことって機械学習で例えられるのかなと思います。経験に近いドメインのものごとについては学習データが豊富なので成功するかどうかのビジョンが明確。その一方であるドメインについてのみに閉じてしまうと過学習のような状態で未知なデータには対応し難くなる。こんなことがぼんやり浮かんだのですが、よくわからなければ無視してください。

Chapter3 クリエイティブ思考の邪魔リスト

この書籍のタイトルにもなっているメインチャプターです。15の邪魔リストを順に解説しています。考える方に柔軟性を持たせるためにはどうすればいいか、という話をしているとも読み替えられます。どの分野・時代においても心がけておくとよい話が多かったと思います。

この章で好きな話は「制約を侮ってはいけません」という見出しのお話です。この中に制約というものはクリエイティブ思考にプラスに働いたりマイナスに働いたりすることがあるということが記述されています。適切な制限というものは考える的を絞り思考をシャープにする力があり、過剰に制限することは工夫の余地をなくすことになりクリエイティビティの低下に繋がる、ということなんですね。面白い。

まとめ

クリエイティブ思考がどうすれば身につくのか、ということに興味がある方はもちろんですが、漠然とビジネスライフをより良くしたいという人にもおすすめできる一冊です。さっと読めて面白い本なので是非。

ビジネスモデル・ナビゲーター
翔泳社 (2016-10-11)
売り上げランキング: 653

Atomで複数行一括で行頭に文字列を入力する方法

AtomでTexファイルをいじっていて不要な箇所を一気にコメントアウトするときに、どうするんだっけ、と迷ったのでメモ。 複数行一括してコメントアウトしたいときだけでなく、コメントアウトを外したいときにも使える手順なので、記事としてシェアしようと思います。 ここで紹介しているのはMacのキーボードショートカットなので、WindowsやLinuxの方は適宜読み替えて実行してください。

手順

1. 文字列を挿入したい行を選択する

まずは先頭に文字列を挿入したい行を選択してください。 マウスでドラッグしても良いですし、Shiftキーを押しながら矢印キーで選択してもいいでしょう。

2. マルチカーソルにする

次に「Shift + Command + L」で選択した行にマルチカーソルを生成します。

3. カーソルを行頭に移動する

この段階ではカーソルの位置がまちまちなので行頭に移動します。 「Control + A」で行頭に移動します。

4. 文字列を入力

ここで万を持して文字を入力します。コメントアウトするなら「//」や「#」や「%」を入力することになるでしょう。 入力を終えたらEscキーでマルチカーソルを解除するのを忘れないでください。

まとめ

Atomで複数行一括文字入力の操作方法をまとめてみました。 かなり使う場面が多い操作だと思うので積極的に使っていきましょう。

Affinity Designerが期間限定で20%オフ中。これは買うしか。

期間限定でディスカウント中

Affinity DesignerとSketchのどちらが買いなのか

昨年この記事を書いて購入して以来Affinity Designer推しな私です。AdobeのIllustratorがサブスクリプション制になってからはすっかりイラレとはご無沙汰です。買い切りのAffinity Designerは財布にやさしい。機能も充実しています。

さて、先日10/6にAffinity Designerがバージョン1.5という大型アップデートがリリースされました。その関係だと思いますが、現在App Storeにて20%オフ価格の4800円で販売されています。この期間限定のセールが買いどきなのは間違いないです。いつまでこのセールが続くのかは公式情報が見つかりませんでしたので、購入はお早めに。


Affinity Designer

公式情報

宣伝


Affinity Tips – Affinity製品の使い方ガイド
Affinity Designの操作方法やチュートリアルを紹介するWebサイトを運営中です。 もしこの記事をきっかけにAffinity Designerを使うことになったら是非読んでくださいね! ちょっとずつ記事もPVも増え、今後も随時更新していく予定です。