まだ中学生のブログ スマホ関連、Google関連のことを書いてます。IT系勤務、既婚、精神年齢:中学生。 2017-10-04T14:06:14+09:00 madachugakusei Hatena::Blog hatenablog://blog/11696248318754866448 MacをHigh SierraにしたらAndroid Studioのエミュレーターが起動しなくなった hatenablog://entry/8599973812304644529 2017-10-04T14:06:14+09:00 2017-10-04T14:06:14+09:00 High Sierraへのアップデートが原因かはわからないが、エミュレーターが起動しなくなった。 解決策として、ABIを x86_64 から x86 にしたら起動するようになった。 <p>High <a class="keyword" href="http://d.hatena.ne.jp/keyword/Sierra">Sierra</a>へのアップデートが原因かはわからないが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%DF%A5%E5%A5%EC%A1%BC%A5%BF%A1%BC">エミュレーター</a>が起動しなくなった。</p> <p>解決策として、ABIを <em><a class="keyword" href="http://d.hatena.ne.jp/keyword/x86">x86</a>_64</em> から <em><a class="keyword" href="http://d.hatena.ne.jp/keyword/x86">x86</a></em> にしたら起動するようになった。</p> madachugakusei UbuntuでResilio Syncを使う hatenablog://entry/8599973812274293870 2017-06-26T23:20:03+09:00 2017-06-26T23:20:03+09:00 Resilio Syncとは P2Pを使ってスマホの写真をPCにバックアップできる。 P2Pだからめっちゃ高速。(インターネット経由しないから) 設定によっては特定のフォルダをPC・Android・iPhoneで共有することもできる。 大量の動画とかDropboxにアップロードとか、LTE使おうがWi-Fi使おうが時間かかるけど、Resilio Syncならルータのマックス速度まで出る。 しかも容量も無制限。 インストール方法 Ubuntu 17.04で動作確認済み Resilio Sync DownloadからLinux –> x64をダウンロード (ファイル名: resilio-sync_… <h2>Resilio Syncとは</h2> <p>P2Pを使ってスマホの写真をPCにバックアップできる。 P2Pだからめっちゃ高速。(インターネット経由しないから)</p> <p>設定によっては特定のフォルダをPC・Android・iPhoneで共有することもできる。 大量の動画とかDropboxにアップロードとか、LTE使おうがWi-Fi使おうが時間かかるけど、Resilio Syncならルータのマックス速度まで出る。 しかも容量も無制限。</p> <h2>インストール方法</h2> <p>Ubuntu 17.04で動作確認済み</p> <p><a href="https://www.resilio.com/platforms/desktop/">Resilio Sync Download</a>からLinux &ndash;> x64をダウンロード<br/> (ファイル名: resilio-sync_x64.tar.gz)</p> <p>起動方法</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ tar zxf resilio-sync_x64.tar.gz $ <span class="synStatement">ls</span> <span class="synSpecial">-l</span> resilio-sync_x64.tar.gz rslsync $ ./rslsync <span class="synSpecial">--webui.listen</span> 0.0.0.0:<span class="synConstant">8888</span> <span class="synSpecial">--log</span> ./rslsync.log </pre> <p>このPCからしか使わないなら</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ ./rslsync <span class="synSpecial">--webui.listen</span> 127.0.0.1:<span class="synConstant">8888</span> <span class="synSpecial">--log</span> ./rslsync.log </pre> <p>とかの方が安全かも。(動作未確認)</p> <p>他のコマンドオプションは<a href="https://help.resilio.com/hc/en-us/articles/204762449-Guide-to-Linux">こちら</a></p> <h2>Resilio Syncの使い方</h2> <p>ブラウザから</p> <pre class="code" data-lang="" data-unlink>http://localhost:8888</pre> <p>へアクセス</p> <p>ユーザー作成を済ませて、いざiPhone・Androidと同期する。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20170626/20170626225249.png" alt="f:id:madachugakusei:20170626225249p:plain" title="f:id:madachugakusei:20170626225249p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><code>Enter a key or link</code> からリンクを入力する。</p> <p>対象となるリンクは、iPhone・Androidの下記の共有からコピーする。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20170626/20170626230531.png" alt="f:id:madachugakusei:20170626230531p:plain" title="f:id:madachugakusei:20170626230531p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>リンクのフォーマットは</p> <p><code>https://link.getsync.com/#f=XXXXXXXXXXXXXXXXXXX&amp;v=2.4</code> みたいな感じ。</p> <p>PC側でこのリンクを追加すると、モバイルデバイス側で承認を求められるので承認すれば同期が開始される。</p> madachugakusei 【Docker】プロキシサーバーでストリーミングしている動画のURLを知る hatenablog://entry/10328749687194088881 2016-11-13T13:05:35+09:00 2016-11-13T13:05:35+09:00 プロキシサーバーでストリーミング先のURLを知る 概要 動画のストリーミング先のURLをプロキシサーバーのアクセスログによって調べる方法をメモ。 環境 Mac Vagrant Docker squid Mac本体で動画ストリーミング再生して、squid on Docker on Vagrantのアクセスログを解析する。 Vagrantの事前準備 Mac本体からポートフォワードの設定をする。 config.vm.network "forwarded_port", guest: 3128, host: 3128 私はubuntu15_04を使用。 別に他のディストリビューションで問題なし。(結局は… <h1>プロキシサーバーでストリーミング先のURLを知る</h1> <h2>概要</h2> <p>動画のストリーミング先のURLをプロキシサーバーのアクセスログによって調べる方法をメモ。</p> <h2>環境</h2> <ul> <li>Mac <ul> <li>Vagrant <ul> <li>Docker <ul> <li>squid</li> </ul> </li> </ul> </li> </ul> </li> </ul> <p>Mac本体で動画ストリーミング再生して、squid on Docker on Vagrantのアクセスログを解析する。</p> <h2>Vagrantの事前準備</h2> <p>Mac本体からポートフォワードの設定をする。</p> <pre class="code" data-lang="" data-unlink> config.vm.network &#34;forwarded_port&#34;, guest: 3128, host: 3128 </pre> <p>私はubuntu15_04を使用。 別に他のディストリビューションで問題なし。(結局はDockerだし。)</p> <h2>プロキシの設定</h2> <p>設定 --> ネットワーク</p> <p>ネットワーク環境にsquidなどと別の構成を作っておくと良い。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20161112/20161112214940.png" alt="f:id:madachugakusei:20161112214940p:plain" title="f:id:madachugakusei:20161112214940p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>※プロキシ設定をするとsquidを立ち上げていないときはインターネット接続できなくなる。</p> <p>詳細からプロキシ設定へ進む</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20161112/20161112215228.png" alt="f:id:madachugakusei:20161112215228p:plain" title="f:id:madachugakusei:20161112215228p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>次の2つにチェックを入れる</p> <ul> <li>Webプロキシ[HTTP]</li> <li>保護されたWebプロキシ(HTTPS)</li> </ul> <p>2つともに次の項目を入力する</p> <ul> <li>プロキシサーバーアドレス <ul> <li>127.0.0.1</li> </ul> </li> <li>ポート <ul> <li>3128</li> </ul> </li> </ul> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20161112/20161112215359.png" alt="f:id:madachugakusei:20161112215359p:plain" title="f:id:madachugakusei:20161112215359p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>この設定を済ませた時点でsquid起動まではインターネットに接続できないので注意。</p> <h2>Vagrant上でsquid on Dockerを立ち上げる</h2> <p><a href="https://hub.docker.com/r/sameersbn/squid/">Dockerイメージはsquidがつかいやすそうなこれ</a>を使う。</p> <h3>squid起動</h3> <pre class="code" data-lang="" data-unlink> #!/bin/sh $ sudo docker run --name squid -it --rm \ --publish 3128:3128 \ --volume /srv/docker/squid/cache:/var/spool/squid3 \ sameersbn/squid:3.3.8-20 </pre> <p>この時点でインターネットにつながったはず。</p> <p>別ターミナル(Vagrant上)で次のコマンドを実行するとMac上でアクセスしたURLが出て来る。</p> <pre class="code lang-sh" data-lang="sh" data-unlink> $ sudo docker <span class="synStatement">exec</span> <span class="synSpecial">-it</span> squid <span class="synStatement">tail</span> <span class="synSpecial">-f</span> /var/log/squid3/access.log </pre> <h3>アクセスログをMac上に保存してsquidを終了する</h3> <p>※私はVagrantの共有フォルダを/vagrant_dataにしているので、Mac上に保存するために下記のようなスクリプトを作成</p> <pre class="code" data-lang="" data-unlink> #!/bin/sh sudo docker exec -it squid cat /var/log/squid3/access.log &gt; /vagrant_data/squid/squid3_access.log sudo docker stop squid </pre> <h2>アクセスログから動画のURLを抽出する</h2> <p>動画はmp4のみとするとこんな感じ。</p> <pre class="code" data-lang="" data-unlink> $ cat squid3_access.log | grep mp4 | sed &#39;s/.*\(http.*\.mp4\).*/\1/g&#39; &gt;&gt; mp4_list.txt </pre> <h2>おわりに</h2> <p>悪用厳禁。</p> madachugakusei 子供のどんな瞬間も逃さない!常時録画!全て無料保存! hatenablog://entry/10328749687194093727 2016-11-12T21:39:03+09:00 2016-11-12T21:39:03+09:00 子供のどんな瞬間も逃さない!常時録画!全て無料保存! 背景 子供ができ、写真・動画を撮りまくっていますが、撮りたい瞬間が訪れてからカメラを回し始めると時すでに遅し、みたいなことがよくあります。 特に初めて寝返り、初めてハイハイ‥と記録しておきたい"初めて"が多々あります。 そこで、常に動画を撮影することにしました。 実現方法 余っているスマホ(Android)を使用します。 使用するアプリ ドライブレコーダーアプリ「カルー(CaroO)」 動画無制限保存アプリ「Googleフォト」 あると良い機材 三脚 モバイルバッテリー 動画を撮影し続けて困るのが保存場所。 しかし、Googlフォトは15分… <h1>子供のどんな瞬間も逃さない!常時録画!全て無料保存!</h1> <h2>背景</h2> <p>子供ができ、写真・動画を撮りまくっていますが、撮りたい瞬間が訪れてからカメラを回し始めると時すでに遅し、みたいなことがよくあります。</p> <p>特に初めて寝返り、初めてハイハイ‥と記録しておきたい"初めて"が多々あります。</p> <p>そこで、常に動画を撮影することにしました。</p> <h2>実現方法</h2> <p>余っているスマホ(Android)を使用します。</p> <ul> <li>使用するアプリ <ul> <li>ドライブレコーダーアプリ「カルー(CaroO)」</li> <li>動画無制限保存アプリ「Googleフォト」</li> </ul> </li> <li>あると良い機材 <ul> <li>三脚</li> <li>モバイルバッテリー</li> </ul> </li> </ul> <p>動画を撮影し続けて困るのが保存場所。 しかし、Googlフォトは15分以内の動画なら無制限に保存可能です。 しかも、いい感じに編集したショートムービーも作ってくれちゃいます。</p> <p>動画を撮影し続けると15分なんてすぐに越えてしまします。 ここでありがたいのが「カルー(CaroO)」というドライブレコーダーアプリ。 こちらは5分毎に動画を区切って保存してくれます。 もちろんアプリの目的はドライブレコーダーです。 GPSが常時働きバッテリーバカ食いです。 常に充電が必須ですが、コンセントが遠ければモバイルバッテリーが必要です。</p> <h3>カルー(CaroO)</h3> <p><a href='https://play.google.com/store/apps/details?id=com.pokevian.skids&hl=ja&utm_source=global_co&utm_medium=prtnr&utm_content=Mar2515&utm_campaign=PartBadge&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Google Play で手に入れよう' src='https://play.google.com/intl/en_us/badges/images/generic/ja_badge_web_generic.png'/></a></p> <h3>Googleフォト</h3> <p><a href='https://play.google.com/store/apps/details?id=com.google.android.apps.photos&hl=ja&utm_source=global_co&utm_medium=prtnr&utm_content=Mar2515&utm_campaign=PartBadge&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Google Play で手に入れよう' src='https://play.google.com/intl/en_us/badges/images/generic/ja_badge_web_generic.png'/></a></p> <h3>三脚</h3> <p><a href="http://d.hatena.ne.jp/asin/B01D9MVL9E/devilsuke-22" class="asin"><img src="http://ecx.images-amazon.com/images/I/41YOxIkTAnL.jpg" alt="クネクネ三脚 フレキシブル ミニ三脚 +スマホホルダー 小型・軽量 卓上三脚 トライポッド カメラ ハンドル グリップ /スマートフォン・デジカメ・ビデオ・アクションカメラ/ 写真・動画・タイムラプス 撮影 など (レッド)" title="クネクネ三脚 フレキシブル ミニ三脚 +スマホホルダー 小型・軽量 卓上三脚 トライポッド カメラ ハンドル グリップ /スマートフォン・デジカメ・ビデオ・アクションカメラ/ 写真・動画・タイムラプス 撮影 など (レッド)" class="asin"></a></p> <h3>モバイルバッテリー</h3> <p><a href="http://d.hatena.ne.jp/asin/B019GNUT0C/devilsuke-22" class="asin"><img src="http://ecx.images-amazon.com/images/I/317AHEqiswL.jpg" alt="Anker PowerCore 10000 (10000mAh 最小最軽量 大容量 モバイルバッテリー) iPhone&Android対応 *2016年8月末時点 A1263011" title="Anker PowerCore 10000 (10000mAh 最小最軽量 大容量 モバイルバッテリー) iPhone&Android対応 *2016年8月末時点 A1263011" class="asin"></a></p> <h2>カルー(CaroO)の設定</h2> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20161112/20161112212459.png" alt="f:id:madachugakusei:20161112212459p:plain" title="f:id:madachugakusei:20161112212459p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↑設定ボタンから設定へ</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20161112/20161112212505.png" alt="f:id:madachugakusei:20161112212505p:plain" title="f:id:madachugakusei:20161112212505p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↑ドライブレコーダー設定の常時録画映像の長さが、1ファイルあたりの動画の長さ。 5分にすると5分ごとに動画ファイルを区切って保存してくれます。</p> <p>ドライブレコーダーなので、衝撃を検知して動画を保存する設定などがあるので、わからない項目は無視で大丈夫かと思います。</p> <h2>動画の保存</h2> <p>Googleフォトは特に難しい設定はないと思いますので割愛。</p> <p>カルー(CaroO)はスマホ本体に動画を保存するので、Googleフォトへアップロードしたら端末の動画は削除してしまいましょう。<br/> ※Googleフォトの「空き容量を増やす」という機能を使えば、アップロード済みの動画を削除できます。</p> <h2>おわりに</h2> <p>可愛い我が子の大切な瞬間を逃さない人が一人でも増えますように!</p> <hr /> <p>以上。</p> madachugakusei ffmpegでアニメーションWebPを作るコマンドオプションメモ[倍速][fps][解像度] hatenablog://entry/10328749687188459289 2016-10-08T22:59:50+09:00 2016-10-08T22:59:50+09:00 ffmpegでアニメーションWebPが作れるようになった。 動画のようなWebPよりも、パラパラ漫画風のWebPが作りたかったため、再生速度や解像度を指定できるようなコマンドオプションを調べたのでメモ。 ffmpeg.exe -i {INPUT} -vcodec libwebp -lossless 0 -qscale 90 -preset default -loop 0 -vf fps=15,setpts=PTS/2.0,scale=-1:480 -an {OUTPUT.webp} vcodec 動画のコーデック: アニメーションWebPなので「libwebp」固定 lossless 可逆/不… <p>ffmpegでアニメーションWebPが作れるようになった。 動画のようなWebPよりも、パラパラ漫画風のWebPが作りたかったため、再生速度や解像度を指定できるようなコマンドオプションを調べたのでメモ。</p> <pre class="code" data-lang="" data-unlink>ffmpeg.exe -i {INPUT} -vcodec libwebp -lossless 0 -qscale 90 -preset default -loop 0 -vf fps=15,setpts=PTS/2.0,scale=-1:480 -an {OUTPUT.webp}</pre> <ul> <li>vcodec <ul> <li>動画のコーデック: アニメーションWebPなので「libwebp」固定</li> </ul> </li> <li>lossless <ul> <li>可逆/不可逆: 0は不可逆</li> </ul> </li> <li>qscale <ul> <li>品質: 0~100</li> </ul> </li> <li>preset <ul> <li>none <ul> <li>プリセットを使わない</li> </ul> </li> <li>default <ul> <li>自動指定</li> </ul> </li> <li>picture <ul> <li>人物写真</li> </ul> </li> <li>photo <ul> <li>風景写真</li> </ul> </li> <li>drawing <ul> <li>線画など</li> </ul> </li> <li>icon <ul> <li>小さなサイズで色彩豊富</li> </ul> </li> <li>text <ul> <li>文字が中心</li> </ul> </li> </ul> </li> <li>loop <ul> <li>繰り返し数</li> </ul> </li> <li>vf <ul> <li>fps <ul> <li>フレームレート</li> </ul> </li> <li>setpts <ul> <li>倍速: PTS/2.0なら2.0倍速</li> </ul> </li> <li>scale <ul> <li>解像度: -1:480なら縦480pxで縦横比維持</li> </ul> </li> </ul> </li> <li>an <ul> <li>音声なし</li> </ul> </li> </ul> <hr /> <p>参考リンク</p> <p><a href="http://nico-lab.net/create_animated_webp_with_ffmpeg/">ffmpeg &#x3067; &#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;WebP&#xFF08;Animated WebP&#xFF09;&#x3092;&#x4F5C;&#x308B; | &#x30CB;&#x30B3;&#x30E9;&#x30DC;</a></p> <p><a href="http://fftest33.blog.fc2.com/blog-entry-36.html">ffmpeg&#x3092;&#x4F7F;&#x3063;&#x3066;&#x52D5;&#x753B;&#x306E;&#x518D;&#x751F;&#x901F;&#x5EA6;&#x3092;&#x5909;&#x3048;&#x3066;&#x307F;&#x308B; - &#x8133;&#x5185;&#x30E1;&#x30E2;&#xFF0B;&#xFF0B;</a></p> <p><a href="http://looooooooop.blog35.fc2.com/blog-entry-1014.html">&#x3010;ffmpeg&#x3011;&#x500D;&#x901F;&#x518D;&#x751F;&#x3067;&#x304D;&#x308B;&#x52D5;&#x753B;&#x306B;&#x30A8;&#x30F3;&#x30B3;&#x30FC;&#x30C9;&#x3059;&#x308B; : &#x30CB;&#x30B3;&#x30CB;&#x30B3;&#x52D5;&#x753B;&#x7814;&#x7A76;&#x6240;</a></p> <hr /> <p>以上</p> madachugakusei WindowsでアニメーションWebPを作成する hatenablog://entry/10328749687186958111 2016-09-30T07:00:00+09:00 2016-09-30T07:00:59+09:00 WindowsでアニメーションWebPを作成する はじめに Googleが定めた画像フォーマット「WebP」のアニメーション版をWindowsで作成する方法のメモ。 コマンドの使い方自体はMacでもLinuxでも同じはず。 公式ライブラリのダウンロード 下記の記事にまとめてある。 madachugakusei.hatenablog.com ライブラリ 解凍したらbinフォルダの中に必要な実行ファイルが入っている。 アニメーションWebPを作成するファイルは「webpmux.exe」 変換してみる binフォルダの中に変換したい画像を入れる。 Shiftキー押しながら右クリック→「コマンドウィン… <h1>WindowsでアニメーションWebPを作成する</h1> <h2>はじめに</h2> <p>Googleが定めた画像フォーマット「WebP」のアニメーション版をWindowsで作成する方法のメモ。</p> <p>コマンドの使い方自体はMacでもLinuxでも同じはず。</p> <h2>公式ライブラリのダウンロード</h2> <p>下記の記事にまとめてある。</p> <p><iframe src="http://madachugakusei.hatenablog.com/embed/2016/09/29/234338" title="WindowsでWebP画像を作る - まだ中学生のブログ" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://madachugakusei.hatenablog.com/entry/2016/09/29/234338">madachugakusei.hatenablog.com</a></cite></p> <h2>ライブラリ</h2> <p>解凍したらbinフォルダの中に必要な実行ファイルが入っている。</p> <p>アニメーションWebPを作成するファイルは「webpmux.exe」</p> <h2>変換してみる</h2> <p>binフォルダの中に変換したい画像を入れる。</p> <p>Shiftキー押しながら右クリック→「コマンドウィンドウをここで開く」でコマンドプロンプトを立ち上げて、次のように使う。</p> <p>使い方</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ webpmux.exe <span class="synSpecial">-frame</span> FRAME_OPTIONS <span class="synStatement">[</span> -frame ... <span class="synStatement">]</span> <span class="synStatement">[</span> -loop LOOP_COUNT <span class="synStatement">]</span> <span class="synStatement">[</span> -bgcolor BACKGROUND_COLOR <span class="synStatement">]</span> <span class="synSpecial">-o</span> OUTPUT </pre> <p>例</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ webpmux.exe <span class="synSpecial">-frame</span> 1.webp <span class="synSpecial">+500</span>+<span class="synConstant">0</span>+<span class="synConstant">0</span>+<span class="synConstant">0</span>+b <span class="synSpecial">-frame</span> 2.webp <span class="synSpecial">+500</span>+<span class="synConstant">256</span>+<span class="synConstant">0</span>+<span class="synConstant">0</span>+b <span class="synSpecial">-frame</span> 3.webp <span class="synSpecial">+500</span>+<span class="synConstant">0</span>+<span class="synConstant">256</span>+<span class="synConstant">0</span>+b <span class="synSpecial">-loop</span> <span class="synConstant">0</span> <span class="synSpecial">-bgcolor</span> <span class="synConstant">255</span>,<span class="synConstant">255</span>,<span class="synConstant">255</span>,<span class="synConstant">255</span> <span class="synSpecial">-o</span> anim_container.webp </pre> <h3>frameパラメータ</h3> <p>-frameパラメータでアニメーションの1コマとなる画像を指定する。 画像フォーマットは<strong>アニメーションでないWebP画像</strong>とする。</p> <p>2枚の画像をアニメーションする場合は、-frameを2つ指定する。 上記例の場合は3枚の画像をアニメーションさせている。</p> <h3>FRAME_OPTIONS</h3> <p>FRAME_OPTIONSは少々ややこしい。</p> <p>フォーマットとしては、</p> <pre class="code" data-lang="" data-unlink>+x+y+m+b</pre> <ul> <li>x <ul> <li>指定した画像をx軸方向へオフセットするピクセル(左右の方向で右がプラス)</li> <li>+100+0+0+b → 右に100ピクセルオフセットする</li> <li>デフォルトは0</li> </ul> </li> <li>y <ul> <li>指定した画像をx軸方向へオフセットするピクセル(上下の方向で下がプラス)</li> <li>+0+100+0+b → 下に100ピクセルオフセットする</li> <li>デフォルトは0</li> </ul> </li> <li>m <ul> <li>指定した画像をどう破棄するか <ul> <li>0: そのまま残す</li> <li>1: 破棄する</li> </ul> </li> <li>例1) +0+0+0+b → この画像を残したまま次の画像を表示する</li> <li>例2) +0+0+1+b → この画像を破棄して次の画像を表示する</li> <li>0の"そのまま残す"を指定しても、次に表示する画像が透過画像でないと意味がないので注意。</li> <li>デフォルトは0</li> </ul> </li> <li>b <ul> <li>指定した画像をブレンドするか(私が理解できていない、挙動がよくわからなかった) <ul> <li>+b: ブレンドする</li> <li>-b: ブレンドしない</li> </ul> </li> <li>例1) +0+0+0+b → この画像をブレンドする</li> <li>例2) +0+0+0-b → この画像をブレンドしない</li> <li>デフォルトは「+b」</li> </ul> </li> </ul> <p>x、y、m、bは省略可能だが、省略したパラメータ以降のパラメータ全てを省略すること。<br/> →yを省略するならmもbも省略すること。</p> <p>オプションについて公式サイトは<a href="https://developers.google.com/speed/webp/docs/webpmux">ココ</a></p> <h2>結果の確認</h2> <p>出力されたWebPファイルはGoogle Chromeで再生できる。</p> <p>ダブルクリックでChromeが開かない場合はChromeへDrag &amp; Dropすると開ける。</p> <hr /> <p>以上。</p> madachugakusei WindowsでWebP画像を作る hatenablog://entry/10328749687186921573 2016-09-29T23:43:38+09:00 2016-09-29T23:53:29+09:00 WindowsでWebP画像を作る はじめに Googleが定めた画像フォーマット「WebP」をWindowsで作成する方法をメモ。 PNGやJPEGからWebPへ変換する。 コマンドの使い方自体はMacでもLinuxでも同じはず。 公式ライブラリのダウンロード Precompiled Utilities | WebP | Google Developers 上記ページのの「downloads repository.」にバイナリがあるので、使っているOS用のファイルをダウンロードする。 OSによってファイルの末尾に次の文字列が入っている。 最もバージョンが最新のものをダウンロードする。 32b… <h1>WindowsでWebP画像を作る</h1> <h2>はじめに</h2> <p>Googleが定めた画像フォーマット「WebP」をWindowsで作成する方法をメモ。</p> <p>PNGやJPEGからWebPへ変換する。</p> <p>コマンドの使い方自体はMacでもLinuxでも同じはず。</p> <h2>公式ライブラリのダウンロード</h2> <p><a href="https://developers.google.com/speed/webp/docs/precompiled">Precompiled Utilities  |  WebP  |  Google Developers</a></p> <p>上記ページのの「downloads repository.」にバイナリがあるので、使っているOS用のファイルをダウンロードする。 OSによってファイルの末尾に次の文字列が入っている。 最もバージョンが最新のものをダウンロードする。</p> <ul> <li>32bit <ul> <li>windows-x86.zip</li> </ul> </li> <li>64bit <ul> <li>windows-x64.zip</li> </ul> </li> </ul> <p>2016-09-29時点最新版は「libwebp-0.5.1-windows-x64.zip 」であった。</p> <h2>ライブラリ</h2> <p>解凍したらbinフォルダの中に必要な実行ファイルが入っている。</p> <p>PNGやJPEGからWebPへ変換するファイルは「cwebp.exe」</p> <h2>変換してみる</h2> <p>binフォルダの中に変換したい画像を入れる。</p> <p>Shiftキー押しながら右クリック→「コマンドウィンドウをここで開く」でコマンドプロンプトを立ち上げて、次のように使う。</p> <p>使い方</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ cwebp.exe <span class="synStatement">[</span>options<span class="synStatement">]</span> input_file <span class="synSpecial">-o</span> output_file.webp </pre> <p>例</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ cwebp.exe <span class="synSpecial">-resize</span> <span class="synConstant">2208</span> <span class="synConstant">0</span> <span class="synSpecial">-q</span> <span class="synConstant">100</span> input.png <span class="synSpecial">-o</span> output.webp </pre> <p>オプションについては<a href="https://developers.google.com/speed/webp/docs/cwebp">公式</a>がわかりやすい。</p> <h2>結果の確認</h2> <p>出力されたWebPファイルはGoogle Chromeで再生できる。</p> <p>ダブルクリックでChromeが開かない場合はChromeへDrag &amp; Dropすると開ける。</p> <hr /> <p>以上。</p> madachugakusei 【C#】【.NET】SQLiteのDBファイルのハンドルを掴んだままとなる hatenablog://entry/10328749687180425776 2016-09-07T09:35:03+09:00 2016-09-07T09:35:42+09:00 はじめに C#でSQLiteを使用していたらハマったのでメモ。 SQLiteはSystem.Data.SQLiteを使用。 NuGet Gallery | System.Data.SQLite (x86/x64) 1.0.102 事象 SQLのコネクションをクローズしてもデータベースファイルのハンドルを掴んだままとなる。 事象詳細 using System; using System.Data.Linq; using System.Data.Linq.Mapping; using System.Data.SQLite; namespace ConsoleApplication1 { class… <h2>はじめに</h2> <p>C#でSQLiteを使用していたらハマったのでメモ。</p> <p>SQLiteはSystem.Data.SQLiteを使用。</p> <p><a href="https://www.nuget.org/packages/System.Data.SQLite">NuGet Gallery | System.Data.SQLite (x86/x64) 1.0.102</a></p> <h2>事象</h2> <p>SQLのコネクションをクローズしてもデータベースファイルのハンドルを掴んだままとなる。</p> <h2>事象詳細</h2> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160823/20160823093518.png" alt="f:id:madachugakusei:20160823093518p:plain" title="f:id:madachugakusei:20160823093518p:plain" class="hatena-fotolife" itemprop="image"></span></p> <pre class="code lang-cpp" data-lang="cpp" data-unlink><span class="synStatement">using</span> System; <span class="synStatement">using</span> System.Data.Linq; <span class="synStatement">using</span> System.Data.Linq.Mapping; <span class="synStatement">using</span> System.Data.SQLite; <span class="synType">namespace</span> ConsoleApplication1 { <span class="synType">class</span> Program { <span class="synStatement">private</span> <span class="synType">const</span> String DB_PATH = @<span class="synConstant">&quot;C:</span><span class="synSpecial">\U</span><span class="synConstant">sers</span><span class="synSpecial">\{</span><span class="synConstant">ユーザー名}</span><span class="synSpecial">\D</span><span class="synConstant">ocuments</span><span class="synSpecial">\V</span><span class="synConstant">isual Studio 2015</span><span class="synSpecial">\P</span><span class="synConstant">rojects</span><span class="synSpecial">\C</span><span class="synConstant">onsoleApplication1</span><span class="synSpecial">\c</span><span class="synConstant">ompany.db&quot;</span>; <span class="synType">static</span> <span class="synType">void</span> Main(string[] args) { InsertTable(); Console.WriteLine(<span class="synConstant">&quot;この時点でDBファイルのハンドルを掴んだまま&quot;</span>); } <span class="synType">static</span> <span class="synType">void</span> InsertTable() { SQLiteConnectionStringBuilder connectionBuilder = <span class="synStatement">new</span> SQLiteConnectionStringBuilder { DataSource = DB_PATH, }; SQLiteConnection connection = <span class="synStatement">new</span> SQLiteConnection(connectionBuilder.ToString()); connection.Open(); <span class="synStatement">using</span> (DataContext context = <span class="synStatement">new</span> DataContext(connection)) { Table&lt;Company&gt; table = context.GetTable&lt;Company&gt;(); table.InsertOnSubmit(<span class="synStatement">new</span> Company() { companyId = <span class="synConstant">0</span>, companyName = <span class="synConstant">&quot;Google&quot;</span>, }); context.SubmitChanges(); } connection.Clone(); } } [Table(Name = <span class="synConstant">&quot;company&quot;</span>)] <span class="synStatement">public</span> <span class="synType">class</span> Company { [Column(Name = <span class="synConstant">&quot;company_id&quot;</span>, DbType = <span class="synConstant">&quot;INT&quot;</span>, CanBeNull = <span class="synConstant">false</span>, IsPrimaryKey = <span class="synConstant">true</span>)] <span class="synStatement">public</span> Int32 companyId { get; set; } [Column(Name = <span class="synConstant">&quot;company_name&quot;</span>, DbType = <span class="synConstant">&quot;NVARCHAR&quot;</span>, CanBeNull = <span class="synConstant">false</span>, UpdateCheck = UpdateCheck.Never)] <span class="synStatement">public</span> String companyName { get; set; } } } </pre> <h2>問題点</h2> <p>テスト実施時に、初期化でDBファイルを作成して、終了処理でDBファイルを消したいのに消せない。</p> <h2>結論</h2> <p>解決策なし、上記のことを実現したいなら、DBファイルの中身のテーブルをDropするなどで対応する。</p> <h2>考察</h2> <p>解決策なしに至った確固たる根拠はありません。 チーム内で問題提起しても解決策が見つからず、DBの本質を考えるとファイルを削除できる必要がなく、中身のDropをするべきなのではないか、となった。</p> madachugakusei EaseUS Todo Backup Workstation 9.2レビュー【NASにシステムバックアップ】 hatenablog://entry/10328749687179098202 2016-08-14T22:22:34+09:00 2017-10-10T21:11:14+09:00 本エントリーについて Windows用バックアップ&復元ソフト「EaseUS Todo Backup Workstation 9.2」のレビューです。 本ソフトは有料版ですが、無料版もあります。 有料版も30日間のお試しができます。 有料版 EaseUS Todo Backup Workstation 9.2 4980円(税抜き) 無料版 EaseUS Todo Backup Free 9.2 ※バージョンはこの記事をエントリーした当時のものになります。 今回は、本ソフトを使用して、 システムバックアップ→PC初期化→復元 を試してみました。 もちろん正常に動作しました。 EaseUS Tod… <h2>本エントリーについて</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>用バックアップ&復元ソフト「EaseUS Todo Backup Workstation 9.2」のレビューです。 本ソフトは有料版ですが、無料版もあります。 有料版も30日間のお試しができます。</p> <ul> <li>有料版 <ul> <li><a href="https://jp.easeus.com/backup-software/workstation.html">EaseUS Todo Backup Workstation 9.2</a></li> <li>4980円(税抜き)</li> </ul> </li> <li>無料版 <ul> <li><a href="https://jp.easeus.com/backup-software/free.html">EaseUS Todo Backup Free 9.2</a></li> </ul> </li> </ul> <p>※バージョンはこの記事をエントリーした当時のものになります。</p> <p>今回は、本ソフトを使用して、<br/> システムバックアップ→PC初期化→復元<br/> を試してみました。</p> <p>もちろん正常に動作しました。</p> <h2>EaseUS Todo Backup Workstation 9.2の主な機能</h2> <p>※公式サイト引用</p> <ul> <li>システムバックアップ <ul> <li>アプリケーション、設定、OSを含むシステム全体をバックアップ</li> </ul> </li> <li>ディスクイメージバックアップ <ul> <li>ディスク、ボリューム全体をブロック単位で効率的にイメージバックアップ</li> </ul> </li> <li>ファイルバックアップ <ul> <li>ネットワークの共有ファイルを含み、特定のファイル、フォルダ、或いはファイルの種類をファイルごとにバックアップ</li> </ul> </li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Outlook">Outlook</a>のバックアップ <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Outlook">Outlook</a> 2003/2007/2010/2013/2016、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Outlook%20Express">Outlook Express</a>のすべてのEメールを安全にバックアップ</li> </ul> </li> <li>多種類のバックアップに対応 <ul> <li>完全バックアップ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BA%B9%CA%AC%A5%D0%A5%C3%A5%AF%A5%A2%A5%C3%A5%D7">差分バックアップ</a>、増分バックアップ、自動バックアップに対応</li> </ul> </li> <li>多彩な記憶装置までバックアップ <ul> <li>HDD、外部記憶装置、テープ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/FTP">FTP</a> Server、<span style="color: #ff0000">ネットワークの共有場所</span>、<span style="color: #ff0000"><a class="keyword" href="http://d.hatena.ne.jp/keyword/NAS">NAS</a></span>、DVD、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>までバックアップファイルを保存</li> </ul> </li> </ul> <h2>使い方の例</h2> <ul> <li>定期的にバックアップしておいて、PCがおかしくなったら復元する</li> <li>何かソフトをインストールする前にバックアップしておき、インストール後問題が発生したら復元する <ul> <li>スナップショットとしての使い方</li> </ul> </li> </ul> <h2>試し<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%BF%A4%B3">たこ</a>と</h2> <ul> <li>FreeNASで構築したネットワークドライブへシステムをバックアップ</li> <li>OSの標準機能でPCを初期化</li> <li>復元</li> </ul> <p>ちなみに私は<a class="keyword" href="http://d.hatena.ne.jp/keyword/VAIO">VAIO</a>のPCを使用していますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows7">Windows7</a>からWindows10アップグレードしました。 余計なソフトも多いため初期化したかったのですが、できずにいる理由がありました。</p> <p>バッテリー保護ソフトがビルトインされており、ACアダプターを接続したままでも50%で充電を止めてくれる機能があります。 これを活用したいがためにPC初期化ができなかったのです。</p> <h3>FreeNASで構築したネットワークドライブへシステムをバックアップ</h3> <p>↓起動画面</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814213106.png" alt="f:id:madachugakusei:20160814213106p:plain" title="f:id:madachugakusei:20160814213106p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>「新しいタスク」でバックアップします。</p> <p>↓ターゲットの参照ボタンで保存先を指定します。(既にネットワーク上が指定されていますが、キャプチャの都合です。)</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814213115.png" alt="f:id:madachugakusei:20160814213115p:plain" title="f:id:madachugakusei:20160814213115p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>ちなみに、ネットワーク→WORKGROUP→XXXXX-PC、と展開するのがすごく遅いです。 このソフト唯一の欠点だと思います。</p> <p>↓参照ボタンを押して出てくるダイアログ</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814213356.png" alt="f:id:madachugakusei:20160814213356p:plain" title="f:id:madachugakusei:20160814213356p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↑ネットワークというカテゴリにネットワークドライブが出てきますが、あえて<a class="keyword" href="http://d.hatena.ne.jp/keyword/NAS">NAS</a>デ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>を登録します。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/NAS">NAS</a>デ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>をクリックします。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814213129.png" alt="f:id:madachugakusei:20160814213129p:plain" title="f:id:madachugakusei:20160814213129p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↑<a class="keyword" href="http://d.hatena.ne.jp/keyword/NAS">NAS</a>デ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>登録画面</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814213136.png" alt="f:id:madachugakusei:20160814213136p:plain" title="f:id:madachugakusei:20160814213136p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↑ネットワークドライブを登録します。 名前は何でも良いです。</p> <p>匿名接続可なのはセキュリティ上よろしくありませんが、今回の本質でないのでスルーで。</p> <p>ちなみにネットワークドライブは、FreeNASで構築していますが、cifs<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%C8%A5%B3%A5%EB">プロトコル</a>SambaのVersion 3.0です。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814213142.png" alt="f:id:madachugakusei:20160814213142p:plain" title="f:id:madachugakusei:20160814213142p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↑システムバックアップの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%A7%A5%C3%A5%AF%A5%DC%A5%C3%A5%AF%A5%B9">チェックボックス</a>にチェックを入れると自動的にディスク全体も選択されグレーアウトします。 あとは実行ボタンを押すだけ。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814213242.png" alt="f:id:madachugakusei:20160814213242p:plain" title="f:id:madachugakusei:20160814213242p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↑バックアップ中の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF">トラフィック</a>状況。</p> <p>ガンガン書き込んでいるのがわかります。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%B5%C0%FELAN">無線LAN</a>では到底処理しきれないので有線環境です。</p> <p>↓90GB使用中のシステムを対象としましたが、できあがったバックアップファイルは53GBでした。 圧縮率は標準の設定ですが、かなり圧縮してくれているようです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814214921.png" alt="f:id:madachugakusei:20160814214921p:plain" title="f:id:madachugakusei:20160814214921p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h3>OSの標準機能でPCを初期化</h3> <p>Windows10はOSの標準機能で初期化ができます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814213816.png" alt="f:id:madachugakusei:20160814213816p:plain" title="f:id:madachugakusei:20160814213816p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h3>復元</h3> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814213248.png" alt="f:id:madachugakusei:20160814213248p:plain" title="f:id:madachugakusei:20160814213248p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↑トップ画面の「復元」「システム移行」どちらからでも良いですが、「システム移行」にチェックして実行します。</p> <p>システム領域まで書き込むため、もちろん再起動し、EaseUSのOS(?)が立ち上がります。 あとは待つだけす。</p> <p>おそよ30分程度で復元が完了しました。</p> <p>ちなみに、システム移行機能を使用するには、「ブータブルディスクの作成」を済ませる必要があります。 ソフトの初回起動時に作成するか聞かれますが、作成していない場合は、「ツール」の「ブータブルディスクの作成」から作成しておきましょう。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160814/20160814220020.png" alt="f:id:madachugakusei:20160814220020p:plain" title="f:id:madachugakusei:20160814220020p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>ブータブルディスクは作成する必要があるものの、復元する際に必要というわけではありません。</p> <p>恐らく、復元中に何か問題が発生してOSが起動しなくなったときに使ってねってことなんだと思います。</p> <h2>使ってみた感想</h2> <p>OSのスナップショットが気軽に撮れて、OSを特定のバージョンに気軽に切り替えることができるのはとても素晴らしいです。</p> <p>しかも<a class="keyword" href="http://d.hatena.ne.jp/keyword/NAS">NAS</a>に保存できるので、容量気にせず保存ができます。</p> <p>特に私はシステムが汚れるのが嫌で、頻繁にPCの初期化をするので、とても重宝しています。</p> <hr /> <p>以上</p> madachugakusei はてなブログの投稿時に自動でping送信する hatenablog://entry/6653812171394948361 2016-05-08T16:41:00+09:00 2016-05-08T18:45:16+09:00 概要 はてなブログの投稿を外部のブログランキングへpingする方法を紹介します。 IFTTTを使用します。 ITの知識は不要です。 ブログのping機能 ブログの集客のためにブログランキングを活用している方も多いと思います。 例) 人気ブログランキング にほんブログ村 ブログを投稿したら、このようなサイトに更新通知を送ることで、新着ブログとして表示してもらえます。 その更新通知を送るのがpingです。 しかしはてなブログにはその機能がありません。 人気ブログでない限り集客が期待できるのは新着ブログからのみ。 pingを送れないのは痛いです。 はてなブログでpingする 使用するサービス トリガ… <h3>概要</h3> <p>はてなブログの投稿を外部のブログランキングへpingする方法を紹介します。</p> <p>IFTTTを使用します。 ITの知識は不要です。</p> <h3>ブログのping機能</h3> <p>ブログの集客のためにブログランキングを活用している方も多いと思います。</p> <p>例)</p> <ul> <li><a href="http://blog.with2.net">人気ブログランキング</a></li> <li><a href="http://www.blogmura.com">にほんブログ村</a></li> </ul> <p>ブログを投稿したら、このようなサイトに更新通知を送ることで、新着ブログとして表示してもらえます。</p> <p>その更新通知を送るのがpingです。</p> <p>しかしはてなブログにはその機能がありません。</p> <p>人気ブログでない限り集客が期待できるのは新着ブログからのみ。 pingを送れないのは痛いです。</p> <h3>はてなブログでpingする</h3> <p><strong>使用するサービス</strong></p> <ul> <li>トリガー <ul> <li>Feed</li> </ul> </li> <li>アクション <ul> <li>Maker</li> </ul> </li> </ul> <p><strong>手順</strong></p> <ol> <li>はてなブログの更新をトリガーにMakerに通知する</li> <li>Makerでブログサービスのping URLにアクセスする</li> </ol> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160508/20160508135942.png" alt="f:id:madachugakusei:20160508135942p:plain" title="f:id:madachugakusei:20160508135942p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h3>トリガーを設定する</h3> <p>if XXX then YYYのXXX部分を設定します。 使用するサービスはFeedです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160508/20160508155649.png" alt="f:id:madachugakusei:20160508155649p:plain" title="f:id:madachugakusei:20160508155649p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>はてなブログのRSSは「ブログのトップページ/rss」です。 上記画像は私の姉妹ブログ <a href="http://tsuma-mama.hatenablog.com">妻ママブログ</a>ですが、 「<a href="http://tsuma-mama.hatenablog.com/rss">http://tsuma-mama.hatenablog.com/rss</a>」としています。</p> <h3>アクションを設定する</h3> <p>if XXX then YYYのYYY部分を設定します。 使用するサービスはMakerです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160508/20160508163507.png" alt="f:id:madachugakusei:20160508163507p:plain" title="f:id:madachugakusei:20160508163507p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>URLはpingの送信先のURLにします。 メソッドはGETにします。 書くブログランキングのping送信先の確認ページは次の通り。</p> <ul> <li>人気ブログランキング <ul> <li><a href="http://blog.with2.net/mypage/?m=ping">http://blog.with2.net/mypage/?m=ping</a></li> </ul> </li> <li>ブログ村 <ul> <li><a href="http://mypage.blogmura.com/send_ping">http://mypage.blogmura.com/send_ping</a></li> </ul> </li> </ul> madachugakusei ownCloudで保存先をNAS上にする hatenablog://entry/10328537792366939037 2016-04-10T22:04:32+09:00 2016-04-10T22:05:04+09:00 はじめに Dropboxの容量が足りなくなってきました。 容量を占めているのはカメラアップロードによる動画でした。 ついでにストレスを感じていたのは、アップロードの時間がかかることです。 動画のサイズが大きいからだけではなく、そもそもアップロードの速度が出ないのです。 Dropboxのサーバーが混んでいるのだと思います。 そこで代替ツールを検討しました。 欲しい機能 ファイルの同期機能 例) PC1で削除すればPC2でも削除される 自分のストレージが使える機能 我が家にはRAID5のNASがあるので活用したい この時点でオープンソースを検討しました。 候補にあがったのは一つだったので、「own… <h3>はじめに</h3> <p>Dropboxの容量が足りなくなってきました。 容量を占めているのはカメラアップロードによる動画でした。</p> <p>ついでにストレスを感じていたのは、アップロードの時間がかかることです。 動画のサイズが大きいからだけではなく、そもそもアップロードの速度が出ないのです。 Dropboxのサーバーが混んでいるのだと思います。</p> <p>そこで代替ツールを検討しました。</p> <h3>欲しい機能</h3> <ul> <li>ファイルの同期機能 <ul> <li>例) PC1で削除すればPC2でも削除される</li> </ul> </li> <li>自分のストレージが使える機能 <ul> <li>我が家にはRAID5のNASがあるので活用したい</li> </ul> </li> </ul> <p>この時点でオープンソースを検討しました。</p> <p>候補にあがったのは一つだったので、「ownCloud」を導入することにしました。</p> <p>本エントリーでは次の項目について紹介します。</p> <ul> <li>ownCloudのインストール</li> <li>ownCloudのセットアップ</li> <li>ownCloudの保存先を同一ネットワーク内のNAS上のストレージにする</li> <li>おまけ <ul> <li>Androidアプリの作成</li> </ul> </li> </ul> <p>環境は、UbuntuにownCloudにインストールし、NASはFreeNASでCIFS(Samba)でネットワークドライブを提供しています。</p> <h3>ownCloudのインストール</h3> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo apt-get <span class="synSpecial">-y</span> <span class="synStatement">install</span> mysql-server $ sudo apt-get <span class="synSpecial">-y</span> <span class="synStatement">install</span> php5 libapache2-mod-php5 php5-gd php5-curl php5-mysql $ sudo /etc/init.d/apache2 <span class="synStatement">restart</span> </pre> <h3>Webインストーラーの配置</h3> <p>公式サイトから<a href="https://owncloud.org/install/#instructions-server">Web Installer</a>をダウンロードしてきます。 setup-owncloud.phpというファイルです。</p> <p>これをApacheで公開している場所へコピーします。<br/> 私は「/var/www/html/setup-owncloud.php」へ配置しました。</p> <p>各種インストールはApacheが行うことになるので、Apacheへ書き込み権限を与えます。 今回は所有者をApacheへ変更しました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo chown <span class="synSpecial">-R</span> www-data:www-data /var/www/html/ </pre> <p>そしたらブラウザからアクセスします。</p> <p>http://{ホスト名}/setup-owncloud.php</p> <p>Ubuntu本体のブラウザからアクセスするのであれば、</p> <p><a href="http://127.0.0.1/setup-owncloud.php">http://127.0.0.1/setup-owncloud.php</a></p> <p>になります。</p> <p>あとは画面に従ってインストールを進めます。</p> <h3>ownCloudのセットアップ</h3> <h4>ドメインの許可</h4> <p>これをしないと別PCからのアクセスができませんでした。</p> <p>/var/www/html/owncloud/config/config.php</p> <pre class="code" data-lang="" data-unlink> &#39;trusted_domains&#39; =&gt; array ( $_SERVER[&#39;SERVER_NAME&#39;] ),</pre> <p><a href="https://github.com/wbrxcorp/walbrix/commit/27e8160dd879897ad68f5d7b3e083394141828da">↑の参考にしたページ</a></p> <h3>保存先をNASにする</h3> <p>まずはNAS上のドライブをownCloudが動作しているマシンでマウントします。 一般的なマウントだと次のようになります。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo mount <span class="synSpecial">-t</span> cifs <span class="synSpecial">-o</span> <span class="synIdentifier">guest,uid</span>=<span class="synIdentifier">1000,gid</span>=<span class="synIdentifier">1000,vers</span>=3.0 //192.168.1.10/share /mnt/share </pre> <p>これだとメインユーザーとしてマウントしています。 でもownCloudの権限はApachであるwww-dataがもつ必要があります。</p> <p>まずはwww-dataのuid、gidを調べます。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ cat /etc/passwd </pre> <p>uid = 33<br/> gid = 33</p> <p>であることがわかったので、これらのIDでマウントします。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo mount <span class="synSpecial">-t</span> cifs <span class="synSpecial">-o</span> <span class="synIdentifier">guest,uid</span>=<span class="synIdentifier">33,gid</span>=<span class="synIdentifier">33,vers</span>=3.0 //192.168.1.10/share /mnt/share </pre> <p>続いてownCloudの保存先をこのマウントした場所になるように設定します。 ownCloudのファイルの実体は</p> <p>/var/www/html/owncloud/data/{ユーザー名}/files</p> <p>に格納されています。</p> <p>ownCloud上のトップで「nas」というフォルダを作成すると、</p> <p>/var/www/html/owncloud/data/{ユーザー名}/files/nas</p> <p>というフォルダができます。</p> <p>そしたらこのフォルダを削除し、NAS上へシンボリックリンクを貼る、というのが、ownCloudで保存先をNAS上にする方法です。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ sudo <span class="synStatement">rm</span> <span class="synSpecial">-rf</span> nas $ sudo ln <span class="synSpecial">-s</span> /mnt/share /var/www/html/owncloud/data/<span class="synSpecial">{</span>ユーザー名<span class="synSpecial">}</span>/files/nas $ sudo chown <span class="synSpecial">-h</span> www-data:www-data nas </pre> <p>最後の行でシンボリックリンク自体の所有者をApacheへ変更します。</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fqiita.com%2Fosd%2Fitems%2F32cca86e006a77babaab" title="シンボリックリンク自体のオーナーを変えるにはchown -h オプション - Qiita" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://qiita.com/osd/items/32cca86e006a77babaab">qiita.com</a></cite></p> <h3>おまけ Androidアプリの作成</h3> <p>GitHubでソースが公開されているので、自分でビルドすれば無料でアプリがゲットできます。</p> <p><a href="https://github.com/owncloud/android">リポジトリ</a></p> <p><a href="https://github.com/owncloud/android/blob/master/SETUP.md">ビルド手順</a></p> <p>VirtualBox上のxubutuではエラーでビルドできず。</p> <p>Windowsで「3. Working in a terminal with Gradle」でビルド成功</p> <hr /> <p>以上</p> madachugakusei Fleksy + GIF Keyboardでスペースを入力する hatenablog://entry/6653586347154372400 2016-01-24T18:43:14+09:00 2021-02-12T14:55:07+09:00 Fleksy + GIF Keyboardとは 世界最速の文字入力アプリと言われ、タイプミスをして自動補正してくれるキーボードアプリです。 Fleksy + GIF Keyboard 開発元:Fleksy 無料 posted with アプリーチ この度、Android版が日本語に対応し、フリック入力がサポートされました。 その入力精度に関しては他サイトでも紹介されているのでここでは割愛します。 gigazine.net 入力方法がわからない 私がわからなかったこと。 スペース、いわゆる空白文字の打ち方 英語キーボードから日本語キーボードへ切り替える方法 他にも同じ疑問を持つ方がいるかもしれな… <h3>Fleksy + GIF Keyboardとは</h3> <p>世界最速の文字入力アプリと言われ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BF%A5%A4%A5%D7%A5%DF%A5%B9">タイプミス</a>をして自動補正してくれるキーボードアプリです。</p> <div id="appreach-box" style="text-align:left;"> <img id="appreach-image" src="https://cdn-ak2.f.st-hatena.com/images/fotolife/m/madachugakusei/20010328/20010328215250.png" alt="Fleksy + GIF Keyboard" style="float:left; margin:10px; width:25%; max-width:120px; border-radius:10%;"> <div class="appreach-info" style="margin: 10px;"> <div id="appreach-appname">Fleksy + GIF Keyboard</div> <div id="appreach-developer" style="font-size:80%; display:inline-block; _display:inline;"> 開発元:<a id="appreach-developerurl" href="https://play.google.com/store/apps/dev?id=5508843342761614275" target="_blank" rel="nofollow">Fleksy</a> </div> <div id="appreach-price" style="font-size:80%; display:inline-block; _display:inline;">無料</div> <div class="appreach-powered" style="font-size:80%; display:inline-block; _display:inline;"> posted with <a href="http://nabettu.github.io/appreach/" title="アプリーチ" target="_blank" rel="nofollow">アプリーチ</a> </div> <div class="appreach-links" style="float:left;"> <div id="appreach-itunes-link" style="display: inline-block; _display: inline;"></div> <div id="appreach-gplay-link" style="display:inline-block; _display:inline;"> <a id="appreach-gplay" href="https://play.google.com/store/apps/details?id=com.syntellia.fleksy.keyboard" target="_blank" rel="nofollow"> <img src="http://nabettu.github.io/appreach/img/gplay_en.png" style="height:40px;"> </a> </div> </div> </div> <div class="appreach-footer" style="margin-bottom:10px; clear: left;"></div> </div> <p>この度、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>版が日本語に対応し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A5%C3%A5%AF%C6%FE%CE%CF">フリック入力</a>がサポートされました。</p> <p>その入力精度に関しては他サイトでも紹介されているのでここでは割愛します。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fgigazine.net%2Fnews%2F20160121-fleksy-japanese%2F" title="ギネス級世界最速の文字入力アプリ「Fleksy」日本語版の提供がスタート" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://gigazine.net/news/20160121-fleksy-japanese/">gigazine.net</a></cite></p> <h3>入力方法がわからない</h3> <p>私がわからなかったこと。</p> <ul> <li>スペース、いわゆる空白文字の打ち方</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%D1%B8%EC%A5%AD%A1%BC%A5%DC%A1%BC%A5%C9">英語キーボード</a>から日本語キーボードへ切り替える方法</li> </ul> <p>他にも同じ疑問を持つ方がいるかもしれないのでメモを残します。</p> <h3>スペースの入力方法</h3> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160124/20160124175242.png" alt="f:id:madachugakusei:20160124175242p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>↑文字の入力が終わった状態。 この後にスペースを入力したい。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160124/20160124175252.png" alt="f:id:madachugakusei:20160124175252p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>↑ジェスチャエリアを右へスワイプします。</p> <p>「た・な・は」の背景が白っぽくなっているところが<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A5%A7%A5%B9%A5%C1%A5%E3%A1%BC">ジェスチャー</a>エリアなのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>に従って「た」のあたりからフリックすると文字入力となってしまって<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B8%A5%A7%A5%B9%A5%C1%A5%E3%A1%BC">ジェスチャー</a>が成功しません。上の図のように「は」の右側あたりからチョコっと右へスワイプするだけでジェスチャは認識されます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160124/20160124175304.png" alt="f:id:madachugakusei:20160124175304p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>↑句点が入力されました。 入力したいのはスペースです。 でも、これでオッケーです。 次がミソです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160124/20160124175317.png" alt="f:id:madachugakusei:20160124175317p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>ジェスチャエリアを上へスワイプします。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160124/20160124175328.png" alt="f:id:madachugakusei:20160124175328p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>↑句点がスペースへ変わりました!</p> <p>結論: <strong>句点の後に上へスワイプでスペースが入力ができる</strong></p> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%D1%B8%EC%A5%AD%A1%BC%A5%DC%A1%BC%A5%C9">英語キーボード</a>から日本語キーボードへ切り替える方法</h3> <p>まずは日本語キーボードから<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%D1%B8%EC%A5%AD%A1%BC%A5%DC%A1%BC%A5%C9">英語キーボード</a>へ切り替える方法。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160124/20160124175339.png" alt="f:id:madachugakusei:20160124175339p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>↑これは個人的にはイメージしやすかったです。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>などではおなじみの地球儀アイコンです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160124/20160124175349.png" alt="f:id:madachugakusei:20160124175349p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>↑<a class="keyword" href="http://d.hatena.ne.jp/keyword/QWERTY%C7%DB%CE%F3">QWERTY配列</a>のキーボードになりました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160124/20160124175400.png" alt="f:id:madachugakusei:20160124175400p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>↑このように英語が打てます。</p> <p>ちなみに<a class="keyword" href="http://d.hatena.ne.jp/keyword/QWERTY%C7%DB%CE%F3">QWERTY配列</a>も、中央の背景が白っぽくなっているエリアがジェスチャエリアです。</p> <p>肝心の日本語キーボードへの切替方法ですが、</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160124/20160124175409.png" alt="f:id:madachugakusei:20160124175409p:plain" title="" class="hatena-fotolife" itemprop="image"></span></p> <p>↑スペースキーのエリアを左右どちらかへスワイプします。</p> <h3>最後に</h3> <p>Fleksyの自動補正は個人的には感動レベルです。 普通に日本語を打つときに非常に有効だと思います。</p> <p>ただし、アプリ名や会社名などの固有名詞には弱いです。 正しい日本語へ補正しようとしてしまいます。</p> <p>私は<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>両方所持しており、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>をメインに使っていましたが、これを機に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>メイン化を検討するほど使いやすいです。 (結構クセがあるので慣れが必要。)</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AC%A5%E9%A5%B1%A1%BC">ガラケー</a>と違ってボタンがない分、誤タイプが多いのがかなりのストレスで、誤タイプしないように試行錯誤していたところなので、誤タイプしても良いというのは素晴らしい発想です。</p> <hr /> <p>以上。</p> madachugakusei 通知センターにSleipnirの空ページへのショートカットを作成する【iPhone】 hatenablog://entry/6653586347151386336 2016-01-05T19:00:00+09:00 2016-01-05T19:00:36+09:00 Sleipnirの紹介 PCでは専らGoogle Chromeを使っていますが、モバイルではiPhoneでもAndroidでもSleipnirを使っています。 ジェスチャーが快適で人気があるSleipnirですが、私が気に入っている機能はリンクの長押しで新しいタブを開いてくれるところです。 別のアプリを使っていて、URLをコピーしたら通知センターからSleipnirを起動してリンクを開けたら便利です。 通知センターにアプリショートカットを置けるアプリがあります。 Launcherの紹介 Launcher - 通知センターウィジェット搭載ランチャー 開発元:Cromulent Labs 無料 p… <h3>Sleipnirの紹介</h3> <p>PCでは専らGoogle Chromeを使っていますが、モバイルではiPhoneでもAndroidでもSleipnirを使っています。 ジェスチャーが快適で人気があるSleipnirですが、私が気に入っている機能はリンクの長押しで新しいタブを開いてくれるところです。</p> <p>別のアプリを使っていて、URLをコピーしたら通知センターからSleipnirを起動してリンクを開けたら便利です。</p> <p>通知センターにアプリショートカットを置けるアプリがあります。</p> <h3>Launcherの紹介</h3> <div id="appreach-box" style="text-align:left;"> <img id="appreach-image" src="http://is1.mzstatic.com/image/thumb/Purple5/v4/91/0e/5f/910e5fc8-92e3-e39d-16eb-74e7f251777a/source/512x512bb.jpg" alt="Launcher - 通知センターウィジェット搭載ランチャー" style="float:left; margin:10px; width:25%; max-width:120px; border-radius:10%;"> <div class="appreach-info" style="margin: 10px;"> <div id="appreach-appname">Launcher - 通知センターウィジェット搭載ランチャー</div> <div id="appreach-developer" style="font-size:80%; display:inline-block; _display:inline;"> 開発元:<a id="appreach-developerurl" href="https://itunes.apple.com/jp/developer/cromulent-labs/id769433054?uo=4" target="_blank" rel="nofollow">Cromulent Labs</a> </div> <div id="appreach-price" style="font-size:80%; display:inline-block; _display:inline;">無料</div> <div class="appreach-powered" style="font-size:80%; display:inline-block; _display:inline;"> posted with <a href="http://nabettu.github.io/appreach/" title="アプリーチ" target="_blank" rel="nofollow">アプリーチ</a> </div> <div class="appreach-links" style="float:left;"> <div id="appreach-itunes-link" style="display: inline-block; _display: inline;"> <a id="appreach-itunes" href="https://itunes.apple.com/jp/app/launcher-tong-zhisentau-ijetto/id905099592?mt=8&amp;uo=4&amp;at=11lHd9" target="_blank" rel="nofollow"> <img src="http://nabettu.github.io/appreach/img/itune_en.png" style="height:40px;"> </a> </div> <div id="appreach-gplay-link" style="display:inline-block; _display:inline;"></div> </div> </div> <div class="appreach-footer" style="margin-bottom:10px; clear: left;"></div> </div> <p>しかし、Launcherを使ってSleipnirを追加すると、起動時にエラーとなります。</p> <p>↓こんな感じ</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160103/20160103202558.png" alt="f:id:madachugakusei:20160103202558p:plain" title="f:id:madachugakusei:20160103202558p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>そして検索ボックスをタップするとアプリが落ちてしまいます。 どうやら、ちゃんと存在するURLをパラメータとして渡さないといけないようです。</p> <p>それならカラのページを指定してあげればよいのではないか。</p> <p>とは言え、存在していて、かつ空のページなんてそうそうあるはずもなく、レンタルサーバーに自分でページを用意することにしました。</p> <p>こちらです。</p> <p><a href="http://keisukereo.com/temp/dummy.html">http://keisukereo.com/temp/dummy.html</a></p> <p>このページをLauncherからのパラメータとして渡してやります。</p> <h3>LauncherにSleipnirのほぼ空のページを追加する</h3> <p>↓Launcherに空のページを追加するまでをgifアニメーションで紹介しています。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160103/20160103201939.gif" alt="f:id:madachugakusei:20160103201939g:plain" title="f:id:madachugakusei:20160103201939g:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>ポイントは、カスタムランチャーのURLに</p> <p>「sleipnirblue://keisukereo.com/temp/dummy.html」 と入力するだけ。 タイトルと画像はお好みで。</p> <p>Sleipnirのアイコンが欲しければ<a href="https://goo.gl/mwkWIR">Google画像検索でSleipnir アイコン</a>などと検索しましょう。</p> <hr /> <p>以上。</p> madachugakusei カレンダーだけでタスク管理する【Google Apps Script】 hatenablog://entry/6653458415121198032 2016-01-04T07:00:00+09:00 2016-01-04T07:00:26+09:00 タスク管理は色々とアプリがあります。 ただ個人的に次の要件を満たすものがなかなかありませんでした。 カレンダーベースで管理したい わざわざ専用アプリを立ち上げたくない 立ち上げて数ステップ手間を取るのが嫌 もちろんタスクの実行漏れを防ぎたい そこで普段予定を管理しているGoogleカレンダーでタスク管理をし、 タスク漏れを防ぐためにGoogle Apps Scriptを使うことにしました。 今回紹介する実現機能は Googleカレンダーを使用 iPhoneでもAndroidでも、特に新しいアプリは使わずに、お気に入りのカレンダーアプリがそのまま使える カレンダーベースなので必然と期限が管理でき… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160103/20160103141827.png" alt="f:id:madachugakusei:20160103141827p:plain" title="f:id:madachugakusei:20160103141827p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>タスク管理は色々とアプリがあります。 ただ個人的に次の要件を満たすものがなかなかありませんでした。</p> <ul> <li>カレンダーベースで管理したい</li> <li>わざわざ専用アプリを立ち上げたくない <ul> <li>立ち上げて数ステップ手間を取るのが嫌</li> </ul> </li> <li>もちろんタスクの実行漏れを防ぎたい</li> </ul> <p>そこで普段予定を管理しているGoogleカレンダーでタスク管理をし、 タスク漏れを防ぐためにGoogle Apps Scriptを使うことにしました。</p> <p>今回紹介する実現機能は</p> <ul> <li>Googleカレンダーを使用 <ul> <li>iPhoneでもAndroidでも、特に新しいアプリは使わずに、お気に入りのカレンダーアプリがそのまま使える</li> </ul> </li> <li>カレンダーベースなので必然と期限が管理できる</li> <li>Google Apps Scriptで期限切れのタスクを自動管理する <ul> <li>期限になったら次の日へ予定を移動する</li> <li>次の日に移動した予定をメール通知する</li> </ul> </li> </ul> <h2>実現方法</h2> <ul> <li>タスク管理用のGoogleカレンダーを作成 <ul> <li>別途アカウントを作成するわけではなく、"カレンダー"を追加します</li> </ul> </li> <li>Google Apps Scriptの導入 <ul> <li>カラのspreadsheetを作成</li> <li>Google Apps Scriptで今日が期限の予定を次の日に移すコードを書く</li> </ul> </li> <li>使い倒す</li> </ul> <h2>タスク管理用のGoogleカレンダーを作成</h2> <p><a href="https://www.google.com/calendar/render?tab=oc">Googleカレンダー</a>にアクセスします。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161351.png" alt="f:id:madachugakusei:20150913161351p:plain" title="f:id:madachugakusei:20150913161351p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161408.png" alt="f:id:madachugakusei:20150913161408p:plain" title="f:id:madachugakusei:20150913161408p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>カレンダーIDを取得しておきます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160103/20160103133855.png" alt="f:id:madachugakusei:20160103133855p:plain" title="f:id:madachugakusei:20160103133855p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h2>Google Apps Scriptの導入</h2> <p>Google Apps ScriptはGoogle Spreadsheetから作成できます。 Spreadsheet自体は使いませんが、カラのシートを作成しましょう。</p> <p><a href="https://drive.google.com/drive/u/0/my-drive">Google Drive</a>から作成します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161144.png" alt="f:id:madachugakusei:20150913161144p:plain" title="f:id:madachugakusei:20150913161144p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161201.png" alt="f:id:madachugakusei:20150913161201p:plain" title="f:id:madachugakusei:20150913161201p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161217.png" alt="f:id:madachugakusei:20150913161217p:plain" title="f:id:madachugakusei:20150913161217p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>スプレッドシートを作成したら「ツール」→「スクリプトエディタ」と進みます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161305.png" alt="f:id:madachugakusei:20150913161305p:plain" title="f:id:madachugakusei:20150913161305p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>コードは下記のものをコピペします。 (修正箇所が2点あります。)</p> <pre class="code lang-javascript" data-lang="javascript" data-unlink> <span class="synComment">/**</span> <span class="synComment"> * 次の日を返す</span> <span class="synComment"> *</span> <span class="synComment"> * @param baseDate Date型の基準日 この次の日を返す</span> <span class="synComment"> 時刻もそのまま引き継ぐ</span> <span class="synComment"> */</span> <span class="synIdentifier">function</span> getNextDate(baseDate) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> y = baseDate.getFullYear(); <span class="synIdentifier">var</span> m = baseDate.getMonth(); <span class="synIdentifier">var</span> d = baseDate.getDate(); <span class="synIdentifier">var</span> h = baseDate.getHours(); <span class="synIdentifier">var</span> mi = baseDate.getMinutes(); <span class="synIdentifier">var</span> s = baseDate.getSeconds(); <span class="synStatement">return</span> <span class="synStatement">new</span> <span class="synType">Date</span>(y, m, d + 1, h, mi, s); <span class="synIdentifier">}</span> <span class="synComment">/**</span> <span class="synComment"> * 指定されたカレンダーの指定された日の予定を次の日に移動する</span> <span class="synComment"> */</span> <span class="synIdentifier">function</span> moveTaskToNextDay(taskCalendarId, baseDate) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> taskCalendar = CalendarApp.getCalendarById(taskCalendarId); <span class="synIdentifier">var</span> events = taskCalendar.getEventsForDay(baseDate); <span class="synIdentifier">var</span> taskList = <span class="synConstant">''</span>; <span class="synStatement">for</span>(<span class="synIdentifier">var</span> i = 0; i &lt; events.length; i++)<span class="synIdentifier">{</span> <span class="synIdentifier">var</span> title = events<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>.getTitle(); <span class="synIdentifier">var</span> s = events<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>.getStartTime(); <span class="synIdentifier">var</span> e = events<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>.getEndTime(); <span class="synStatement">if</span> (taskList.length &gt; 0) <span class="synIdentifier">{</span> taskList += <span class="synSpecial">'\n'</span>; <span class="synIdentifier">}</span> taskList += title; <span class="synStatement">if</span> (events<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>.isAllDayEvent()) <span class="synIdentifier">{</span> taskCalendar.createAllDayEvent(title, getNextDate(s)); Logger.log(<span class="synConstant">'--------------'</span>); Logger.log(getNextDate(s)); <span class="synIdentifier">}</span> <span class="synStatement">else</span> <span class="synIdentifier">{</span> taskCalendar.createEvent(title, getNextDate(s), getNextDate(e)); Logger.log(<span class="synConstant">'--------------'</span>); Logger.log(getNextDate(s)); Logger.log(getNextDate(e)); <span class="synIdentifier">}</span> events<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>.deleteEvent(); <span class="synIdentifier">}</span> <span class="synStatement">return</span> taskList; <span class="synIdentifier">}</span> <span class="synComment">/**</span> <span class="synComment"> * &quot;ToDo&quot;カレンダーの&quot;今日&quot;の予定を明日へ移動する</span> <span class="synComment"> * 時間型トリガー設定済み</span> <span class="synComment"> */</span> <span class="synIdentifier">function</span> moveTaskToTomorrow() <span class="synIdentifier">{</span> <span class="synComment">// タスクのカレンダー </span> <span class="synIdentifier">var</span> taskCalendarId = <span class="synConstant">'XXXXXXXXXXXXX@group.calendar.google.com'</span>; <span class="synIdentifier">var</span> baseDate = <span class="synStatement">new</span> <span class="synType">Date</span>(); <span class="synIdentifier">var</span> taskList = moveTaskToNextDay(taskCalendarId, baseDate); <span class="synStatement">if</span> (taskList.length &gt; 0) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> to = <span class="synConstant">'YYYYYYYYYYYYYY@gmail.com'</span>; <span class="synIdentifier">var</span> subject = <span class="synConstant">'未完了タスクの更新通知'</span>; <span class="synIdentifier">var</span> body = taskList + <span class="synConstant">'</span><span class="synSpecial">\n\n</span><span class="synConstant">上記タスクを明日へ繰り越しました。'</span> MailApp.sendEmail(to, subject, body); <span class="synIdentifier">}</span> <span class="synIdentifier">}</span> </pre> <h3>修正箇所1点目</h3> <pre class="code lang-javascript" data-lang="javascript" data-unlink> <span class="synIdentifier">var</span> taskCalendarId = <span class="synConstant">'XXXXXXXXXXXXX@group.calendar.google.com'</span>; </pre> <p>の部分を先ほどメモしたカレンダーIDへ置き換えます。</p> <h3>修正箇所2点目</h3> <pre class="code lang-javascript" data-lang="javascript" data-unlink> <span class="synIdentifier">var</span> to = <span class="synConstant">'YYYYYYYYYYYYYY@gmail.com'</span>; </pre> <p>の部分はタスクを繰り越したことを通知するメールアドレスを設定します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161328.png" alt="f:id:madachugakusei:20150913161328p:plain" title="f:id:madachugakusei:20150913161328p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>メニューの「実行」→「moveTaskToTomorrow」と選択すると、タスクが繰り越され、その旨がメール通知されます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161445.png" alt="f:id:madachugakusei:20150913161445p:plain" title="f:id:madachugakusei:20150913161445p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h2>使い倒す</h2> <h3>自動実行</h3> <p>スクリプトエディタで、毎日自動的にプログラムが動くように設定しましょう。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161721.png" alt="f:id:madachugakusei:20150913161721p:plain" title="f:id:madachugakusei:20150913161721p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>自動実行の条件が設定できます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150913/20150913161729.png" alt="f:id:madachugakusei:20150913161729p:plain" title="f:id:madachugakusei:20150913161729p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>「実行」はmoveTaskToTomorrow、「イベント」は時間主導型、日タイマーの午後の遅い時間を選択しましょう。</p> <p>これで、タスクが自動繰り越しされます。</p> <hr /> <p>以上</p> madachugakusei Javascript無効とRSSを組み合わせて快適な情報収集環境を手に入れよう hatenablog://entry/9247541947915525691 2016-01-03T00:09:40+09:00 2016-01-03T00:33:34+09:00 概要 JavascriptをオフにすることでWebページを観覧するのは大幅に速くなります。 それについてはこちらの記事で紹介しております。 madachugakusei.hatenablog.com 私の大好きなSmartNewsをさらに自分に特化させ、さらに快適にしたような情報収集環境を作ってみたので紹介してみます。 流れ 自分の読みたいサイトのRSSを取得する RSSアプリに登録する RSSアプリからJavascriptをオフにしたブラウザで観覧する メリット RSSを使用することで記事を見逃すことがありません。また、自分が興味のあるサイトだけを観覧することができます。 デメリット 逆に観… <h2>概要</h2> <p>JavascriptをオフにすることでWebページを観覧するのは大幅に速くなります。 それについてはこちらの記事で紹介しております。</p> <p><iframe src="http://madachugakusei.hatenablog.com/embed/2015/11/15/232955" title="スマホのネットブラウジングを爆速化する - まだ中学生のブログ" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://madachugakusei.hatenablog.com/entry/2015/11/15/232955">madachugakusei.hatenablog.com</a></cite></p> <p>私の大好きなSmartNewsをさらに自分に特化させ、さらに快適にしたような情報収集環境を作ってみたので紹介してみます。</p> <h2>流れ</h2> <ol> <li><p>自分の読みたいサイトのRSSを取得する</p></li> <li><p>RSSアプリに登録する</p></li> <li><p>RSSアプリからJavascriptをオフにしたブラウザで観覧する</p></li> </ol> <h3>メリット</h3> <p>RSSを使用することで記事を見逃すことがありません。また、自分が興味のあるサイトだけを観覧することができます。</p> <h3>デメリット</h3> <p>逆に観覧しないとどんどん記事が溜まっていくので、登録し過ぎると(feedを送るだけでもしないと、)最新記事がチェックしにくくなります。</p> <h2>使用するアプリ</h2> <p>feedlyというRSSアプリを使います。</p> <div id="appreach-box" style="text-align:left;"> <img id="appreach-image" src="http://is5.mzstatic.com/image/thumb/Purple69/v4/91/f7/a3/91f7a3d9-11b9-67ce-18f6-b0e7a2972ffa/source/512x512bb.jpg" alt="Feedly - your work newsfeed" style="float:left; margin:10px; width:25%; max-width:120px; border-radius:10%;"> <div class="appreach-info" style="margin: 10px;"> <div id="appreach-appname">Feedly - your work newsfeed</div> <div id="appreach-developer" style="font-size:80%; display:inline-block; _display:inline;"> 開発元:<a id="appreach-developerurl" href="https://itunes.apple.com/jp/developer/devhd/id396069559?uo=4" target="_blank" rel="nofollow">DevHD</a> </div> <div id="appreach-price" style="font-size:80%; display:inline-block; _display:inline;">無料</div> <div class="appreach-powered" style="font-size:80%; display:inline-block; _display:inline;"> posted with <a href="http://nabettu.github.io/appreach/" title="アプリーチ" target="_blank" rel="nofollow">アプリーチ</a> </div> <div class="appreach-links" style="float:left;"> <div id="appreach-itunes-link" style="display: inline-block; _display: inline;"> <a id="appreach-itunes" href="https://itunes.apple.com/jp/app/feedly-your-work-newsfeed/id396069556?mt=8&amp;uo=4&amp;at=11lHd9" target="_blank" rel="nofollow"> <img src="http://nabettu.github.io/appreach/img/itune_en.png" style="height:40px;"> </a> </div> <div id="appreach-gplay-link" style="display:inline-block; _display:inline;"> <a id="appreach-gplay" href="https://play.google.com/store/apps/details?id=com.devhd.feedly" target="_blank" rel="nofollow"> <img src="http://nabettu.github.io/appreach/img/gplay_en.png" style="height:40px;"> </a> </div> </div> </div> <div class="appreach-footer" style="margin-bottom:10px; clear: left;"></div> </div> <h2>おすすめRSS</h2> <p>カテゴリごとにおすすめのRSSをご紹介します。</p> <h3>IT系</h3> <ul> <li><p><a href="http://gigazine.net/">GIGAZINE</a></p> <ul> <li><a href="http://feed.rssad.jp/rss/gigazine/rss_2.0">http://feed.rssad.jp/rss/gigazine/rss_2.0</a></li> </ul> </li> <li><p><a href="http://www.itmedia.co.jp/">ITmedia総合記事一覧</a></p> <ul> <li><p><a href="http://rss.rssad.jp/rss/itmtop/2.0/itmedia_all.xml">http://rss.rssad.jp/rss/itmtop/2.0/itmedia_all.xml</a></p></li> <li><p>ITmediaのその他のfeedは<a href="http://www.itmedia.co.jp/info/rss/osusume.html">こちら</a>を参考にどうぞ</p></li> </ul> </li> <li><p><a href="http://nlab.itmedia.co.jp/">ねとらぼ</a></p> <ul> <li><a href="http://rss.rssad.jp/rss/itm/2.0/kw_netlab.xml">http://rss.rssad.jp/rss/itm/2.0/kw_netlab.xml</a></li> </ul> </li> <li><p><a href="http://www.infoq.com/jp/">InfoQ</a></p> <ul> <li><a href="http://www.infoq.com/jp/feed">http://www.infoq.com/jp/feed</a></li> </ul> </li> </ul> <h3>ニュース系</h3> <p>手抜きして参考サイトを掲載します。</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Frss.wor.jp%2F" title="RSS愛好会 - 産経・読売などRSSニュースフィードを配信" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://rss.wor.jp/">rss.wor.jp</a></cite></p> <h3>2chまとめ</h3> <ul> <li><p><a href="http://alfalfalfa.com/">アルファルファモザイク - 2ちゃんねるスレッドまとめブログ</a></p> <ul> <li><a href="http://alfalfalfa.com/index.rdf">http://alfalfalfa.com/index.rdf</a></li> </ul> </li> <li><p><a href="http://news020.blog13.fc2.com/">ニュース2ちゃんねる - 2chまとめブログ</a></p> <ul> <li><a href="http://news020.blog13.fc2.com/?xml">http://news020.blog13.fc2.com/?xml</a></li> </ul> </li> <li><p><a href="http://blog.livedoor.jp/dqnplus/">痛いニュース(ノ∀`) - ライブドアブログ</a></p> <ul> <li><a href="http://blog.livedoor.jp/dqnplus/atom.xml">http://blog.livedoor.jp/dqnplus/atom.xml</a></li> </ul> </li> <li><p><a href="http://blog.livedoor.jp/news23vip/">VIPPERな俺</a></p> <ul> <li><a href="http://blog.livedoor.jp/news23vip/atom.xml">http://blog.livedoor.jp/news23vip/atom.xml</a></li> </ul> </li> <li><p><a href="http://hamusoku.com/">ハムスター速報</a></p> <ul> <li><a href="http://hamusoku.com/atom.xml">http://hamusoku.com/atom.xml</a></li> </ul> </li> </ul> <h2>feedly使用例</h2> <p>iPhoneのfeedlyで記事を読むまでをgifアニメーションでご紹介します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160103/20160103000326.gif" alt="f:id:madachugakusei:20160103000326g:plain" title="f:id:madachugakusei:20160103000326g:plain" class="hatena-fotolife" itemprop="image"></span></p> <h2>feedlyでフォルダの順番を変更する</h2> <p>feedlyは私の知る限り、iPhoneやAndroidからフォルダの順番を変更できません。 <a href="https://feedly.com/i/contents/edit">PC</a>から変更しましょう。 メニューの<strong>Organize</strong>にカテゴリごとのfeedが表示されます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20160102/20160102225955.png" alt="f:id:madachugakusei:20160102225955p:plain" title="f:id:madachugakusei:20160102225955p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>フォルダをドラッグアンドドロップして順番を変更できます。 PCで変更した順番はスマホアプリ側でも反映されます。</p> <hr /> <p>以上です。</p> madachugakusei ROS BookのPDF生成方法 hatenablog://entry/6653586347147789677 2015-12-07T23:20:52+09:00 2015-12-07T23:20:52+09:00 Ubuntuにて。 GitHubのROS Bookをクローンします。 git clone https://github.com/irvs/rosbook_jp.git Latexをビルドする環境を構築します。 sudo apt-get install texlive-full ↑これがものすごく時間かかります。(私のVMのUbuntuで2hくらい) ドキュメントを生成します。 sh latex.sh PDFが作成されました。 このリポジトリにはROSの環境構築スクリプトも同柄されています。 ros_indigo_install.sh ↑2回パスワードを聞かれるだけで全て自動でROSの環境がイン… <p>Ubuntuにて。</p> <p><a href="https://github.com/irvs/rosbook_jp">GitHubのROS Book</a>をクローンします。</p> <pre class="code lang-sh" data-lang="sh" data-unlink> git clone https://github.com/irvs/rosbook_jp.git </pre> <p>Latexをビルドする環境を構築します。</p> <pre class="code lang-sh" data-lang="sh" data-unlink> sudo apt-get <span class="synStatement">install</span> texlive-full </pre> <p>↑これがものすごく時間かかります。(私のVMのUbuntuで2hくらい)</p> <p>ドキュメントを生成します。</p> <pre class="code lang-sh" data-lang="sh" data-unlink> sh latex.sh </pre> <p>PDFが作成されました。</p> <p>このリポジトリにはROSの環境構築スクリプトも同柄されています。</p> <pre class="code lang-sh" data-lang="sh" data-unlink> ros_indigo_install.sh </pre> <p>↑2回パスワードを聞かれるだけで全て自動でROSの環境がインストールされる。 (これも結構時間がかかりました。1hくらいかなぁ。)</p> <hr /> <p>以上。</p> madachugakusei スマホのネットブラウジングを爆速化する hatenablog://entry/9247541947915525537 2015-11-15T23:29:55+09:00 2015-11-15T23:29:55+09:00 スマホのネットブラウジングを爆速化する スマホのネットブラウジングが遅い LTEだの4Gだのと、どんどん通信速度が速くなっているようなのに、体感でそんなに恩恵を感じられません。 具体的には、Safariでページを読み込んだときの、ロード中の画面が長い、 SmartNewsなどでページの読み込みがなかなか終わらない、などです。 (SmartNewsが悪いというわけではありません。) なぜ遅いのか 実はこれらは、通信が遅いから、という理由ではないことがあります。 その一つが、「Javascript」です。 Javascriptとは Javascriptとは、 動的なウェブサイト構築や、リッチインタ… <h1>スマホのネットブラウジングを爆速化する</h1> <h2>スマホのネットブラウジングが遅い</h2> <p>LTEだの4Gだのと、どんどん通信速度が速くなっているようなのに、体感でそんなに恩恵を感じられません。 具体的には、Safariでページを読み込んだときの、ロード中の画面が長い、 SmartNewsなどでページの読み込みがなかなか終わらない、などです。</p> <p>(SmartNewsが悪いというわけではありません。)</p> <h2>なぜ遅いのか</h2> <p>実はこれらは、通信が遅いから、という理由ではないことがあります。</p> <p>その一つが、「Javascript」です。</p> <h2>Javascriptとは</h2> <p>Javascriptとは、</p> <pre class="code" data-lang="" data-unlink> 動的なウェブサイト構築や、リッチインターネットアプリケーションなど高度なユーザインタフェースの開発に用いられる。 </pre> <p>とWikipediaに書いてあるように、Webページにコンテンツや機能をのせることができます。</p> <p>具体的には、</p> <ul> <li><p>料金のシミュレーション</p> <ul> <li>保険会社で、自分の年令と必要なサービスをチェックしていくと合計料金が更新されていく</li> </ul> </li> <li><p>Youtubeなどのメディアコンテンツを埋め込む</p></li> </ul> <p>などが挙げられます。</p> <p>広告などは大抵Javascriptで読み込まれています。</p> <p>Javascriptを使用して、ページの一部コンテンツを遅らせて読み込むことで、ページの読み込みを快適にする工夫しているサイトもあったりします。</p> <h2>Javasciptを無効にすると爆速になる</h2> <p>Javascriptは、当然、上乗せ処理なので、無効にしてしまえばページの読み込み完了までの時間は早くなります。 測定はできていませんが、サイトによっては10倍以上早くなります。</p> <p>残念なことに、私のブログのトップページはロードが完全に終了するのに10秒くらいかかっていますが、 Javascriptを無効にすると1秒以下で読み込みが完了しました。</p> <h2>Javascript無効の副作用</h2> <p>当然、Javascriptを無効にすれば、サイト本来のページは見られなくなります。 サイトによっては全く表示されなかったり、次のページボタンを押しても画面が変わらない、なんてことも起こりえます。</p> <h2>Javascriptを無効にして問題ないのはどんなサイト?</h2> <p>基本的に画像と文章で構成されるサイトは問題ありません。</p> <p>例えば調べ物、ブログだったりニュースサイトだったりです。 私のブログでは、レイアウトが崩れることすらなかったです。 変わったのは、広告が表示されなくなっただけです。</p> <p>むしろメリットしかないですね。</p> <p>NGなのは、コンテンツがあるサイトです。 地図を表示するサイト、何かを検索をするサイト、などは使えなくなってしまう可能性が高いです。</p> <p>試してはいないですが、Amazon、楽天、クックパッド、食べログ、などがJavascriptを無効にしてはいけないタイプのサイトです。</p> <h2>使いみちを限定してJavascriptを無効にしよう</h2> <p>調べ物、ニュースサイトを見る、など、限定的な使い方でJavascriptを無効にすると非常に快適です。</p> <p>Googleで検索してサイトを読み込む、Yahooで検索してサイトを読み込む、お気に入りのブログを読む、ニュースサイトを観覧する、などです。</p> <p>Javascriptの有効と無効を切り替えるのは一手間あるので、Javascriptを無効にして使うアプリと有効にして使うアプリを使い分けるのが効果的です。</p> <p>Javascriptを無効にできるアプリ</p> <ul> <li><p>iPhone</p> <ul> <li><p>Safari</p></li> <li><p><a href="http://narrowser.bornneet.com/?l=ja">Narrow: Plain hypetext web browser</a></p></li> </ul> </li> <li><p>Android</p> <ul> <li><p>Google Chrome</p></li> <li><p>Boat Browser</p></li> </ul> </li> </ul> <p>ちなみに調査してJavascriptを無効にできなかったアプリは</p> <ul> <li><p>iPhone</p> <ul> <li><p>Google Chrome</p></li> <li><p>Firefox</p></li> <li><p>Opera Mini</p></li> <li><p>Yahooブラウザー</p></li> <li><p>Sleipnir</p></li> <li><p>ドルフィンブラウザ</p></li> </ul> </li> <li><p>Android</p> <ul> <li><p>Firefox</p></li> <li><p>Opera Mini</p></li> <li><p>Yahooブラウザー</p></li> <li><p>Sleipnir</p></li> <li><p>ドルフィンブラウザ</p></li> </ul> </li> </ul> <p>です。</p> <p>iPhoneの場合、</p> <p><a href="http://narrowser.bornneet.com/?l=ja">Narrow: Plain hypetext web browser</a>というアプリがもろにJavascriptをオフにして高速化するのを目的に作られているのですが、iPhone6以降の画面に対応したアップデートがされておらず、若干使いにくいです。</p> <p>そこで私は、SafariをJavascript無効で観覧するサイト用、Google ChromeとSleipnirをそれ以外で使い分けています。</p> <h2>iPhoneのSafariのJavascriptを無効にする</h2> <p>「設定」→「Safari」→「詳細」→「Javascript」をオフ(下記画像の状態)にすればJavascriptを無効にできます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20151115/20151115222502.png" alt="f:id:madachugakusei:20151115222502p:plain" title="f:id:madachugakusei:20151115222502p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20151115/20151115222517.png" alt="f:id:madachugakusei:20151115222517p:plain" title="f:id:madachugakusei:20151115222517p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20151115/20151115222529.png" alt="f:id:madachugakusei:20151115222529p:plain" title="f:id:madachugakusei:20151115222529p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h2>次回予告!</h2> <p>SmartNewsが個人的にとっても使いやすく大好きなのですが、ページのロードにストレスを感じていたので、 今回のJavascript無効と合わせてRSSを使うことで快適な情報収集する手段をご紹介したいと思います。</p> <hr /> <p>以上です。</p> madachugakusei Googleカレンダーにシフトを簡単に時間帯付きで登録する hatenablog://entry/6653458415127285919 2015-11-07T22:40:05+09:00 2017-11-27T06:09:50+09:00 Googleカレンダーにシフトを簡単に時間帯付きで登録する 背景 Googleカレンダーに簡単にシフト登録する方法に反響がありました。 madachugakusei.hatenablog.com 上記エントリーでは終日予定で早番か遅番かを入力可能にしていますが、 早番は8:00~17:00、遅番は9:00~18:00のように時間帯指定で登録したいとコメントいただきましたので実現方法を書いてみました。 実現方法 上記エントリーの「カレンダーに登録するプログラムを書く」という章に次のようなコードがありますが、これを書き換えるだけで実現できます。 ※これは終日予定を登録するコードです。 functi… <h1><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%A5%AB%A5%EC%A5%F3%A5%C0%A1%BC">Googleカレンダー</a>にシフトを簡単に時間帯付きで登録する</h1> <h2>背景</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%A5%AB%A5%EC%A5%F3%A5%C0%A1%BC">Googleカレンダー</a>に簡単にシフト登録する方法に反響がありました。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Fmadachugakusei.hatenablog.com%2Fentry%2F2015%2F01%2F24%2F212325" title="Googleカレンダーにシフトを簡単に登録する カレンダーに登録する - まだ中学生のブログ" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://madachugakusei.hatenablog.com/entry/2015/01/24/212325">madachugakusei.hatenablog.com</a></cite></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%E5%B5%AD">上記</a>エントリーでは終日予定で早番か遅番かを入力可能にしていますが、 早番は8:00~17:00、遅番は9:00~18:00のように時間帯指定で登録したいとコメントいただきましたので実現方法を書いてみました。</p> <h2>実現方法</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%E5%B5%AD">上記</a>エントリーの「カレンダーに登録するプログラムを書く」という章に次のようなコードがありますが、これを書き換えるだけで実現できます。</p> <p>※これは終日予定を登録するコードです。</p> <pre class="code lang-javascript" data-lang="javascript" data-unlink> <span class="synIdentifier">function</span> executeInPosting() <span class="synIdentifier">{</span> <span class="synComment">//==========================================================</span> <span class="synComment">// 設定箇所</span> <span class="synComment">//==========================================================</span> <span class="synIdentifier">var</span> CALENDAR_ID = <span class="synConstant">'mada.chugakusei@gmail.com'</span>; <span class="synIdentifier">var</span> SHIFT1 = <span class="synConstant">'早番'</span>; <span class="synIdentifier">var</span> SHIFT2 = <span class="synConstant">'遅番'</span>; <span class="synIdentifier">var</span> YEAR_COLUMN = <span class="synConstant">'B'</span>; <span class="synIdentifier">var</span> MONTH_COLUMN = <span class="synConstant">'C'</span>; <span class="synIdentifier">var</span> SHIFT1_COLUMN = <span class="synConstant">'D'</span>; <span class="synIdentifier">var</span> SHIFT2_COLUMN = <span class="synConstant">'E'</span>; <span class="synComment">//----------------------------------------------------------</span> <span class="synIdentifier">var</span> sheet = SpreadsheetApp.getActiveSheet(); bottom = sheet.getLastRow(); <span class="synIdentifier">var</span> year = sheet.getRange(YEAR_COLUMN + bottom).getValue(); <span class="synIdentifier">var</span> month = sheet.getRange(MONTH_COLUMN + bottom).getValue(); <span class="synIdentifier">var</span> shift1 = sheet.getRange(SHIFT1_COLUMN + bottom).getValue(); <span class="synIdentifier">var</span> shift2 = sheet.getRange(SHIFT2_COLUMN + bottom).getValue(); <span class="synIdentifier">var</span> shift1List = <span class="synType">String</span>(shift1).split(<span class="synConstant">','</span>); <span class="synIdentifier">var</span> shift2List = <span class="synType">String</span>(shift2).split(<span class="synConstant">','</span>); <span class="synComment">// シフト1を登録</span> <span class="synStatement">for</span> (<span class="synIdentifier">var</span> i = 0; i &lt; shift1List.length; i++) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> dateStr = year + <span class="synConstant">'/'</span> + month + <span class="synConstant">'/'</span> + shift1List<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>; Logger.log(dateStr); <span class="synIdentifier">var</span> date = <span class="synStatement">new</span> <span class="synType">Date</span>(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT1, date); Logger.log(<span class="synConstant">'createEvent() is done.'</span>); <span class="synIdentifier">}</span> <span class="synComment">// シフト2を登録</span> <span class="synStatement">for</span> (<span class="synIdentifier">var</span> i = 0; i &lt; shift2List.length; i++) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> dateStr = year + <span class="synConstant">'/'</span> + month + <span class="synConstant">'/'</span> + shift2List<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>; Logger.log(dateStr); <span class="synIdentifier">var</span> date = <span class="synStatement">new</span> <span class="synType">Date</span>(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT2, date); Logger.log(<span class="synConstant">'createEvent() is done.'</span>); <span class="synIdentifier">}</span> <span class="synIdentifier">}</span> <span class="synComment">// カレンダーに終日のイベントを作成</span> <span class="synIdentifier">function</span> createEvent(calendarId, title, date) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> calendar = CalendarApp.getCalendarById(calendarId); calendar.createAllDayEvent(title, date); <span class="synIdentifier">}</span> </pre> <p>これを次のように書き換えます。</p> <pre class="code lang-javascript" data-lang="javascript" data-unlink> <span class="synIdentifier">function</span> executeInPosting() <span class="synIdentifier">{</span> <span class="synComment">//==========================================================</span> <span class="synComment">// 設定箇所</span> <span class="synComment">//==========================================================</span> <span class="synIdentifier">var</span> CALENDAR_ID = <span class="synConstant">'mada.chugakusei@gmail.com'</span>; <span class="synIdentifier">var</span> SHIFT1_NAME = <span class="synConstant">'早番'</span>; <span class="synIdentifier">var</span> SHIFT1_START_TIME = <span class="synConstant">'8:00'</span>; <span class="synIdentifier">var</span> SHIFT1_END_TIME = <span class="synConstant">'17:00'</span> <span class="synIdentifier">var</span> SHIFT2_NAME = <span class="synConstant">'遅番'</span>; <span class="synIdentifier">var</span> SHIFT2_START_TIME = <span class="synConstant">'9:00'</span>; <span class="synIdentifier">var</span> SHIFT2_END_TIME = <span class="synConstant">'18:00'</span>; <span class="synIdentifier">var</span> YEAR_COLUMN = <span class="synConstant">'B'</span>; <span class="synIdentifier">var</span> MONTH_COLUMN = <span class="synConstant">'C'</span>; <span class="synIdentifier">var</span> SHIFT1_COLUMN = <span class="synConstant">'D'</span>; <span class="synIdentifier">var</span> SHIFT2_COLUMN = <span class="synConstant">'E'</span>; <span class="synComment">//----------------------------------------------------------</span> <span class="synIdentifier">var</span> sheet = SpreadsheetApp.getActiveSheet(); bottom = sheet.getLastRow(); <span class="synIdentifier">var</span> year = sheet.getRange(YEAR_COLUMN + bottom).getValue(); <span class="synIdentifier">var</span> month = sheet.getRange(MONTH_COLUMN + bottom).getValue(); <span class="synIdentifier">var</span> shift1 = sheet.getRange(SHIFT1_COLUMN + bottom).getValue(); <span class="synIdentifier">var</span> shift2 = sheet.getRange(SHIFT2_COLUMN + bottom).getValue(); <span class="synIdentifier">var</span> shift1List = <span class="synType">String</span>(shift1).split(<span class="synConstant">','</span>); <span class="synIdentifier">var</span> shift2List = <span class="synType">String</span>(shift2).split(<span class="synConstant">','</span>); <span class="synComment">// シフト1を登録</span> <span class="synStatement">for</span> (<span class="synIdentifier">var</span> i = 0; i &lt; shift1List.length; i++) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> dateStr = year + <span class="synConstant">'/'</span> + month + <span class="synConstant">'/'</span> + shift1List<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>; Logger.log(dateStr); <span class="synIdentifier">var</span> date = <span class="synStatement">new</span> <span class="synType">Date</span>(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT1_NAME, date, SHIFT1_START_TIME, SHIFT1_END_TIME); Logger.log(<span class="synConstant">'createEvent() is done.'</span>); <span class="synIdentifier">}</span> <span class="synComment">// シフト2を登録</span> <span class="synStatement">for</span> (<span class="synIdentifier">var</span> i = 0; i &lt; shift2List.length; i++) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> dateStr = year + <span class="synConstant">'/'</span> + month + <span class="synConstant">'/'</span> + shift2List<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>; Logger.log(dateStr); <span class="synIdentifier">var</span> date = <span class="synStatement">new</span> <span class="synType">Date</span>(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT2_NAME, date, SHIFT2_START_TIME, SHIFT2_END_TIME); Logger.log(<span class="synConstant">'createEvent() is done.'</span>); <span class="synIdentifier">}</span> <span class="synIdentifier">}</span> <span class="synComment">// カレンダーに時間帯のイベントを作成</span> <span class="synIdentifier">function</span> createEvent(calendarId, title, date, startTime, endTime) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> calendar = CalendarApp.getCalendarById(calendarId); <span class="synComment">//calendar.createAllDayEvent(title, date);</span> <span class="synIdentifier">var</span> startDateTime = <span class="synStatement">new</span> <span class="synType">Date</span>(date.getFullYear(), date.getMonth(), date.getDate(), <span class="synType">Number</span>(startTime.split(<span class="synConstant">':'</span>)<span class="synIdentifier">[</span>0<span class="synIdentifier">]</span>), <span class="synType">Number</span>(startTime.split(<span class="synConstant">':'</span>)<span class="synIdentifier">[</span>1<span class="synIdentifier">]</span>)); <span class="synIdentifier">var</span> endDateTime = <span class="synStatement">new</span> <span class="synType">Date</span>(date.getFullYear(), date.getMonth(), date.getDate(), <span class="synType">Number</span>(endTime.split(<span class="synConstant">':'</span>)<span class="synIdentifier">[</span>0<span class="synIdentifier">]</span>), <span class="synType">Number</span>(endTime.split(<span class="synConstant">':'</span>)<span class="synIdentifier">[</span>1<span class="synIdentifier">]</span> )); Logger.log(<span class="synConstant">'startDateTime'</span>); Logger.log(startDateTime); Logger.log(<span class="synConstant">'endDateTime'</span>); Logger.log(endDateTime); calendar.createEvent(title, startDateTime, endDateTime); <span class="synIdentifier">}</span> </pre> <p>注目は、</p> <ul> <li><p>SHIFT1_START_TIME</p></li> <li><p>SHIFT1_END_TIME</p></li> <li><p>SHIFT2_START_TIME</p></li> <li><p>SHIFT2_END_TIME</p></li> </ul> <p>です。 次のように入力します。</p> <table> <thead> <tr> <th> 変数名 </th> <th> 意味 </th> </tr> </thead> <tbody> <tr> <td> SHIFT1_START_TIME </td> <td> シフト1の開始時刻(早番) </td> </tr> <tr> <td> SHIFT1_END_TIME </td> <td> シフト1の開始時刻(早番) </td> </tr> <tr> <td> SHIFT2_START_TIME </td> <td> シフト2の開始時刻(遅番) </td> </tr> <tr> <td> SHIFT2_END_TIME </td> <td> シフト2の開始時刻(遅番) </td> </tr> </tbody> </table> <h2>結果</h2> <p>これでフォームを投稿してみると…</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20151107/20151107223714.png" alt="f:id:madachugakusei:20151107223714p:plain" title="f:id:madachugakusei:20151107223714p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>このように時間帯指定でシフトが登録できるようになります。</p> <p>日をまたぐ予定を登録したい場合、</p> <table> <thead> <tr> <th> 変数名 </th> <th> 意味 </th> </tr> </thead> <tbody> <tr> <td> SHIFT1_START_TIME </td> <td> 20:00 </td> </tr> <tr> <td> SHIFT1_END_TIME </td> <td> 30:00 </td> </tr> <tr> <td> SHIFT2_START_TIME </td> <td> 17:00 </td> </tr> <tr> <td> SHIFT2_END_TIME </td> <td> 22:00 </td> </tr> </tbody> </table> <p>のように、深夜0時以降には24を足す形で表現することで実現できます。 (30時は翌朝の6時になります。)</p> <hr /> <p>以上です。</p> madachugakusei Google Spreadsheetのトリガーの「編集時」と「値の変更」の違いを検証してみた hatenablog://entry/6653458415124992028 2015-10-18T14:04:39+09:00 2015-10-18T21:48:35+09:00 Google Spreadsheetのトリガーの種類の検証 調査対象のトリガー トリガーの種類は次のとおりです。 スプレッドシートから 起動時 編集時 値の変更 フォーム送信時 時間主導型 特定の日時 分タイマー 時タイマー 日タイマー 週タイマー 月タイマー 「編集時」と「値の変更」の違いがわからないので調査してみました。 英語の仕様書を参考にする 日本語だと「編集時」「値の変更」の違いがイマイチわかりませんでした。 英語のドキュメントだと 編集時 Specifies a trigger that will fire when the spreadsheet is edited. →[訳] … <h1>Google Spreadsheetのトリガーの種類の検証</h1> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20151018/20151018130935.png" alt="f:id:madachugakusei:20151018130935p:plain" title="f:id:madachugakusei:20151018130935p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h2>調査対象のトリガー</h2> <p>トリガーの種類は次のとおりです。</p> <ul> <li><p>スプレッドシートから</p> <ul> <li><p>起動時</p></li> <li><p>編集時</p></li> <li><p>値の変更</p></li> <li><p>フォーム送信時</p></li> </ul> </li> <li><p>時間主導型</p> <ul> <li><p>特定の日時</p></li> <li><p>分タイマー</p></li> <li><p>時タイマー</p></li> <li><p>日タイマー</p></li> <li><p>週タイマー</p></li> <li><p>月タイマー</p></li> </ul> </li> </ul> <p>「編集時」と「値の変更」の違いがわからないので調査してみました。</p> <h2>英語の仕様書を参考にする</h2> <p>日本語だと「編集時」「値の変更」の違いがイマイチわかりませんでした。</p> <p>英語のドキュメントだと</p> <ul> <li><p>編集時</p> <ul> <li><p>Specifies a trigger that will fire when the spreadsheet is edited.</p></li> <li><p>→[訳] スプレッドシートが編集されたときに発動</p></li> </ul> </li> <li><p>値の変更</p> <ul> <li><p>Specifies a trigger that will fire when the spreadsheet's content or structure is changed.</p></li> <li><p>→[訳]スプレッドシートのコンテンツもしくは構成が変更されたら発動</p></li> </ul> </li> </ul> <h2>トリガーの検証</h2> <p>次のようなシートを用意します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20151018/20151018133336.png" alt="f:id:madachugakusei:20151018133336p:plain" title="f:id:madachugakusei:20151018133336p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>B列には、onEdit()とonChange()が発動したときの時刻を記録するようにします。</p> <p>スクリプトエディタは下記のようにします。 (※スプレッドシートのシート名は「回答」としています。)</p> <pre class="code lang-javascript" data-lang="javascript" data-unlink><span class="synIdentifier">function</span> onEdit(<span class="synStatement">event</span>) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); <span class="synIdentifier">var</span> answerSheet = spreadSheet.getSheetByName(<span class="synConstant">'回答'</span>); answerSheet.getRange(<span class="synConstant">'B1'</span>).setValue(<span class="synConstant">'Last modified: '</span> + <span class="synStatement">new</span> <span class="synType">Date</span>()); <span class="synIdentifier">}</span> <span class="synIdentifier">function</span> onChange(<span class="synStatement">event</span>) <span class="synIdentifier">{</span> <span class="synIdentifier">var</span> spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); <span class="synIdentifier">var</span> answerSheet = spreadSheet.getSheetByName(<span class="synConstant">'回答'</span>); answerSheet.getRange(<span class="synConstant">'B2'</span>).setValue(<span class="synConstant">'Last modified: '</span> + <span class="synStatement">new</span> <span class="synType">Date</span>()); <span class="synIdentifier">}</span> </pre> <p>シートのどこかに値を入れてみます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20151018/20151018134201.png" alt="f:id:madachugakusei:20151018134201p:plain" title="f:id:madachugakusei:20151018134201p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>するとB列の時刻が更新されました。 つまり、<strong>onEdit()が発動</strong>されました。</p> <p>今値を入れたセルをdelキーで削除しても、<strong>onEdit()が発動</strong>しました。</p> <p>一方、行削除・行追加・列削除・列追加などしてみましたが無反応。</p> <h3>イベントオブジェクトを参考にする</h3> <p>onEdit()とonChange()は引数にEventオブジェクトをとります。 このオブジェクトの構造を見てみます。</p> <p><a href="https://developers.google.com/apps-script/guides/triggers/events">ドキュメント</a>によると次のようなオブジェクトのようです。</p> <ul> <li><p>onChange(event)</p> <ul> <li><p>event.changeType</p> <ul> <li>The type of change (EDIT, INSERT_ROW, INSERT_COLUMN, REMOVE_ROW, REMOVE_COLUMN, INSERT_GRID, REMOVE_GRID, or OTHER)</li> </ul> </li> </ul> </li> <li><p>onEdit(event)</p> <ul> <li><p>event.range</p></li> <li><p>e.value</p></li> </ul> </li> </ul> <p>onChange()のchangeTypeは日本語にすると</p> <ul> <li><p>編集</p></li> <li><p>行追加</p></li> <li><p>列追加</p></li> <li><p>行削除</p></li> <li><p>列追加</p></li> <li><p>グリッド挿入</p></li> <li><p>グリッド削除</p></li> <li><p>その他</p></li> </ul> <p>となります。</p> <p>一方onEdit()は、どのセルがどんな値になったかが取得できるようです。 これを見る限り、onChange()のchangeTypeがEDITの時にonEdit()も発動するという、部分集合の関係のように見えます。 ではなぜonChange()は発動しないのでしょうか。</p> <p>それっぽい情報を見つけた。</p> <p><a href="http://stackoverflow.com/questions/22462699/google-spreadsheet-script-onchange-event-not-firing">onChange()が発動しない</a></p> <p>トリガーを追加しろとのこと。 やってみました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20151018/20151018135528.png" alt="f:id:madachugakusei:20151018135528p:plain" title="f:id:madachugakusei:20151018135528p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>これで無事onChange()が発動するようになりました。</p> <p>行や列の追加削除でonChange()が発動し、セルに値を入れたり削除した場合は、onEdit()とonChange()が両方発動します。</p> <p>じゃあなぜonEdit()はトリガー設定していないのに動いるのでしょうか。。</p> <h3>結論</h3> <p>onChange()がうまく発動しないのがおかしいのか、トリガーの設定をしなくてもonEdit()だけは発動しているのがおかしいのかはわかりませんが、 onChange()はトリガー設定することで次の条件下で発動する。</p> <ul> <li><p>セルの値の変更</p></li> <li><p>行追加</p></li> <li><p>列追加</p></li> <li><p>行削除</p></li> <li><p>列追加</p></li> <li><p>グリッド挿入</p></li> <li><p>グリッド削除</p></li> <li><p>その他</p></li> </ul> <p>onEdit()は同名の関数を定義しておくだけで、特にプロジェクトトリガーを設定しなくても、</p> <ul> <li>セルの値の変更</li> </ul> <p>の際に発動する。</p> <hr /> <p>以上</p> madachugakusei ZNAPSのメールから商品選択と発送手続きをした【日本語説明あり】 hatenablog://entry/6653458415121066338 2015-09-12T12:27:28+09:00 2015-09-12T12:27:28+09:00 KickstarterのZNAPSに出資しています。 登録する際に金額を選び、クレジットカードも登録していると思いますが、 実はまだ商品がもらえるような手続きは完了していません。 そういえば、登録時に、Micro-USBタイプかLightningケーブルか選択できる、と書いてありつつ選択した覚えはありません。 既にKickstarterの出資金額は払っていますが、手続きは完了していないのです。 仕組みとしては、 Kickstarter登録時に、"最近オープンしたZNAPS専用サイトで使用可能な割引コードを購入した"というイメージです。 その割引コードを示したメールが次のようなものです。 「Yo… <p>KickstarterのZNAPSに出資しています。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150912/20150912114739.png" alt="f:id:madachugakusei:20150912114739p:plain" title="f:id:madachugakusei:20150912114739p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>登録する際に金額を選び、クレジットカードも登録していると思いますが、 実はまだ商品がもらえるような手続きは完了していません。</p> <p>そういえば、登録時に、Micro-USBタイプかLightningケーブルか選択できる、と書いてありつつ選択した覚えはありません。</p> <p>既にKickstarterの出資金額は払っていますが、手続きは完了していないのです。</p> <p>仕組みとしては、 Kickstarter登録時に、"最近オープンしたZNAPS専用サイトで使用可能な割引コードを購入した"というイメージです。</p> <p>その割引コードを示したメールが次のようなものです。</p> <p>「Your Znaps Pledge Manager Is Ready!」という件名のメールです。</p> <pre class="code" data-lang="" data-unlink>Dear XXXXXXX, Thanks again for supporting the ZNAPS campaign on Kickstarter! The ZNAPS post-campaign pledge manager is ready! Here’s your one-time-use Discount Code. Here are the steps: 1. Visit ZNAPS Pledge Manager at: https://znaps.myshopify.com/collections/all 2. Select and/or add to your rewards 3. Check-out cart and apply your one-time-use discount code. 4. Sign-up for a Shopify ZNAPS account and fill-in your shipping details. Reminder: *This unique Discount Code for ONE-TIME-USE only. Please double check your order. *Please note that the discount code uniquely represents your pledge on Kickstarter, DO NOT SHARE with others. * For better security and higher accuracy, we recommend using a desktop browser.</pre> <p>このメールに書かれている手続きを完了させるとめでたく商品の種類が決定し、自宅へ郵送する手続きが完了します。 2015-10-1までに手続きしてくださいと書いてあるので早めに手続をしましょう。</p> <p>メールに書かれている<a href="https://znaps.myshopify.com/collections/all">https://znaps.myshopify.com/collections/all</a>にアクセスします。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150912/20150912113458.png" alt="f:id:madachugakusei:20150912113458p:plain" title="f:id:madachugakusei:20150912113458p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>自分が選択したプランの商品をカートへ追加していきます。 商品は次のような値段になっています。</p> <ul> <li><p>iPhone系 合計:$11</p> <ul> <li><p>LIGHTNING ADAPTER FOR APPLE $8</p></li> <li><p>LIGHTNING CONNECTOR FOR APPLE $3</p></li> </ul> </li> <li><p>Android系 合計:$11</p> <ul> <li><p>MICRO USB ADAPTER $8</p></li> <li><p>MICRO USB CONNECTOR $3</p></li> </ul> </li> </ul> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150912/20150912114106.png" alt="f:id:madachugakusei:20150912114106p:plain" title="f:id:madachugakusei:20150912114106p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>私の場合は$25のプランなので、</p> <ul> <li><p>LIGHTNING ADAPTER FOR APPLE $8 x 1</p></li> <li><p>LIGHTNING CONNECTOR FOR APPLE $3 x 2</p></li> <li><p>MICRO USB ADAPTER $8 x 1</p></li> <li><p>MICRO USB CONNECTOR $3 x 1</p></li> </ul> <p>にしました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150912/20150912114126.png" alt="f:id:madachugakusei:20150912114126p:plain" title="f:id:madachugakusei:20150912114126p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>カートに5個の商品が入りました。 そのカートのアイコンをクリックすると、</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150912/20150912114135.png" alt="f:id:madachugakusei:20150912114135p:plain" title="f:id:madachugakusei:20150912114135p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↑のような画面になりますので、 チェックボックスにチェックを入れて「CHECKOUT」をクリックします。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150912/20150912114202.png" alt="f:id:madachugakusei:20150912114202p:plain" title="f:id:madachugakusei:20150912114202p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>ここで、ZNAPS用のアカウントを作成しなければなりません。 <strong>Kickstarterのアカウントとは別</strong>です。</p> <p>ここで注意が必要なのが、Kickstarterで登録したメールアドレスを登録する必要があります。 別のメールアドレスを登録すると、Discount Codeという割引コードを適用することができません。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150912/20150912114246.png" alt="f:id:madachugakusei:20150912114246p:plain" title="f:id:madachugakusei:20150912114246p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>サインアップすると指定したメールアドレスにメールが届きます。 そこの登録用URLをクリックして登録を完了させます。</p> <p>いよいよ発送先住所を登録できるようになります。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150912/20150912114255.png" alt="f:id:madachugakusei:20150912114255p:plain" title="f:id:madachugakusei:20150912114255p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>〒123-4567<br/> 日本 東京都 千代田区 ほげほげ町 1-1-1 あいうえおマンション101<br/> 田中太郎</p> <p>という人の場合は次のように入力します。</p> <ul> <li><p>First name</p> <ul> <li>Taro</li> </ul> </li> <li><p>Last name</p> <ul> <li>Tanaka</li> </ul> </li> <li><p>Address</p> <ul> <li>hogehoge-cho 1-1-1-101</li> </ul> </li> <li><p>Apt, suite etc.</p> <ul> <li><p>aiueo</p></li> <li><p>(もしくは)aiueo-court</p></li> </ul> </li> <li><p>City</p> <ul> <li>Chiyoda-ku</li> </ul> </li> <li><p>Country</p> <ul> <li>Japan</li> </ul> </li> <li><p>Postal code</p> <ul> <li>123-4567</li> </ul> </li> </ul> <p>"東京都"を入力する欄がないのですが、Cityに</p> <p>Tokyo-to Chiyoda-ku</p> <p>と入れるか迷ったのですが、郵便番号を入力しているし住所として成立しているからいいかなぁと思っています。<br/> (自己責任で記載してください。)</p> <p>Discountというところに「Your Znaps Pledge Manager Is Ready!」のメールに記載されているDiscount Codeを入力し「APPLY」ボタンで適用します。 金額が$0になることを確認しましょう。<br/> (上記画像にDiscount Codeが表示されておらず申し訳ないです。)</p> <p>次のようなメールが届けば無事完了です。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150912/20150912114303.png" alt="f:id:madachugakusei:20150912114303p:plain" title="f:id:madachugakusei:20150912114303p:plain" class="hatena-fotolife" itemprop="image"></span></p> <hr /> <p>以上</p> madachugakusei iPhoneのサイレントモード【おやすみモード】 hatenablog://entry/6653458415119613794 2015-09-06T10:45:37+09:00 2015-09-06T10:45:37+09:00 iPhoneにはサイレントモードと呼ばれるモードは存在しません。 しかし、近い機能は存在します。 おやすみモードです。 マナーモードにしててもバイブがうるさいから一時的に音が鳴らない・バイブもしない状態にする、 でも、会議とかが終わったらすぐに元に戻したい、 という設定のご紹介です。 iPhoneでアプリを使わずにサイレントモードっぽくしてみる 目次 おやすみモードの目的と機能 おやすみモードの設定方法 コントロールセンターからおやすみモードのオンオフ 一時的なサイレントモードの実現方法 おやすみモードの目的と機能 おやすみモードの目的 「おやすみモード」は、寝ている間に着信音で起きてしまうの… <p>iPhoneにはサイレントモードと呼ばれるモードは存在しません。 しかし、近い機能は存在します。</p> <p>おやすみモードです。</p> <p>マナーモードにしててもバイブがうるさいから一時的に音が鳴らない・バイブもしない状態にする、 でも、会議とかが終わったらすぐに元に戻したい、 という設定のご紹介です。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150906/20150906103852.jpg" alt="f:id:madachugakusei:20150906103852j:plain" title="f:id:madachugakusei:20150906103852j:plain" class="hatena-fotolife" itemprop="image"></span></p> <h1>iPhoneでアプリを使わずにサイレントモードっぽくしてみる</h1> <h2>目次</h2> <ul> <li><p>おやすみモードの目的と機能</p></li> <li><p>おやすみモードの設定方法</p></li> <li><p>コントロールセンターからおやすみモードのオンオフ</p></li> <li><p>一時的なサイレントモードの実現方法</p></li> </ul> <h2>おやすみモードの目的と機能</h2> <h3>おやすみモードの目的</h3> <p>「おやすみモード」は、寝ている間に着信音で起きてしまうのを防ぐための機能です。 とは言え、緊急の大切な電話を逃してしまわないような設定ができます。</p> <h3>おやすみモードの機能</h3> <ul> <li><p>通知を無効にする</p> <ul> <li>画面がついているときは通知を無効にしないことはできる</li> </ul> </li> </ul> <h2>おやすみモードの設定方法</h2> <p>「設定」から「おやすみモード」を開きます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150905/20150905202113.png" alt="f:id:madachugakusei:20150905202113p:plain" title="f:id:madachugakusei:20150905202113p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>おやすみモードの設定画面は次の通りです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150905/20150905202128.png" alt="f:id:madachugakusei:20150905202128p:plain" title="f:id:madachugakusei:20150905202128p:plain" class="hatena-fotolife" itemprop="image"></span></p> <ul> <li><p>今すぐオン/オフ</p> <ul> <li><p>→ 上記の画像ではオフの状態です。オンにするとおやすみモードになります。</p></li> <li><p>→ 後述しますが、コントロールセンターから簡単にオンオフの切り替えができるのでここでオンオフする必要性はありません。</p></li> </ul> </li> <li><p>時間指定</p> <ul> <li>→ 指定した時間に自動的におやすみモードになるようになります。</li> </ul> </li> <li><p>開始終了</p> <ul> <li>→ ここで指定した時間帯がにおやすみモードになります。</li> </ul> </li> <li><p>着信を許可</p> <ul> <li>→ おやすみモード中であっても着信だけは通知します。</li> </ul> </li> <li><p>繰り返しの着信</p> <ul> <li>→ おやすみモード中であっても、同じ人から何回も電話がかかってきた場合、重要な電話と判断して通知することができます。</li> </ul> </li> <li><p>通知</p> <ul> <li><p>常に知らせない</p> <ul> <li><p>→ おやすみモード中にiPhoneを使用しているときも通知をオフにします。</p></li> <li><p>→ 例えばおやすみモード中にiPhoneのメールを見ている時でもLINEの通知が来ない、という状態です。</p></li> </ul> </li> <li><p>iPhoneのロック中のみ知らせない</p> <ul> <li><p>→ おやすみモード中であっても、iPhoneを使用ている際は通知がくるようになります。</p></li> <li><p>→ 例えばおやすみモード中にiPhoneのメールを見ている時にはLINEの通知がきますが、iPhoneの画面が消えている状態ではメッセージが来ても通知が来ません。</p></li> </ul> </li> </ul> </li> </ul> <h2>コントロールセンターからおやすみモードのオンオフ</h2> <p>画面の下から上に向かってスワイプすると出現するコントロールセンター。</p> <p>これのお月様アイコンでオンオフが切り替えられます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150905/20150905202139.png" alt="f:id:madachugakusei:20150905202139p:plain" title="f:id:madachugakusei:20150905202139p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>上図はおやすみモードがオフなので通常のモードです。</p> <h2>一時的なサイレントモードの実現方法</h2> <p>サイレントモードにしたいときにコントロールセンターを開いておやすみモードをオンにする。</p> <p>サイレントモードを解除したいときはコントロールセンターを開いておやすみモードをオフにする。</p> <p>あくまで通知がこないからバイブもしない、という擬似的な状態を作り出しているだけで、解除を忘れると大切な土がこないまま、となってしまうのでご注意ください。</p> <hr /> <p>以上</p> madachugakusei iPhoneのバッテリー劣化度をアバウトに調べてみた hatenablog://entry/8454420450103771175 2015-07-29T08:44:01+09:00 2015-07-29T08:44:01+09:00 iPhoneのバッテリー劣化度をアバウトに調べてみた 目次 概要 測定方法の紹介 結果 概要 Appleは性能が80%未満になったら無償交換してくれる制度があります。(Apple Care加入者) AppleCareが性能80%未満のバッテリーを無償交換 | ライフハッカー[日本版]www.lifehacker.jp 自分のバッテリーはどれくらいの性能があるのか、交換時期にきているのか、をだいたい把握できればと思い、アバウトではありますが測定してみました。 測定方法の紹介 アプリとかではなく、ガジェット「RT-USBVAC2」を使います。 ルートアール USB 簡易電圧・電流チェッカー 積算機… <h1>iPhoneのバッテリー劣化度をアバウトに調べてみた</h1> <h2>目次</h2> <ul> <li><p>概要</p></li> <li><p>測定方法の紹介</p></li> <li><p>結果</p></li> </ul> <h2>概要</h2> <p>Appleは性能が80%未満になったら無償交換してくれる制度があります。(Apple Care加入者)</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fwww.lifehacker.jp%2F2015%2F07%2F150707_applecare_battery80.html" title="AppleCareが性能80%未満のバッテリーを無償交換 | ライフハッカー[日本版]" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"><a href="http://www.lifehacker.jp/2015/07/150707_applecare_battery80.html">AppleCareが性能80%未満のバッテリーを無償交換 | ライフハッカー[日本版]</a></iframe><cite class="hatena-citation"><a href="http://www.lifehacker.jp/2015/07/150707_applecare_battery80.html">www.lifehacker.jp</a></cite></p> <p>自分のバッテリーはどれくらいの性能があるのか、交換時期にきているのか、をだいたい把握できればと思い、アバウトではありますが測定してみました。</p> <h2>測定方法の紹介</h2> <p>アプリとかではなく、ガジェット「RT-USBVAC2」を使います。</p> <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00TKACMZC/devilsuke-22/"><img src="http://ecx.images-amazon.com/images/I/51EaQ6j2PEL._SL160_.jpg" class="hatena-asin-detail-image" alt="ルートアール USB 簡易電圧・電流チェッカー 積算機能・時間・ワットVA同時表示対応 RT-USBVAC2" title="ルートアール USB 簡易電圧・電流チェッカー 積算機能・時間・ワットVA同時表示対応 RT-USBVAC2"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00TKACMZC/devilsuke-22/">ルートアール USB 簡易電圧・電流チェッカー 積算機能・時間・ワットVA同時表示対応 RT-USBVAC2</a></p><ul><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> ルートアール</li><li><span class="hatena-asin-detail-label">メディア:</span> エレクトロニクス</li><li><a href="http://d.hatena.ne.jp/asin/B00TKACMZC/devilsuke-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p>消費電力[W]・通電時間[秒]・通電容量[mAh]が測定でき、これらが10ページあります。 1ページ目はiPhone・2ページ目はAndroid、のように使い分けることができ、それぞれ電源から抜いてもデータが保存されます。</p> <p>今回は完全にバッテリーをカラにした状態からRT-USBVAC2の任意のページをリセットして、通電容量を取得し、私が使っているiPhone 6 Plusのバッテリー容量の2915mAhと比較する、という手法です。</p> <p>もちろん安いガジェットで誤差があるのと、充電中にiPhoneの電源が入っているので、実際よりも多い電流が流れているであろうことが予想されるので、あくまで気休めな方法とお考えください。</p> <h2>結果</h2> <p>通電容量</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150729/20150729060627.jpg" alt="f:id:madachugakusei:20150729060627j:plain" title="f:id:madachugakusei:20150729060627j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>2854mAh</p> <p>通電時間</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150729/20150729060715.jpg" alt="f:id:madachugakusei:20150729060715j:plain" title="f:id:madachugakusei:20150729060715j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>4時間1分3秒</p> <p>消費電力</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150729/20150729060648.jpg" alt="f:id:madachugakusei:20150729060648j:plain" title="f:id:madachugakusei:20150729060648j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>1.786W</p> <p>消費電力は充電が完了しているのでほとんどないですね。</p> <p>さて、劣化度ですが、</p> <pre class="code" data-lang="" data-unlink>=(2915-2854)/2915*100 = 2.1%</pre> <p>Appleのバッテリー交換の基準となる性能80%、に合わせると</p> <pre class="code" data-lang="" data-unlink>=(2854)/2915*100 = 97.9%</pre> <p>と、まだまだ交換しなくて大丈夫そうでした!</p> <hr /> <p>以上</p> madachugakusei Windows PCのバッテリーの劣化度を取得する hatenablog://entry/8454420450103662808 2015-07-28T08:26:43+09:00 2015-07-28T08:26:43+09:00 Windows PCのバッテリーの劣化度を取得する 目次 環境 バッテリー容量とバッテリーの最大容量を取得する バッテリーの劣化度を計算する 概要 Windows PCのバッテリーのもちが悪くなってきたなと思ってきたとき、実際どれくらい劣化しているのか知りたくはありませんか? 単にパソコンのバッテリーがどれだけ性能が発揮できているのか調べてみるのも楽しいものです。 Appleは性能が80%未満になったら無償交換してくれる制度があります。(Apple Care加入者) AppleCareが性能80%未満のバッテリーを無償交換 | ライフハッカー[日本版]www.lifehacker.jp あなた… <h1>Windows PCのバッテリーの劣化度を取得する</h1> <h2>目次</h2> <ul> <li>環境</li> <li>バッテリー容量とバッテリーの最大容量を取得する</li> <li>バッテリーの劣化度を計算する</li> </ul> <h2>概要</h2> <p>Windows PCのバッテリーのもちが悪くなってきたなと思ってきたとき、実際どれくらい劣化しているのか知りたくはありませんか? 単にパソコンのバッテリーがどれだけ性能が発揮できているのか調べてみるのも楽しいものです。</p> <p>Appleは性能が80%未満になったら無償交換してくれる制度があります。(Apple Care加入者)</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fwww.lifehacker.jp%2F2015%2F07%2F150707_applecare_battery80.html" title="AppleCareが性能80%未満のバッテリーを無償交換 | ライフハッカー[日本版]" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"><a href="http://www.lifehacker.jp/2015/07/150707_applecare_battery80.html">AppleCareが性能80%未満のバッテリーを無償交換 | ライフハッカー[日本版]</a></iframe><cite class="hatena-citation"><a href="http://www.lifehacker.jp/2015/07/150707_applecare_battery80.html">www.lifehacker.jp</a></cite></p> <p>あなたのパソコンのバッテリーは性能80%を超えていますか?</p> <h2>環境</h2> <p>Windows 7で行いました。 恐らくWindows Vista以上で可能かと思います。</p> <h2>バッテリー容量とバッテリーの最大容量を取得する</h2> <p>まずは、パソコンのバッテリーの状態を調べます。</p> <p>DOSコマンドにPowercfgというコマンドがあります。 次のサイトを参考にしました。</p> <p><a href="http://piton.2702m.com/?eid=867">Powercfg&#x30B3;&#x30DE;&#x30F3;&#x30C9;&#x3067;&#x30D0;&#x30C3;&#x30C6;&#x30EA;&#x306E;&#x72B6;&#x614B;&#x3092;&#x78BA;&#x8A8D;&#x3059;&#x308B; | Blog</a></p> <p><strong>コマンドプロンプトを右クリックの「管理者として実行」から起動します。</strong> (通常起動ではダメです!)</p> <p>次のコマンドを実行します。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>$ Powercfg /energy </pre> <p>コマンド終了までに1分以上かかります。</p> <p>終了するとコマンドプロンプトに 「詳細についてはxxxxxxを参照してください」 と出るのでxxxxxxをブラウザで開きます。</p> <p>コマンドプロンプトは画面内で右クリックして「範囲選択」を選ぶとxxxxxxを選択できるようになります。 選択状態でエンターキーを押すとコピーできています。</p> <p>xxxxxxには色々なメッセージがありますが、次の項目に注目します。</p> <table> <thead> <tr> <th> 容量の設計 </th> <th> 前回の完全充電 </th> </tr> </thead> <tbody> <tr> <td> 47290 </td> <td> 39420 </td> </tr> </tbody> </table> <p>これがバッテリーの状態になります。</p> <h2>バッテリーの劣化度を計算する</h2> <p>劣化度は自分で計算する必要があります。 計算式は次のとおりです。</p> <pre class="code" data-lang="" data-unlink>= (容量の設計 - 前回の完全充電) / 容量の設計</pre> <p>私の場合は</p> <pre class="code" data-lang="" data-unlink>= (47290 - 39420) / 47290 * 100 = 16.6%</pre> <p>となりました。</p> <table> <thead> <tr> <th> 劣化度 </th> <th> 性能 </th> </tr> </thead> <tbody> <tr> <td> 16% </td> <td> 100 - 16 = 84% </td> </tr> </tbody> </table> <p>となります。</p> <p>なんとか80%超えてました! 4年も前のパソコンなのでなかなか持っている方だと思っています^^</p> <hr /> <p>以上</p> madachugakusei 有線なのにネットワークの速度が遅い意外な原因 hatenablog://entry/8454420450102647814 2015-07-27T00:30:00+09:00 2015-07-28T22:57:39+09:00 有線なのにネットワークの速度が遅い意外な原因 目次 概要 有線なのにネットワークの速度が遅い意外な原因 設定を疑う 物理デバイスを疑う 番外編 概要 設定を疑う 「有線は無線より速い」、この言葉だけを信じていてハマッッタことがあるのでご紹介します。 有線なのにネットワークの速度が遅い意外な原因 FreeNASというNAS専門の"OS"があります。 今回FreeNASについての詳細は割愛しますが、NASなので、LAN経由でアクセスできるHDDという感じです。 CrystalDiskMarkというソフトを使って速度のベンチマークを測定してみました。 こんな感じになりました。 これは非常に遅いです。… <h1>有線なのにネットワークの速度が遅い意外な原因</h1> <h2>目次</h2> <ul> <li><p>概要</p></li> <li><p>有線なのにネットワークの速度が遅い意外な原因</p> <ul> <li><p>設定を疑う</p></li> <li><p>物理デバイスを疑う</p></li> </ul> </li> <li><p>番外編</p></li> </ul> <h2>概要</h2> <h3>設定を疑う</h3> <p>「有線は無線より速い」、この言葉だけを信じていてハマッッタことがあるのでご紹介します。</p> <h2>有線なのにネットワークの速度が遅い意外な原因</h2> <p>FreeNASというNAS専門の"OS"があります。 今回FreeNASについての詳細は割愛しますが、NASなので、LAN経由でアクセスできるHDDという感じです。</p> <p>CrystalDiskMarkというソフトを使って速度のベンチマークを測定してみました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150723/20150723070611.png" alt="f:id:madachugakusei:20150723070611p:plain" title="f:id:madachugakusei:20150723070611p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>こんな感じになりました。</p> <p>これは非常に遅いです。</p> <p>FreeNASの設定の問題を疑い、samba(CIFS)の設定、ディスクの設定などを色々と弄ってみましたが、変化なしでした。</p> <p>そういえば、ルーターがボトルネックかどうかを調べるにはどうすればいいのかと思い、ベンチマーク測定中にタスクマネージャーからネットワークの項目を見てみました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150723/20150723070623.png" alt="f:id:madachugakusei:20150723070623p:plain" title="f:id:madachugakusei:20150723070623p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>リンク速度が、理論値の最大速度ですね。</p> <p>なんと10%程度しか使われていませんでした。</p> <h3>物理デバイスを疑う</h3> <p>ここでようやくLANケーブルを疑いにかかりました。</p> <p>調べてみると、ルータとFreeNASをつなぐケーブルがCAT5の規格であることがわかりました。</p> <p>参考</p> <p><a href="http://hikaku.cman.jp/lan_cable_standard/">LAN&#x30B1;&#x30FC;&#x30D6;&#x30EB;&#x7A2E;&#x985E;&#x30FB;&#x30AB;&#x30C6;&#x30B4;&#x30EA;&#x30FC;&#x306B;&#x3088;&#x308B;&#x901A;&#x4FE1;&#x901F;&#x5EA6;&#x6BD4;&#x8F03;&#xFF08;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AF;&#xFF09;</a></p> <p>試しに、CAT5のケーブルをメインPCに使用。 FreeNASにはCAT5eを使用して測定してみました。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150723/20150723070721.png" alt="f:id:madachugakusei:20150723070721p:plain" title="f:id:madachugakusei:20150723070721p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>気持ちいほどに帯域を使いこなせている!</p> <p>結局ケーブルを買い直し、すべてCAT6へ移行しました。</p> <p>その状態でのベンチマークは次の通りです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150723/20150723070652.png" alt="f:id:madachugakusei:20150723070652p:plain" title="f:id:madachugakusei:20150723070652p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150723/20150723070706.png" alt="f:id:madachugakusei:20150723070706p:plain" title="f:id:madachugakusei:20150723070706p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>↓今回買ったLANケーブルの規格の位置づけ</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150722/20150722222210.jpg" alt="f:id:madachugakusei:20150722222210j:plain" title="f:id:madachugakusei:20150722222210j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>(今更ながら帯域の多い(≒ロスの少ない)CAT6Aにすれば良かったと後悔中。)</p> <h2>番外編</h2> <p>ついでに周りにあるストレージの速度を測ってみました。 SSDが圧倒的。。</p> <p>恐らくメインPCはSSDをRAID0の構成だったと思うので、群を抜いて爆速なのだと思います。</p> <p>CドライブのSSD</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150723/20150723070740.png" alt="f:id:madachugakusei:20150723070740p:plain" title="f:id:madachugakusei:20150723070740p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>外付けのHDD</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150723/20150723070755.png" alt="f:id:madachugakusei:20150723070755p:plain" title="f:id:madachugakusei:20150723070755p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150722/20150722222217.jpg" alt="f:id:madachugakusei:20150722222217j:plain" title="f:id:madachugakusei:20150722222217j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>USB(SSD)</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150723/20150723070807.png" alt="f:id:madachugakusei:20150723070807p:plain" title="f:id:madachugakusei:20150723070807p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00DZPUOUI/devilsuke-22/"><img src="http://ecx.images-amazon.com/images/I/31t8vh8rJdL._SL160_.jpg" class="hatena-asin-detail-image" alt="SanDisk/サンディスク USBメモリー USB Flash Drive Extreme USB3.0対応 64GB SDCZ80-064G-G46" title="SanDisk/サンディスク USBメモリー USB Flash Drive Extreme USB3.0対応 64GB SDCZ80-064G-G46"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00DZPUOUI/devilsuke-22/">SanDisk/サンディスク USBメモリー USB Flash Drive Extreme USB3.0対応 64GB SDCZ80-064G-G46</a></p><ul><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> SanDisk</li><li><span class="hatena-asin-detail-label">メディア:</span> Personal Computers</li><li><a href="http://d.hatena.ne.jp/asin/B00DZPUOUI/devilsuke-22" target="_blank">この商品を含むブログを見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <hr /> <p>以上</p> madachugakusei CarouselではPNGファイルが表示されない hatenablog://entry/8454420450103026539 2015-07-26T00:30:00+09:00 2016-01-03T00:27:54+09:00 CarouselではPNGファイルが表示されない 残念ながら本記事で紹介しているCarouselというアプリは2016年3月31日をもってサービスを終了することになりました。 目次 概要 原因 概要 こちらのエントリーでCarouselで写真の一括保存方法を紹介したのですが、一部の写真がCarouselに表示されなくて困ったので調べてみました。 madachugakusei.hatenablog.com 原因 公式に書いてありました。 www.dropbox.com Dropbox では 15 KB 未満または .png 形式の画像ファイルはフィルタによって除外されます。通常、この条件に当ては… <h1>CarouselではPNGファイルが表示されない</h1> <p><strong>残念ながら本記事で紹介しているCarouselというアプリは2016年3月31日をもってサービスを終了することになりました。</strong></p> <h2>目次</h2> <ul> <li><p>概要</p></li> <li><p>原因</p></li> </ul> <h2>概要</h2> <p>こちらのエントリーでCarouselで写真の一括保存方法を紹介したのですが、一部の写真がCarouselに表示されなくて困ったので調べてみました。</p> <p><iframe src="http://madachugakusei.hatenablog.com/embed/2015/07/25/112548" title="Dropboxの写真をカメラロールに一括保存できる意外なアプリ - まだ中学生のブログ" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://madachugakusei.hatenablog.com/entry/2015/07/25/112548">madachugakusei.hatenablog.com</a></cite></p> <h2>原因</h2> <p>公式に書いてありました。</p> <p><iframe src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.dropbox.com%2Fhelp%2F1978%3Fpath%3Dmobile" title="Why aren&#39;t my photos appearing in the mobile app? (Dropbox Help Center)" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="https://www.dropbox.com/help/1978?path=mobile">www.dropbox.com</a></cite></p> <blockquote><p>Dropbox では 15 KB 未満または .png 形式の画像ファイルはフィルタによって除外されます。通常、この条件に当てはまる画像はアイコンかサムネイルであるため、このような画像を除外することで [写真] タブを整理しやすくしています。</p></blockquote> <p>だそうです。</p> <p>iPhoneのスクリーンショットはPNGで保存されるため、それのアップロード&表示が対応しているため、PNG限定でフィルタリングしているとは気づきませんでした。</p> <p>つまり、 <strong>パソコンで保存したPNG形式の写真がCarouselで表示されない</strong>ということになります。 ご注意ください。</p> <hr /> <p>以上</p> madachugakusei Dropboxの写真をカメラロールに一括保存できる意外なアプリ hatenablog://entry/8454420450102781497 2015-07-25T11:25:48+09:00 2016-01-03T00:27:29+09:00 Dropboxの写真をカメラロールに一括保存できる意外なアプリ 残念ながら本記事で紹介しているCarouselというアプリは2016年3月31日をもってサービスを終了することになりました。 目次 概要 DropBoxの写真をカメラロールに一括保存する方法 概要 DropboxはiPhone→Dropboxは複数選択してまとめて保存ができます。 しかし、Dropbox→iPhoneは一つずつ写真を開いて保存、としなければなりません。 これは多くの写真をiPhoneに取り込みたいときに煩わしいです。 フリーのアプリを探しましたが、Dropbox操作は有料となるファイラーや、広告が多くて使いにくいア… <h1>Dropboxの写真をカメラロールに一括保存できる意外なアプリ</h1> <p><strong>残念ながら本記事で紹介しているCarouselというアプリは2016年3月31日をもってサービスを終了することになりました。</strong></p> <h2>目次</h2> <ul> <li><p>概要</p></li> <li><p>DropBoxの写真をカメラロールに一括保存する方法</p></li> </ul> <h2>概要</h2> <p>DropboxはiPhone→Dropboxは複数選択してまとめて保存ができます。</p> <p>しかし、Dropbox→iPhoneは一つずつ写真を開いて保存、としなければなりません。 これは多くの写真をiPhoneに取り込みたいときに煩わしいです。</p> <p>フリーのアプリを探しましたが、Dropbox操作は有料となるファイラーや、広告が多くて使いにくいアプリばかりです。</p> <p>そんなところに、Dropbox→iPhoneの一括保存を実現する意外なアプリがありました。</p> <p>それはCarouselです。</p> <p>なぜ意外かと言うと、Dropboxと同じ会社が作ってるからです。 ただの灯台下暗し。</p> <h2>DropBoxの写真をカメラロールに一括保存する方法</h2> <p>Carouselで写真をカメラロールへ一括保存する方法をご紹介します。</p> <p>写真を <strong>長押し</strong> するこすることで選択モードになります。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150725/20150725111424.png" alt="f:id:madachugakusei:20150725111424p:plain" title="f:id:madachugakusei:20150725111424p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>日付の横のチェックをタップすると、その日の写真を丸ごと選択することもできます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150725/20150725111447.png" alt="f:id:madachugakusei:20150725111447p:plain" title="f:id:madachugakusei:20150725111447p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>画面のどこでもよいので左へスワイプすると、時間軸が出現します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150725/20150725111515.png" alt="f:id:madachugakusei:20150725111515p:plain" title="f:id:madachugakusei:20150725111515p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>この軸をなぞると、高速にその日付まで移動できます。 iPhoneに保存したい画像をひと通り選択したら、いよいよエクスポートします。</p> <p>方法は2通り</p> <p>1つ目。 右上の「。。。」をタップ</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150725/20150725111532.png" alt="f:id:madachugakusei:20150725111532p:plain" title="f:id:madachugakusei:20150725111532p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>「写真○○件を保存」</p> <p>2つ目。 下の写真の赤丸をタップ。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150725/20150725111552.png" alt="f:id:madachugakusei:20150725111552p:plain" title="f:id:madachugakusei:20150725111552p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>「保存」</p> <h2>注意</h2> <p>Carouselでは表示されない画像がありますのでご注意ください。</p> <p>詳しくはこちらで書いています。</p> <p><iframe src="http://madachugakusei.hatenablog.com/embed/2015/07/26/003000" title="CarouselではPNGファイルが表示されない - まだ中学生のブログ" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe><cite class="hatena-citation"><a href="http://madachugakusei.hatenablog.com/entry/2015/07/26/003000">madachugakusei.hatenablog.com</a></cite></p> <hr /> <p>以上</p> madachugakusei 会社をやめることが決まってから朝活を始めた hatenablog://entry/8454420450101543069 2015-07-15T06:12:42+09:00 2015-07-15T06:12:42+09:00 会社をやめることが決まってから朝活を始めた 目次 概要 背景 会社紹介 私の勤務体系 会社を辞めることになった 現在の勤務体系 今だからこそ朝活 朝活の効果 心のゆとり 出社時に気分が良い 趣味が捗る おわりに 概要 会社を辞めることになって、残業しなくて良くなって朝活を始めました。 その背景と効果をご紹介します。 背景 会社紹介 私はIT系に勤めています。B to Cを中心にWebコンテンツの開発をする会社です。 世間ではブラック企業なんて言葉が流行っていますが、恐らく、ブラック企業と認定されるような会社ではありません。 人事いわく、平均残業時間は30時間程度らしいです。 私の勤務体系 私は… <h1>会社をやめることが決まってから朝活を始めた</h1> <h2>目次</h2> <ul> <li><p>概要</p></li> <li><p>背景</p> <ul> <li><p>会社紹介</p></li> <li><p>私の勤務体系</p></li> <li><p>会社を辞めることになった</p></li> <li><p>現在の勤務体系</p></li> <li><p>今だからこそ朝活</p></li> </ul> </li> <li><p>朝活の効果</p> <ul> <li><p>心のゆとり</p></li> <li><p>出社時に気分が良い</p></li> <li><p>趣味が捗る</p></li> </ul> </li> <li><p>おわりに</p></li> </ul> <h2>概要</h2> <p>会社を辞めることになって、残業しなくて良くなって朝活を始めました。 その背景と効果をご紹介します。</p> <h2>背景</h2> <h3>会社紹介</h3> <p>私はIT系に勤めています。B to Cを中心にWebコンテンツの開発をする会社です。 世間ではブラック企業なんて言葉が流行っていますが、恐らく、ブラック企業と認定されるような会社ではありません。</p> <p>人事いわく、平均残業時間は30時間程度らしいです。</p> <h3>私の勤務体系</h3> <p>私は、まだ技術者として未熟である上にリカバリの利かない一人案件を担当。 必死でリカバリしようとするのは休日に仕事すること。</p> <p>リスケにリスケを重ねて、"今は忙しいから頑張りどきだね"とまわりから言われて10ヶ月、平均残業時間が70時間程度でした。 平均って、波があるやつじゃなくて、分散が小さいやつ、常に70時間くらいなやつです。</p> <p>朝は起きてすぐ出社し、帰りは夕飯も食べずに寝るだけ。 睡眠がとにかく大切。</p> <p>平日の睡眠時間はこんな感じ。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/m/madachugakusei/20150714/20150714225952.png" alt="f:id:madachugakusei:20150714225952p:plain" title="f:id:madachugakusei:20150714225952p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>表にまとめるとこんな感じ。</p> <table> <thead> <tr> <th> 日付 </th> <th> 睡眠時間 </th> </tr> </thead> <tbody> <tr> <td> 4/6(月) </td> <td> 6時間51分 </td> </tr> <tr> <td> 4/7(火) </td> <td> 4時間33分 </td> </tr> <tr> <td> 4/8(水) </td> <td> 5時間6分 </td> </tr> <tr> <td> 4/9(木) </td> <td> 4時間31分 </td> </tr> <tr> <td> 4/10(金) </td> <td> 3時間46分 </td> </tr> <tr> <td> 4/11(土) </td> <td> 5時間10分 </td> </tr> <tr> <td> 4/12(日) </td> <td> 6時間50分 </td> </tr> </tbody> </table> <p>UP24で常に自分の睡眠状態は意識しています。</p> <p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00JA6YORA/devilsuke-22/"><img src="http://ecx.images-amazon.com/images/I/412OhJyFGdL._SL160_.jpg" class="hatena-asin-detail-image" alt="Jawbone UP24 by JAWBONE JP ライフログ リストバンド 活動量計 ( アプリ連動 / Bluetooth 同期 / オニキス / サイズ M ) JL01-52M-JP" title="Jawbone UP24 by JAWBONE JP ライフログ リストバンド 活動量計 ( アプリ連動 / Bluetooth 同期 / オニキス / サイズ M ) JL01-52M-JP"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00JA6YORA/devilsuke-22/">Jawbone UP24 by JAWBONE JP ライフログ リストバンド 活動量計 ( アプリ連動 / Bluetooth 同期 / オニキス / サイズ M ) JL01-52M-JP</a></p><ul><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> Jawbone</li><li><span class="hatena-asin-detail-label">発売日:</span> 2014/04/08</li><li><span class="hatena-asin-detail-label">メディア:</span> エレクトロニクス</li><li><a href="http://d.hatena.ne.jp/asin/B00JA6YORA/devilsuke-22" target="_blank">この商品を含むブログ (9件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> <p>たかが70時間、ブラック企業なんて100時間とか残業しているんですよ。</p> <p>でも、<strong><em>しんどい</em></strong>。</p> <p>もっとしんどい人もいる。 <strong>でも私もとてもしんどかったです。</strong></p> <p>まだ20代だから体力はある方だと思います。 <strong>でも疲労で苦痛で苦痛で仕方なかったです。</strong></p> <p>(自分の非は棚にあげています。 仕事力がない、さらにはアラートをあげるのが下手、など、私自身、私を守る手段はあったと思います。)</p> <h3>会社を辞めることになった</h3> <p>たまたまです。 縁があってお話をいただきました。</p> <p>だって転職活動なんてしている余裕はなかったですし。</p> <p>(ヘッドハンティングでもない。残念。)</p> <h3>現在の勤務体系</h3> <p>引き継ぎメインです。 案件自体も落ち着いてきていて、あまり残業がなくなりました。</p> <h3>今だからこそ朝活</h3> <p>以前と同じ時間に起きて、1時間遅く出社することにしました。 その1時間を<strong><em>趣味</em></strong>に使っています。</p> <h2>朝活の効果</h2> <h3>心のゆとり</h3> <p>朝起きてから出発までに心のゆとりがあることが素晴らしいです。 以前は、健康のために何か朝食をと思い、無理やりヨーグルトを流しこむ日々でした。 でも今は、起きて15分もすれば自然とお腹がすいてくるので、美味しく朝食を摂れます。</p> <h3>出社時に気分が良い</h3> <p>なにせ、趣味ですから、朝から楽しい気分を味わっているんです。 その状態だと、いくら辞める会社への出社でも、ある程度前向きに出社できます。</p> <h3>趣味が捗る</h3> <p>私は趣味でブログを書いたり、ネットショップを経営したりしているのですが、休日にお酒を飲みながらダラダラブログを書くのも楽しいですが、朝の時間制限がある状態は、ものすごく捗ります。</p> <p>これは時間を決めて目標をたてて行動するからですね。</p> <p>これは仕事にも活かせそうです。 短時間の目標をたててみよう。</p> <p>(そうだ、ついでにネットショップの宣伝をしよう。)</p> <p><iframe src="//hatenablog-parts.com/embed?url=http%3A%2F%2Fshop.guna-guna-aroma.com%2F" title="Guna-Guna-Aroma on the BASE" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;"><a href="http://shop.guna-guna-aroma.com/">Guna-Guna-Aroma on the BASE</a></iframe><cite class="hatena-citation"><a href="http://shop.guna-guna-aroma.com/">shop.guna-guna-aroma.com</a></cite></p> <h2>おわりに</h2> <p>朝活は良いことずくめです。 朝活ができると仕事も集中できて残業が減らせて朝活ができる!という良い循環に入れそうです。</p> <p>でもきっと、簡単に言ってしまった「仕事も集中できて残業が減らせて」ここが一番難しいんだろうなぁ。</p> <hr /> <p>以上</p> madachugakusei pythonで自作クラスの重複のないリストを作成する hatenablog://entry/8454420450099987838 2015-07-03T02:34:09+09:00 2015-07-03T02:34:09+09:00 pythonで自作クラスの重複のないリストを作成する 目次 概要 コード 概要 pythonで、自作クラスをリストに詰めて、重複を除きたいことがあったので、実現方法を記します。 リスト内のリストの重複をはじくのにも使えます。 プリミティブな型をリストに詰めて重複を除外したい場合は num_list = list() num_list.append(1) num_list.append(1) num_list.append(2) num_list = list(set(num_list)) for n in num_list: print n 結果 1 2 とできます。 しかし、自作クラスの場合… <h1>pythonで自作クラスの重複のないリストを作成する</h1> <h2>目次</h2> <ul> <li><p>概要</p></li> <li><p>コード</p></li> </ul> <h2>概要</h2> <p>pythonで、自作クラスをリストに詰めて、重複を除きたいことがあったので、実現方法を記します。 リスト内のリストの重複をはじくのにも使えます。</p> <p>プリミティブな型をリストに詰めて重複を除外したい場合は</p> <pre class="code lang-python" data-lang="python" data-unlink> num_list = <span class="synIdentifier">list</span>() num_list.append(<span class="synConstant">1</span>) num_list.append(<span class="synConstant">1</span>) num_list.append(<span class="synConstant">2</span>) num_list = <span class="synIdentifier">list</span>(<span class="synIdentifier">set</span>(num_list)) <span class="synStatement">for</span> n <span class="synStatement">in</span> num_list: <span class="synIdentifier">print</span> n </pre> <p>結果</p> <pre class="code" data-lang="" data-unlink>1 2</pre> <p>とできます。 しかし、自作クラスの場合は意図した動きにならなりません。</p> <p>例えば、ノードの列挙で"経路"を表現するとして、経路をリストでもち、 重複する経路を除外したい場合などに有効です。</p> <p><strong>eq</strong>()のオーバーライドとかは不要で、 <strong>hash</strong>()をオーバーライドするだけです。</p> <p>処理速度を気にしない場合は、メンバ変数を文字列化するだけでもオッケーです。</p> <h2>コード</h2> <pre class="code lang-python" data-lang="python" data-unlink><span class="synComment">#!/usr/bin/python</span> <span class="synComment"># -*- coding: utf-8 -*-</span> <span class="synStatement">class</span> <span class="synIdentifier">MyList</span>(<span class="synIdentifier">list</span>): <span class="synStatement">def</span> <span class="synIdentifier">__init__</span>(self): <span class="synStatement">pass</span> <span class="synComment"># def __eq__(self, other):</span> <span class="synComment"># return self == other</span> <span class="synComment">#</span> <span class="synComment"># def __ne__(self, other):</span> <span class="synComment"># return not self.__eq__(other)</span> <span class="synStatement">def</span> <span class="synIdentifier">__hash__</span>(self): <span class="synConstant">'''</span> <span class="synConstant"> リスト型はハッシュをもたないため、実装</span> <span class="synConstant"> 文字列化してハッシュとしている</span> <span class="synConstant"> '''</span> <span class="synStatement">return</span> <span class="synIdentifier">hash</span>(<span class="synIdentifier">str</span>(self)) <span class="synStatement">def</span> <span class="synIdentifier">main</span>(): route1 = MyList() <span class="synComment"># ハッシュを実装したリスト</span> route1.append(<span class="synConstant">'交差点A'</span>) route1.append(<span class="synConstant">'交差点B'</span>) route1.append(<span class="synConstant">'交差点C'</span>) route1.append(<span class="synConstant">'交差点D'</span>) route2 = MyList() <span class="synComment"># ハッシュを実装したリスト</span> route2.append(<span class="synConstant">'交差点X'</span>) route2.append(<span class="synConstant">'交差点Y'</span>) route2.append(<span class="synConstant">'交差点Z'</span>) <span class="synComment"># route2と同じ要素をもつ</span> route3 = MyList() <span class="synComment"># ハッシュを実装したリスト</span> route3.append(<span class="synConstant">'交差点X'</span>) route3.append(<span class="synConstant">'交差点Y'</span>) route3.append(<span class="synConstant">'交差点Z'</span>) route_list = <span class="synIdentifier">list</span>() <span class="synComment"># 通常のリスト</span> route_list.append(route1) route_list.append(route2) route_list.append(route3) route_set = <span class="synIdentifier">set</span>(route_list) <span class="synStatement">for</span> route <span class="synStatement">in</span> route_set: <span class="synIdentifier">print</span> <span class="synConstant">'-------------'</span> <span class="synStatement">for</span> crossing <span class="synStatement">in</span> route: <span class="synIdentifier">print</span> crossing <span class="synStatement">if</span> __name__ == <span class="synConstant">'__main__'</span>: main() </pre> <pre class="code" data-lang="" data-unlink>------------- 交差点X 交差点Y 交差点Z ------------- 交差点A 交差点B 交差点C 交差点D</pre> <hr /> <p>以上</p> madachugakusei sedの末尾に任意の文字を追加しようとしたら意図しない改行が入る hatenablog://entry/8454420450099589350 2015-07-01T00:33:53+09:00 2015-07-01T00:33:53+09:00 sedの末尾に任意の文字を追加しようとしたら意図しない改行が入る 目次 概要 sedの末尾に任意の文字を追加しようとしたら意図しない改行が入る 環境 事象 原因 解決策 概要 sedの末尾に任意の文字を追加しようとしたら意図しない改行が入る 環境 Windows 7 Virtual Box Ubuntu 14.04.02 UbuntuからWidowsのフォルダを共有 下記のコマンドでホストであるWindowsのディレクトリをゲストのUbuntuでマウントしていました。 sudo mount -t vboxsf {フォルダ名} {マウント先} 事象 この状態でcsvファイルのカラムを増やすため、… <h1>sedの末尾に任意の文字を追加しようとしたら意図しない改行が入る</h1> <h2>目次</h2> <ul> <li><p>概要</p></li> <li><p>sedの末尾に任意の文字を追加しようとしたら意図しない改行が入る</p> <ul> <li><p>環境</p></li> <li><p>事象</p></li> <li><p>原因</p></li> <li><p>解決策</p></li> </ul> </li> </ul> <h2>概要</h2> <h2>sedの末尾に任意の文字を追加しようとしたら意図しない改行が入る</h2> <h3>環境</h3> <ul> <li>Windows 7</li> <li>Virtual Box Ubuntu 14.04.02</li> <li>UbuntuからWidowsのフォルダを共有</li> </ul> <p>下記のコマンドでホストであるWindowsのディレクトリをゲストのUbuntuでマウントしていました。</p> <pre class="code lang-sh" data-lang="sh" data-unlink>sudo mount <span class="synSpecial">-t</span> vboxsf <span class="synSpecial">{</span>フォルダ名<span class="synSpecial">}</span> <span class="synSpecial">{</span>マウント先<span class="synSpecial">}</span> </pre> <h3>事象</h3> <p>この状態でcsvファイルのカラムを増やすため、末尾に「,」を付け加えることにしました。</p> <pre class="code" data-lang="" data-unlink>1,hogehoge 2.fugafuga</pre> <p>のようなcsvファイルに対し</p> <pre class="code lang-sh" data-lang="sh" data-unlink><span class="synStatement">find . </span>-name <span class="synStatement">&quot;</span><span class="synConstant">*.csv</span><span class="synStatement">&quot;</span> <span class="synSpecial">-print0</span> | xargs <span class="synConstant">-0</span> <span class="synSpecial">-Ifile</span> <span class="synStatement">sed</span> <span class="synStatement">'</span><span class="synConstant">s/$/,/g</span><span class="synStatement">'</span> <span class="synSpecial">-i</span> file </pre> <p>を実行したところ、</p> <pre class="code" data-lang="" data-unlink>1,hogehoge , 2.fugafuga ,</pre> <p>となってしまいました。</p> <h3>原因</h3> <p>改行コードがCRLFであることでした。</p> <h3>解決策</h3> <pre class="code lang-sh" data-lang="sh" data-unlink>nkf <span class="synSpecial">-Lu</span> <span class="synSpecial">--overwrite</span> *.csv </pre> <p>で改行コードをLFへ変換。 先ほどのsedでうまくいきました。</p> <hr /> <p>以上</p> madachugakusei カップル専用アプリBetween(ビトウィーン) LINEにはできないこと hatenablog://entry/8454420450099417033 2015-06-29T23:53:44+09:00 2015-06-29T23:53:44+09:00 カップル専用アプリBetween(ビトウィーン) LINEにはできないこと 目次 概要 カップル専用アプリBetween(ビトウィーン) LINEにはできないこと BetweenとLINE 完全バックアップ マルチデバイスログイン おわりに 概要 チャットアプリといえばLINEが主流ですが、カップル専用のチャットアプリもあります。 カップル専用アプリBetween(ビトウィーン) がLINEではできないけれども実現したいことを紹介します。 カップル専用アプリBetween(ビトウィーン) LINEにはできないこと BetweenとLINE カップル専用アプリBetween(ビトウィーン)は、カ… <h1>カップル専用アプリBetween(ビトウィーン) LINEにはできないこと</h1> <h2>目次</h2> <ul> <li><p>概要</p></li> <li><p>カップル専用アプリBetween(ビトウィーン) LINEにはできないこと</p> <ul> <li><p>BetweenとLINE</p></li> <li><p>完全バックアップ</p></li> <li><p>マルチデバイスログイン</p></li> </ul> </li> <li><p>おわりに</p></li> </ul> <h2>概要</h2> <p>チャットアプリといえばLINEが主流ですが、カップル専用のチャットアプリもあります。 カップル専用アプリBetween(ビトウィーン) がLINEではできないけれども実現したいことを紹介します。</p> <h2>カップル専用アプリBetween(ビトウィーン) LINEにはできないこと</h2> <h3>BetweenとLINE</h3> <p>カップル専用アプリBetween(ビトウィーン)は、カップルでしかやり取りできない"LINE"というイメージがないでしょうか。</p> <p>メッセージが送れたり、写真が送れたり、アルバムが作れたり…。 確かにLINEでもできる機能ばかりです。</p> <p>二人の空間という精神的なメリットだけでなく、機能面においてLINEに優っている部分を紹介したいと思います。</p> <p><img src="http://keisukereo.com/it_cafe/wp-content/uploads/2014/08/between_vs_line_R.jpg" alt="" /></p> <h3>完全バックアップ</h3> <p>Betweenは別のスマホでログインさえすれば、完全に過去のやり取りが復元できます。</p> <p>ログインだけでは復元できないのは次のものだけ</p> <ul> <li>チャット画面の背景</li> <li>スタンプ</li> </ul> <p>これも、"ログインだけ"では復元できないだけで、スタンプは再度ダウンロード可能です。 もちろん購入したものは再度お金を払う必要はありません。</p> <p>LINEでは、グループのアルバムに関しては復元できますが、トーク履歴は消えてしまいます。 Androidでは移行機能はありますが、それは機種変など、事前準備ができる場合の話。 スマホが壊れた、紛失した、なんてときに、心の準備もなく思い出が消え去ったら、耐えられますか?</p> <h3>マルチデバイスログイン</h3> <p>Betweenは、2台以上の端末で同時にログインできます。 普段はiPhone、家ではタブレット、といった使い分けをすることもできます。</p> <p>LINEは、一番新しくログインした端末以外のデータは消え去ります。 これはセキュリティ上仕方ないかもしれませんが、Betweenなら可能なのです!</p> <p>通知がきた場合、もちろんiPhoneにもAndroidにもきますが、 AndroidでBetweenを開くと、iPhone側の通知は消えます。</p> <p>しかし、逆にiPhoneで先に見ると、Androidの通知はそのまま残ります。 通知ランプなどがある端末では、iPhoneで未読メッセージを見ても、Androidの通知ランプは光続けますのでご注意ください。</p> <h2>おわりに</h2> <ul> <li>完全バックアップ機能</li> <li>マルチデバイスログイン機能</li> </ul> <p>を紹介しました。 とりあえず2つだけですが、かなり強力な機能です。</p> <p>思い出を大切にするカップルならば、LINEだけよりも、Betweenを使う価値はあるのではないでしょうか。</p> <hr /> <p>以上</p> madachugakusei