きゃべログ

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

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

0 件のコメント

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

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

0 件のコメント :

コメントを投稿

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

0 件のコメント

概要

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

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

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

面白い点

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

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

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

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

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

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

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

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

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

まとめ

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

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

0 件のコメント :

コメントを投稿

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

0 件のコメント

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

手順

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

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

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

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

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

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

4. 文字列を入力

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

まとめ

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

0 件のコメント :

コメントを投稿

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

0 件のコメント

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

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も増え、今後も随時更新していく予定です。

0 件のコメント :

コメントを投稿

Blogger向けAmazletのリンクhttps化ツールを作成しました

0 件のコメント

概要

BloggerのHTTPS化をしたらやたら警告が出る

以前このブログのプロトコルをHTTPS化したのですが、どうもamazlet (jp)で生成した画像でやたらと記事編集中に警告が出るようになりました。これはHTTPSプロトコルで通信するにも関わらずhttpのプロトコルを利用して画像を埋め込んでいるからだそうです。

そこでこの問題を解決すべく、Amazletで生成したリンクを掲載している記事すべてを更新……するのは面倒だったので一括編集出来るツールを作成しました。

作成したツール

cabbage63/amazletOptimizer: Blogger automation tool making link made by Amazlet suitable for HTTPS

PythonからGoogle Blogger APIを叩いて自動的にURLを全記事置換するというスクリプトを書きました。

使い方は少しだけややこしくて、APIキーを取得→ファイルをちょっといじる→実行という手順です。詳しくはリポジトリのトップページにREADMEが書いてあるのでそちらを参考していただければと思います。

機能

こちらを参考にコードを書きました。
当 Blog を SSL 対応させたので手順や修正が必要になった点などをまとめ | WWW WATCH

機能としては全記事の中身を次のような規則に従って置換するだけです。imgタグの中のURLだけ修正すれば警告は出ないのですが、ついでにaタグのURLも更新しています。

http://ecx.images-amazon.com/
↓
https://images-fe.ssl-images-amazon.com/
http://www.amazon.co.jp/
↓
https://www.amazon.co.jp/

予めこの置換方法で問題ありそうな方は気をつけておいてください。

製作後記

WEB APIを叩くのに慣れていなかったのがそもそも問題ですが、BloggerのAPIを叩くサンプルが少なくて苦労しました。BloggerのPythonライブラリのドキュメントがあまりよくわからなかったのも困った要因の1つです。もし需要がありそうならこのあたりのノウハウについて記事を書いてみようかなと思っています。まああんまりBloggerのAPIを叩くことはないかな。

0 件のコメント :

コメントを投稿

pythonスクリプトをcronで自動実行したいときに気をつけること

0 件のコメント

cronでpythonスクリプトを自動実行する場合の落とし穴

最近pythonを使って動画を自動生成して定期投稿をするbotを作ってみました。

botを作るのってもっと簡単なイメージだったのですが、小さなハマりポイントがいくつかあって意外と手こずりました。ということで今回はその情報をシェアしていきます。

ローカルのパス指定は絶対パスで指定する

Pythonスクリプト内のローカルパスを指定するときは絶対パスで記述すると安心です。相対パスで記述すると思った動作をしてくれない可能性があります。

#coding:utf-8
f = open('test.txt','w')

例えば上のようなhoge.pyというスクリプトをcrontabでpython ~/any/path/hoge.pyのようにして実行するとします。するとtest.txtはcrontabを実行しているユーザのデフォルトディレクトリに生成されます。これはcrontabは新たに指定ユーザでログインし、コマンドを実行するためです。

では次のようなスクリプトではどうでしょうか。

#coding:utf-8
f = open('./test.txt','w')

やはりこれでもcrontabのログインシェルのデフォルトディレクトリに生成されます。

補足ですが次にホームディレクトリをした場合にはどうなるでしょうか。

#coding:utf-8
f = open('~/test.txt','w')

この場合はチルダがホームディレクトリに展開されずにエラー終了してしまいます。なのでopen()などでパスを与えるときには/home/[ユーザ名]/のように与えるのが無難だと思います。


実践力を身につける Pythonの教科書
クジラ飛行机
マイナビ出版 (2016-10-26)
売り上げランキング: 66,551

pyenvでバージョン管理している場合は気をつける

おそらく多くの方が.bashrcなどで記述しているであろうeval "$(pyenv init -)"がcrontabでは実行されていないため、pyenvにパスが通っていない状態になってしまいます。そのためpythonはOSプリインストールのpythonで実行されてしまうはずです。そのため想定したバージョンではpipなどでモジュールをインストールしているのにインポート出来ないなどの症状に見舞われます。対応策としては2通りあります。

pyenvにパスを通しちゃう

pyenvにパスが通っていないからデフォルトのpythonが呼び出されているわけなので、通してやれば言い訳です。crontab -eのジョブの最初にパスを通してpyenv initします。サンプルは次のとおりです。

#8hoge.pypyenv
* 15 * * * export PYENV_ROOT=$HOME/.pyenv; export PATH=$PYENV_ROOT/bin:$PATH; eval "$(pyenv init -)"; python /any/path/you/want/hoge.py
#15hoge.pypythonhoge.py
#
* 15 * * * export PYENV_ROOT=$HOME/.pyenv; export PATH=$PYENV_ROOT/bin:$PATH; eval "$(pyenv init -)"; cd ~/any/path/you/want/; python /any/path/you/want/hoge.py

直接pyenv内のpythonを呼び出しちゃう

力技ですが~/.pyenv/versions/下に格納されているpythonを呼び出しても実行できます。そのときのcronジョブの指定は次のようになります。

#15python2.7.9hoge.py
* 15 * * * ~/.pyenv/versions/2.7.9/bin/python /any/path/you/want/hoge.py

環境変数PATHは指定しなおす

前の話からcronではパスが通っていないことはお察しのとおりですが、これが理由でpython経由でshellのコマンドを実行する場合に使いたいコマンドが見つからないことがあります。たとえば初期設定のままだと/usr/local/bin/にインストールしたコマンドが実行できなかったりします。なのでジョブの先頭にパスを登録するようにしましょう。次は/usr/local/bin/にパスを通す一例です。

#hoge.py
* 15 * * * export PATH=$PATH:/usr/local/bin/;python /any/path/you/want/hoge.py

詳しくはこの記事を読むことをおすすめします。
cronジョブを作るのにいつものやり方でいいんですか? - Qiita

まとめ

今回はcronでpythonスクリプトを自動実行する際に気をつけることをまとめました。また何か見つけたら追記するかもしれません。


新しいLinuxの教科書
新しいLinuxの教科書
posted with amazlet at 16.10.12
大角 祐介
SBクリエイティブ
売り上げランキング: 4,333

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
青木 峰郎
ソフトバンククリエイティブ
売り上げランキング: 140,503

0 件のコメント :

コメントを投稿

読書管理サービスを読書メーターからブクログに移行した

0 件のコメント

ついさっき読書メーターに登録していた本をすべてブクログに移行しました。読書メーターは2年使って来たのですが、少しブクログを試してみたくなりました。理由やそのやり方について少し書いてみようと思います。

移行したきっかけとしては、自分が大事だと思っているポイントに関してブクログのほうが少し良いかなと思ったからです。もちろん読書メーターの方が優れている点もたくさんあるので紹介します。今読書メーターを使っていて移行を考えている人や、どっちを使おうか悩んでいる人の助けになれば幸いです。

大人のための読書の全技術
齋藤 孝
KADOKAWA/中経出版
売り上げランキング: 17,500

各サービスの強み

読書メーターの強み

SNSとしての機能が充実している。

ホームにはタイムラインがあり、自分がお気に入りしたユーザのアクティビティを見ることができます。例えば◯◯の本を読み終えました、というようなものです。読書を軸に色々な人とコミュニケーションを取りたい人にとってはとても重要な機能だと思います。

また、レビューを書くと誰かがナイス(いいねみたいなもの)してくれたりコメントを付けてくれたりするのも続けるモチベーションの1つかなと思います。ナイスは知らない人から結構来ることがあったりして面白いです。レビューは書籍の個別ページの下に表示されるので、人目に触れる頻度が多いからだと思います。

ログしてくれる情報が細かい

読書した冊数だけでなく、ページ数についてもログしてくれます。本によってページ数にはムラがあるので、月ごとの読書ペースをモニタリングするには冊数でなくページ数のほうが良いでしょう。

また、ページ数や冊数については日平均・週平均・月平均も計算して出してくれるのでこれもありがたいです。

個人的には見やすい所に積読本や読みたい本の数が表示されているのが嬉しかったりします。

レビュー数が豊富

他のサービスに比べてレビューが活発な印象です。読んでみようか悩んでいる本のレビューを見ることは良い判断材料になるかもしれません。

1冊20分、読まずに「わかる!」すごい読書術
サンマーク出版 (2016-06-17)
売り上げランキング: 21,062

ブクログの強み

デザインがモダン

要するに今時っぽいデザインということです。配色がおとなしく、ごちゃごちゃしていないのでストレスがかかりません。本棚は木のテクスチャを貼っていたり、ブクログの見せ方に対するこだわりが見て取れます。


デザインというのは見た目の話だけでなく機能面も優れていて、本棚内の本を検索するためのパラメータがたくさん用意されていたり、本棚をスクロールすると自動的にどんどん読み込みをしてくれたりユーザビリティが高いです。


iPhoneだけですが、ネイティブアプリもあります。バーコードリーダーで本を登録できたりちょっと便利な感じです。

本を探す機能が強い

アクセスしてすぐ見るホームのページに新刊情報やランキング、人気のレビューが表示されているため、皆が注目している本をいち早く知ることができます。

本の管理機能が強い

本をたくさん登録していくと、「あの本どこだっけ」ということが頻発すると思います。ブクログでは独自の「カテゴリ」と「タグ」を書籍ごとに振ることができ、それらを頼りに書籍を検索することが出来るようになります。

また、5段階でレーティングすることが出来るため、もう一度本を読み返したい本を探しやすくなるのも良いところです。

コンビニ人間 (文春e-book)
文藝春秋 (2016-07-27)
売り上げランキング: 99

読書メーターの弱み

デザインのなんともいえない感じ

シンプルで見やすいといえば見やすいのですが、個人的にはかっこよくはないなぁという印象です。なんとなくもっさりした感じが気になっていました。

上はお知らせの表示が4つも並んだりまあまあ強烈な図。

公式のネイティブアプリがない

一応App Storeには非公式(?)と思しきアプリはあるのですが、iPhone6など新しい端末で閲覧してもiPhone4時代の昔懐かしのUIのアプリで、使い勝手がよろしくありません。

バーコードリーダーだったりネイティブアプリならではの便利機能が搭載された公式アプリが出たらなあという思いがあります。

読書は1冊のノートにまとめなさい[完全版]
奥野 宣之
ダイヤモンド社
売り上げランキング: 16,821

ブクログの弱み

個人に着目したデータが少ない

読書メーターは個人の読書を記録したりSNS機能を伸ばしていたり人にフィーチャーしたサービスであるのに対し、ブクログは自分の本棚を作るというのがメインのサービスです。その都合上、ブクログは本を探すことや本の一覧性はとても良いのですが、読書ペースなどの個人のデータはあまり見て取れません。また読み終えた本の数や、読みたい本の数がいくつかボタンアクションを経ないと見られないところも少し不便なところでしょうか。

SNSとして使うには個人間のつながりが薄い

基本的に他人とのインタラクションがメインではなさそう?なのでホームには他人のアクティビティは表示されません。そのため他の人がどういう本を読んでいるかを知るにはメニューバーから「タイムライン」をクリックする必要があります。そのため他人からのコネクションも少なめかもしれません。

また、意見交換をする掲示板「談話室」という機能もありますが、こちらも能動的にトピックを立ち上げたり、トピックに参加する必要があるので、少しハードルがあるのかなと思います。

格差社会を生き延びる“読書”という最強の武器
大岩 俊之
アルファポリス
売り上げランキング: 864

まとめると

細かい日毎の読書ペースを管理したい人や、他の人と読書で繋がりを作りたい人は読書メーターを、読みたい本と読んだ本などをきれいに管理したい人はブクログを使うと良いと思います。

私はサービスを使うモチベーションとしてデザイン面が強いみたいなのでブクログを選びました。

どっちのサービスが向いているか診断(?)

以上から、各サービスがどんな人に向いているかを考えてみました。あんまり参考にならないかも。

  • 読書メータを使うと捗る人
    • 日頃から読書ペースを管理したい
    • 読書を通じて人と繋がりたい
    • 本は口コミで選ぶタイプだ
  • ブクログを使うと捗る人
    • 本は何度も読み直すタイプだ
    • デザインがキレイなWebが好きだ
    • 本を表紙で選ぶことが少なくない

移行プロセス

登録している本の移行が結構面倒でした。ググってツールがないか調べてみると、あったのですがRubyのバージョンを変えてみても、エラーが全然取れなかったので諦めました。
読書メーター→ブクログ移行用スクリプトを書いた - blog.kymmt.com

ということで読みたい本はISBNで一括登録することにしました。まずは読書メーターの読みたい本にアクセス。

そして印刷をクリック。すると本の一覧画面が出るので、ISBNのみにチェックして表示項目を更新します。そしてリストになったISBNを範囲選択で一括コピーして、ブクログのまとめて登録(ISBN)から登録しました。

読んだ本には印刷ボタンがないので仕方なく全部手作業で移行しました。40冊程度だったので手作業でしたが、数百あったらプログラム組んだかもしれない。

0 件のコメント :

コメントを投稿

Xcode8+Swift3におけるシリアライズ・デシリアライズ

0 件のコメント

XcodeとSwiftの仕様変更にまたもハマる

先日投稿した2記事同様、Xcode8・Swift3のバージョンアップによりXcode7系やSwift2系のときの開発方法と少し違うところが出てきています。そこにハマったのでまたも記事にしました。

[iOS][Swift]prepareForSegueをOverride出来ない……の対処法 - Qiita

Xcode8+Swift3でNSUserDefaultsが使えない http://cabbalog.blogspot.jp/2016/09/xcode8-swift3-nsuserdefaults.html

背景


本気ではじめるiPhoneアプリ作りに従ってiOSアプリの開発を学んでいるのですが、こちらはXcode7系+Swift2系の開発環境での開発方法について解説しています。Xcode8系+Swift3系のバージョンの違いによる書き換えが思いの外発生している様子。こちらの書籍をお持ちの方はChapter5のSection3を御覧ください。このあたりの内容について今回は記述しています。この書籍はフルカラーで書き方も易しいため以前のバージョンの環境で開発するのであれば間違いなくお勧め出来ると思います。

前回も紹介しましたが新しい環境での開発を学びたい方は下の書籍をどうぞ。

Xcodeではじめる 簡単iPhoneアプリ開発[Xcode 8&Swift 3対応]
技術評論社 (2016-09-22)
売り上げランキング: 5,959

シリアライズとは

独自クラスはそのままではUserDefaults(以前のバージョンではNSUserDefaults)に格納することができません。そこでデータを一旦NSKeyedArchiverクラスのメソッドを介してData型に変換する必要があります。(以前はNSData型に変換したようです。書籍でもそうでした。)この形式に変換することでUserDefaultsに独自クラスを保存することが可能になります。

デシリアライズとは

シリアライズされ、UserDefaultsに格納されたデータはUserDefaults.object(forKey: String)というメソッドで呼び出すことができます。このメソッドではAny型でオブジェクトを返すので必要に応じてキャストする必要があります。そこで通常Data型に一度戻してからさらにNSKeyedUnarchiverクラスのメソッドを介して元の独自のクラスに戻します。この最後の過程がデシリアライズというものです。要するにシリアライズされたオブジェクトを元のクラスのインスタンスに変換するというイメージで良いと思います。

ハマったとこ

今回ハマったところは、NSKeyedArchiverNSKeyedUnarchiverというクラスこそあるものの、それらがそれぞれもつメソッドarchivedDataWithRootObjectunarchiveObjectWithDataが見当たらなかったという点です。

NSKeyedArchiver.archivedDataWithRootObjectが見当たらない件について

こちらはとても簡単な問題でした。これはSwiftとObjective-C(iOS開発に使われていた従来の言語)でのメソッドの命名規則が異なることがきっかけだったようです。Objective-Cの時代ではarchiveDataWithRootObjectのように何をするか + with + 最初の引数名という順でメソッド名が定義されていました。ところがSwiftではwith以降の部分がパラメータ名に記述するしきたりらしく、archiveData(withRootObject: Any)という名前に変更されたようです。

名前こそ異なりますが、使い方は前身であるarchiveDataWithRootObjectと変わりませんのでそこまで問題にはならないでしょう。

NSKeyedUnarchiver.unarchiveObjectWithDataが見当たらない件について

こちらも上記同様で、新しいバージョンではunarchiveObject(with: Data)となっています。こちらの使い方も同様ですので戸惑うこともないと思います。一点気をつけるとすれば、移行元のメソッドunarchiveObjectWithDataの引数がNSData型なのに対して新しいメソッドの引数がData型なので、userDefaults.object(forKey: String)で呼び出したオブジェクトはas? DataとするなどしてData型にキャストする必要があります。

これからつくる iPhoneアプリ開発入門 ~Swiftではじめるプログラミングの第一歩~(仮)
藤 治仁 徳弘 佑衣 小林 加奈子 小林 由憲
SBクリエイティブ
売り上げランキング: 140,408

対応策

前回同様上記書籍のサンプルプロジェクトを題材に書き換えてみました。著作権保護のため元のコードをこちらで掲載することはできませんが、出版社の公式ページからダウンロードできます。Chapter5のSampleCustomClassDataStorageというプロジェクトを御覧ください。照らし合わせていただけるとわかりやすいと思います。

こちらに私が書き直したバージョンのソースを掲載します。


import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //put data after view is loaded
        let userDefaults = UserDefaults.init()
        let data = MyData()
        data.valueString = "hogehoge"

        //serializing
        let archiveData = NSKeyedArchiver.archivedData(withRootObject: data)
        userDefaults.set(archiveData, forKey: "data")
        userDefaults.synchronize()

        //deserializing
        if let storedData = userDefaults.object(forKey: "data") as? Data{
            if let unarchivedData = NSKeyedUnarchiver.unarchiveObject(with: storedData) as? MyData{
                if let valueString = unarchivedData.valueString{
                    print("deserialized:" + valueString)
                }
            }
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

ポイントは
- NSData型Data型
- NSKeyedArchiver.archivedDataWithRootObjectNSKeyedArchiver.archivedData
- NSKeyedUnarchiver.unarchiveObjectWithDataNSKeyedUnarchiver.unarchiveObject
の書き換えです。

もしもっと正しい書き方があればコメントいただければ幸いです。

まとめ

今回はXcode8+Swift8におけるiOSアプリ開発において独自クラスを保存するためのシリアライズとデシリアライズの方法について解説しました。バージョンアップによって勝手が変わったこのあたりで困っている人の助けになれば幸いです。

詳解 Swift 改訂版
詳解 Swift 改訂版
posted with amazlet at 16.09.28
SBクリエイティブ (2016-02-26)
売り上げランキング: 27,708

ヒットするiPhoneアプリの作り方・売り方・育て方
マイナビ出版 (2013-07-27)
売り上げランキング: 91,531

0 件のコメント :

コメントを投稿

Xcode8+Swift3でNSUserDefaultsが使えない

0 件のコメント

NSUserDefaultsが使えない

この間のSwiftやXcodeのバージョンアップによって従来の環境とはコードの書き方が変わってきたりしているようです。先日Qiitaに投稿したSegueに関する記述にも同様のことが言えそうです。

[iOS][Swift]prepareForSegueをOverride出来ない……の対処法 - Qiita

背景

私は現在本気ではじめるiPhoneアプリ作りという書籍を読み進めながらiOSアプリの開発を勉強しています。この本、2016年3月10日と比較的新しく、Amazonでも平均4以上のなかなか評判のいい本です。


しかしソフトウェア技術はナマモノなので、アップデートがあるとその対応は公式の情報を拾ったりネットの記事を読んだりするしかありません。誰かの役に立てばということでこの記事を執筆しました。

ちなみに、はやくも新しいバージョンに対応した書籍も出始めているようです。

Xcodeではじめる 簡単iPhoneアプリ開発[Xcode 8&Swift 3対応]
技術評論社 (2016-09-22)
売り上げランキング: 5,959

NSUserDefaultsとは

今回の題材となっているNSUserDefaultsですが、iOS端末にアプリのデフォルト設定などを保存したり呼び出したりするときに使うクラスです。上記書籍ではp208~の「5章:永続的なデータを扱う-ToDoリストアプリで学ぶデータ操作」という所に該当します。これが先日のXcodeとSwiftの大型アップデートによって使えなくなったようです。おかげでサンプルプログラムを入力してもインテリセンスでもクラスが出てくることはありません……。

なお、この書籍はXcode7系とSwift2系をサポートしていると明記してあるので、Xcode8やSwift3はサポート外であることに関してはこの書籍の責任はありません。仕方ないのです……。

対応策

公式リファレンスを見てどう対応すべきか探ってみることにしました。するとそれっぽい新しいクラスが見つかりました。

UserDefaults - Foundation | Apple Developer Documentation

このクラス、名前こそUserDefaultsですが、リファレンスの記述を呼んでみるとところどころUserDefaultsではなくNSUserDefaultsと書いているところからドキュメントがまだ新しくなっていないようですね。ですがメソッドはきちんとUserDefaultsのものになっており、使えるようでした。


このリファレンスを元に書き直してみたところ、思った通りの動作をしてくれました。データの更新についての記述を比較してみましょう。なおこのアプリはテキストフィールドの内容をボタンを押すことで保存し、次回以降アプリの起動時にテキストフィールドに表示するというものです。著作権保護のため元のコードをこちらで掲載することはできませんが、出版社の公式ページからダウンロードできます。Chapter5のSampleDataStorageというプロジェクトを御覧ください。

こちらに私が書き直したバージョンのソースを掲載します。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    @IBAction func tapActionButton(_ sender: AnyObject) {
        let userDefaults = UserDefaults.init()
        userDefaults.set(textField.text, forKey: "text")
        userDefaults.synchronize()
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let userDefaults = UserDefaults.init()

        if let value = userDefaults.string(forKey: "text"){
            textField.text = value
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

大きく違うところはクラスをNSUserDefaultsからUserDefaultsに変更したこと。またそれに伴って使うメソッドを変更しました。

  • NSUserDefaults.standardUserDefaults()UserDefaults.init()
  • NSUserDefaults.stringForKey(String)UserDefaults.string(forKey: String)
  • NSUserDefaults.setObject(String, forKey: String)UserDefaults.set(String, forKey: String)
という具合です。

もし他に正しい書き方があればコメントいただければ幸いです。

これからつくる iPhoneアプリ開発入門 ~Swiftではじめるプログラミングの第一歩~(仮)
藤 治仁 徳弘 佑衣 小林 加奈子 小林 由憲
SBクリエイティブ
売り上げランキング: 140,408

まとめ

今回はiOSアプリ開発において欠かせないデータ管理のためのクラスNSUserDefaultsがXcode8+Swift3の環境において使えないという問題を解消しました。もし困っている方がいらっしゃったら是非試してみてください。

詳解 Swift 改訂版
詳解 Swift 改訂版
posted with amazlet at 16.09.28
SBクリエイティブ (2016-02-26)
売り上げランキング: 27,708

0 件のコメント :

コメントを投稿

科学技術論文"っぽい"Excelグラフテンプレートを作った

0 件のコメント

科学技術論文っぽいExcelグラフテンプレート

論文などのテクニカルな文書にふさわしい書式にグラフを整形するテンプレートです。現在棒グラフと折れ線グラフのテンプレートを公開しています。

論文執筆の上でデータを整理し、査読者に見やすい形で可視化することは文章を論理的に伝わりやすく書くことと同じくらい大切なことであると思っています。グラフの完成度が論文全体の完成度の印象に影響しないとも言い切れません。しかしながらグラフの書式設定に時間を取られるのはもったいないのでテンプレートを作成しました。

サンプル


図1 棒グラフ(模様による塗り分けなし)


図2 棒グラフ(模様による塗り分けあり)


図3 折れ線グラフ(線の種類の区別なし)


図4 折れ線グラフ(線の種類の区別あり)


図5 サンプル数が多いときはマーカをはずしていただくと見やすくなります。

ダウンロード

こちらからダウンロードしてください。
http://bit.ly/tech_graph_temp

内容

  • tech_bar.crtx
    • 棒グラフの模様による塗り分けがないバージョン(図1)
  • tech_bar_universal.crtx
    • 棒グラフの模様による塗り分けがあるバージョン(図2)
  • tech_line.crtx
    • 折れ線グラフの線の種類による区別がないバージョン(図3)
  • tech_line_universal.crtx
    • 折れ線グラフの線の種類による区別があるバージョン(図4)

利用方法


図6 グラフテンプレートの選択画面

  1. 保存したZIPファイルを解凍する。
  2. 適当な数値を選択し、グラフの挿入画面を開く。
  3. [すべてのグラフ]タブの左メニューにあるテンプレートを選択する。
  4. ウィンドウ左下に[テンプレートの管理]というボタンが現れるのでクリックする。(図6)
  5. エクスプローラでテンプレートを置くディレクトリが開くので、そこに解凍したファイルをドラッグ&ドロップ

この操作ができたら以降、グラフ挿入時にテンプレートを利用してグラフを作成できるようになります。

諸注意

目盛りの間隔が細かすぎたりマーカーが重なって見難くなるなど、テンプレートを適用してそのままだと不自然になってしまう場合があります。また、色遣いが好みの組み合わせでない場合にはご自身で書式設定を変更してください。(図5)

このテンプレートの利用に関し、トラブルが発生した場合、利用者又は第三者に損害が生じた場合であっても一切の責任を負担致しませんのでご了承ください。

作成の背景

Excelのデフォルト書式のグラフ


図7 よく見るデフォルトのExcelグラフ

Excelでグラフを作成する際、デフォルトの書式で出力すると上のようなグラフが作成されます。科学技術論文ではあまり見ないフォーマットですし、なんとなくExcel臭漂うグラフが出来上がります。ポップな様式なのでシーンを選べば使えるかもしれませんが、論文中で使用するには少し締まりのないように見えます。また、線の配色や、薄い文字色など読み取りやすさもいまひとつのように感じます。

XGraphGnuplotなどのグラフ作成専用のツールを使えば科学技術論文っぽいグラフが作成できますが、同じソフトでデータ整理や統計処理からグラフ作成までできるExcelの便利さも捨てがたいところです。

エクセルのダサいグラフを真面目カッコよくする方法 | 機械工学系サラリーマンK*の日記

上の記事によるとポチポチスタイルを修正すればExcelでも問題なくカッコいいグラフが描けるということで、この設定の手間を省くためにテンプレートを作成します。まずは原点に立ち戻り、一般にイケてる論文のグラフがどんなスタイルなのか調べることにしました。

イケてる論文のグラフとは?

私の研究テーマがユビキタスコンピューティングなので、この分野のトップカンファレンスであるUbiCompのベストペーパと、ノミネーションペーパを対象にグラフの形式を調べてみました。

UbiComp2014のペーパはこちらから参照できました。丁寧にACMのライブラリにリンクがはってあります。
Best Papers - Ubicomp 2014

グラフがないペーパも幾つか存在しますが、グラフのあるペーパに関して使用されているグラフのほとんどは折れ線グラフと棒グラフでした。散布図もたまに使われていますが、使用頻度が高い折れ線グラフと棒グラフのテンプレートを作成することに。

グラフの外枠については上下左右すべてを黒い実線で囲うものが多いようでした。確かにグラフを黒い線で囲うだけでもそれっぽくなる。

目盛線はグラフエリアいっぱいに実線を引くのではなく、内側に少し線を引くような形式が多いようでした。イメージは試験菅の目盛りのような感じ。

凡例の枠の有無についてはそれほど大きな差は見られませんでした。見やすいほうを選べば良いと思います。


図8 UbiCompに採択されている論文でよく使われているグラフの形式
引用元
Brown, Chloë, et al. "The architecture of innovation: Tracking face-to-face interactions with ubicomp technologies." Proceedings of the 2014 ACM International Joint Conference on Pervasive and Ubiquitous Computing. ACM, 2014.

以上のポイントを踏まえて図8のようなグラフのスタイルを目指すことにしました。

系列に設定する色

グラフの棒の色や線の色をどのように設定するのかもいつも悩みます。デフォルトだと彩度の低い青をはじめとしたカラーセットになっています。これもExcel臭を漂わせる原因になっていると思います。こちらは少し工夫して、カラーユニバーサルデザイン推奨配色セットを参考にして設定しました。

ユニバーサルデザインの考え方では色だけでなく模様や線の種類などで区別することを推奨しているようなので、色のみ変えたものと、模様などを用いて区別しているものそれぞれを用意しました。今回使用した色は概ねはっきりとした色合いのものが多いため、いわゆるExcelっぽいグラフからは脱却できてそうな気がします。

まとめ

Excelで作成したグラフを科学技術論文にふさわしい「っぽい」書式に変更するテンプレートを作成し、ご紹介しました。お気に召されましたら是非ご利用ください。不便な点や使ってみた感想などコメントに書いていただけると励みになります。

伝わるデザインの基本 よい資料を作るためのレイアウトのルール
高橋 佑磨 片山 なつ
技術評論社
売り上げランキング: 3,167
国際誌エディターが教えるアクセプトされる論文の書きかた
上出 洋介
丸善出版
売り上げランキング: 39,626
「伝わる資料」デザイン・テクニック
渡辺 克之
ソーテック社
売り上げランキング: 100,626

0 件のコメント :

コメントを投稿