たけぼーの備忘録

暇を持て余した人間の無意味なブログ

FireFoxのJsonビューアーがかなり便利

こんにちは。今日はFireFoxに関する話題です。

最近、といってももう去年の話ですが、FireFoxは新バージョンであるFireFox Quantumを発表し、話題となっています。
Mozillaによると、並列処理が効率的になり、急バージョンよりかなりの高速化に成功したそうで、Chromeよりも速くメモリ消費が少ないとか。

今日の内容とは直接関係はしないのですが、Chrome使いの私としてはQuantumは気になる存在でした。

今まで使ったことはなかったのですが、初めてインストールしました。

確かにメモリ消費は減っている気がします。表示もちょっと早いのかな?

今回はそんなFireFoxJSONビューアーについてです。

FireFoxJSONビューアー

JSONビューアーはその名の通り、JSONを表示するものなのですが、これが使いやすい!

URLにアクセスしてJSONが返されると、自動的にデータを読み込み、見やすく階層表示してくれます。

私は今REST APIを使ったアプリの開発をしているのですが、開発中に偶然FireFoxJSONを取得した際、きれいに整頓されて表示され、驚きました。
ほんとに見やすい!

f:id:takebo_blog:20180116185532j:plain
こんなJSONデータが返されるURLにアクセスしたら

f:id:takebo_blog:20180116185535j:plain
このように、完璧に整理されます!非常に見やすい!
何が返されているのか一目瞭然です。

こういうことをしてくれるソフトは恐らく他にもたくさんあるのだろうけど、ブラウザで読み込むだけで整理されるのは大きいですね。それもプラグイン無しで。

Chromeなんか、読み込んだだけではJSONの整形すらしてくれませんからね。

ということで、今回はFireFoxJSONビューアーについて、でした。
この機能自体は、以前からFireFoxに搭載されていたようですので、知っている方には、何を今更言ってるんだ、という記事になったと思います。ご勘弁ください。

非常に便利ですので、皆さんも使ってみてくださいね。

ではまた。

スマホ選びで後悔しないために見ておくポイントを書き出してみる

Android robot toy
こんにちは。
今回は、スマホに関する話題です。

前振り

つい最近、本格的な冬が到来しました。というとこは、次は春がきますね。ということは、機種変更の時期がやってきますね(笑)

かなり強引かもしれませんが、私は2年前の3月に機種変更しましたので、ついに2年縛りが解ける時期な訳です。3月は値引き合戦となるため、3月に契約した方も多いのではないでしょうか。

現在、Xperia Z5を使用しています。auで契約し、キャンペーンをこねくり回して加入したので、月々なんと3500円!

格安SIMもびっくりな安さです。

しかし、これは所謂MNPしたら一括0円!があった時代だからできたことで、今はさすがに厳しい状態です。

ということで、次の機種変更と共に格安SIMに乗り換えることを決意したのですが、なにせ種類が多い

格安SIMの話はまた今度まとめようかと思うのですが、今回はスマホについてです。

格安SIMにするなら、スマホはどれでもいいわけです。
主要3キャリアで売っているスマホ以外にも、この世にはたくさんのスマホがあります。

私は調べていて思いました。
どれがいいのかわからない!!と。
何を基準に選べばいいのか分からない!!と。

ということで、今回はそんな沢山のスマホから何を基準に選べばいいのか考えてみます。

よく知られているメーカー

HTC Android phone launch-20
格安SIMとセットで売られているスマホの中には、あまり聞き慣れない(でもその界隈ではかなり有名な)メーカーが沢山あります。

ということで、まずはそちらの説明から。

Sony

Xperiaシリーズを提供するソニー。特徴は何といってもカメラ音質です。
カメラ内のセンサーではトップクラスソニーは、搭載のカメラ性能が高いです。
また、Walkmanで培った音声処理技術で、どんなイヤホンでも素晴らしいクリアな音声が出ます。本体内蔵のスピーカー性能も高いです。

シャープ

鴻海に吸収されたことで有名なシャープ。AQUOSシリーズを提供します。
鴻海に吸収されてから、シャープは丸くなった?気がします。以前は、AndroidのOSアップデートは絶対に提供しないことで有名で、rootを取りにくいようなシステム改良が行われていたりと、堅いイメージだったのですが、最近は2年間のOSバージョンアップを確約するなど、新たな動きを見せています。
液晶画面に搭載されているIGZOは、省電力性能がかなり高いことが特徴で、このIGZOのおかげで鴻海に救われたとかそうでなかったとか。

FUJITSU

PC部門で有名な富士通。ARROWSシリーズを提供しています。
初期の頃は、ガラケーにあった機能をすべて詰め込みすぎて、発熱がひどく、巷ではカイロとしか使えないなんて言われる始末となりました。
しかし、今では安定した性能のスマホを提供し、日本独自の機能であるワンセグおサイフケータイを搭載している、なんとも日本向けなスマホを作っています。

京セラ

京セラは、主要3キャリアでも安い部類のスマホとしてよく登場します。
ガラケーの延長のようなスマホも多く、ガラケーユーザーには使いやすいように思います。
まだガラケーを製造している数少ないメーカーであることも関係あるかもしれません。

Samsung

サムスンは、GALAXYシリーズを提供する韓国メーカーです。
Galaxyシリーズといえば、バッテリー発火で一時期お茶の間を賑わせ、大量のリコールとなり、機内持ち込みが禁止になったり、挙げ句の果てには戦闘ゲームの武器としてGalaxyを使うというMODが出たりと、大騒ぎになりました。
しかし、現在ではそんな心配はなく、かなりの高性能スマホを提供し、シェアは世界一です。

LG

テレビ部門で日本でも有名なLGは、auのisaiなどを提供する韓国メーカーです。
音質や画面の美しさにこだわった端末が打ち出されており、ガラケースマホを掛け合わせたガラホを売り出したりしています。

HTC

htcは主にスマートフォンを製造する台湾メーカーです。
国内メーカーに比べて、低価格で高性能スマホが製造されています。
海外メーカーでは珍しく、おサイフケータイなどの日本特有の機能を持ったスマホが発売されていたりします。

ASUS

ASUSは台湾に本社を置くメーカーで、PCの製造でも有名です。
ZenFoneシリーズを販売しており、主要3キャリアではあまり見ませんが、低価格で性能の良いスマホとして世界的にも有名です。
ZenFoneシリーズは、ライトユーザー向けの低価格モデルからヘビーユーザー向けのハイスペックモデルまで様々な種類があります。名前が似ていても、スペックがまるっきり違ったりします。

HUAWEI

HUAWEIはPシリーズやMateシリーズなど様々なスマホを製造する中国メーカーです。
HUAWEI製のスマホは、HUAWEI独自に開発したSoC(CPUやGPUなどの複合体)を採用した端末が多く、低価格のスマホの中でも、かなり性能の高いのが特徴です。
またカメラに力を入れており、Leica監修のカメラを搭載したものもあります。
世界シェアも3位とかなりの売れ行きで、主要3キャリアではあまり見ませんが、格安SIMとのセットでは必ず選択肢の中に入っていると思います。

メーカーのまとめ

よく知られているメーカーはこんなところでしょうか。他にもメーカーは沢山あります。

私はソニー・シャープ・富士通スマホを持っていたことがあります。説明になんとなく感情がこもりすぎたかもしれません。特に富士通には…
海外メーカーは使ったことがないので、私が知る限り精一杯の知識で書きましたが、間違ってたら教えてください。

スペックを評価するポイント

メーカーの紹介が終わったところで、今度はスマホを買うときにどこを見比べたらいいのか、について話を移しましょう。

ポイントごとに書きますが、かなりマニアックな内容も含まれているかもしれませんので、困ったらスルーしてください。

SoC

CPUs
SoCはCPUやGPUなどをまとめたものです。ですので、スマホの処理能力を決める最も大事な部品です。
性能評価ではよくSoCが評価されます。

SoCを評価する上で、見なければならないのは、SoC名クロック周波数コア数ベンチマークです。

特に、ベンチマークはかなり役に立ちますので、覚えておきましょう。

ベンチマークとは、SoCの性能を数値化したもので、概ね数値が大きければ大きいほどよいです。

ベンチマークは様々な方法で行われていますが、有名なのはAntutuによるベンチマークです。
Antutuによるベンチマークの数字は、5000程度の差なら無視しても良いですが、やはり10000ほど違うと体感として大きく異なると言われています。

こちらに、ベンチマークの値が一覧で掲載されていますので、参考にしましょう。

クロック周波数とコア数はCPUに関係する数字です。
SoC内のCPUは処理全般を担当する部分です。
CPUはクロック周波数とコア数が性能に大きく影響し、一概には言えませんが、それぞれ数字が大きい方が性能が高い傾向にあります。
しかし、コア数が多いからといって高性能という訳ではなく、あくまで一つの指針としてとらえてください。

SoC名はQualcomm製のSnapdragonや、Mediatek製のもの、HiSilicon製のKirinサムスン製のExynosなどがあります。
他にも、PCではトップメーカーのIntel製のAtomというものがありますが、スマホではほとんど使用されていません。と言うよりも、Snapdragonが使われているものがほとんどです。

Snapdragon

Snapdragonは200シリーズ400シリーズ600シリーズ800シリーズの4種類があります。

  1. 200シリーズ
    ほぼ使われているものを見たことがありません。国内では簡単スマホなどに使われています。
    このシリーズは、いわゆるローエンドモデルで、性能の低いものとなります。
    あまり手を出さない方が身のためです。
  2. 400シリーズ
    エントリークラスのSoCで、安価なスマホに搭載されることが多いです。最近は8コアのものもありますが、クロック周波数は低く、安さを重視したモデルとなっています。
    このシリーズは、LINEやFacebookなどの使用がメインで、ゲームはあまりしない方は満足できる性能があります。
  3. 600シリーズ
    ミッドレンジクラスのSoCで、グラフィック性能はあまり高くありませんが、処理能力は高めのモデルです。
    最近では8コアのものが主流で、格安スマホの中でも値段が高い部類に搭載されることが多いです。
    もっとも新しいSnapdragon 660は、ハイエンドモデルのSnapdragon 810よりベンチマークが高く、600シリーズでも性能がかなりよいものが登場しています。
  4. 800シリーズ
    ハイエンドクラスのSoCで、各メーカーでもっとも性能の高いスマホはほぼこのシリーズが搭載されています。
    処理能力の高さはもちろんですが、グラフィック性能も高いので、3Dのゲームをやってももたつくことがありません。
    その分値段はお高いです。

Mediatek

MediatekはSnapdragonよりも低価格なモデルを販売していますが、性能はSnapdragonよりも劣っているものが多いです。
Snapdragon 200シリーズのものを選ぶぐらいならMediatekのものがいいですが、あえてMediatek搭載のものを選ぶ必要はないと思います。
安さ重視なら選択肢の一つとなるでしょう。
Helioシリーズというのがあり、こちらはやや性能が高いです。

Kirin

KirinはHUAWEI製のスマホに搭載されているSoCです。これを製造するHiSiliconはHUAWEIの子会社なので、HUAWEIスマホは製造コストが低く、低価格なのに高性能なSoCが多いです。
ですので、同様の価格帯のスマホの中でHUAWEI製のスマホは、やや性能が高いこともしばしばです。
Kirinはモデルによって性能が大きく違うため、ベンチマークを参考にしましょう。

Exynos

Exynosはサムスン製のスマホに搭載されるSoCです。しかし、すべてのサムスン製品に搭載されるわけではなく、比較的価格が控えめなスマホに搭載されるようです。

SoCのまとめ

結論をまとめておきましょう。長々と書いてきましたが、

  • SoCは名前クロック周波数コア数を参考にする
  • 性能評価はベンチマークが分かりやすい
  • 3DゲームをしないならSnapdragon 400シリーズでもやっていける
  • 3Dゲームをするなら、Snapdragon 800シリーズがベスト。600シリーズでもやっていける
  • Kirinはモデルごとに性能が違うから注意
  • MediatekとExynosはとりあえず置いておこう

といったところです。

対応周波数

tesco phone shop
日本では、docomoauSoftBankの3社がLTE回線を運営しており、格安SIMはこれらの会社から回線を借りて運営しています。
詳しくは書きませんが、格安SIMほとんどがdocomoで、mineoやUQmobileがau系、Y!mobileソフトバンク系です。

格安SIMスマホを使うときは、使う回線の周波数に対応しているかがポイントとなります。

特にauの周波数は特殊であるため、注意が必要です。

本来は4GLTEで契約していても、音声通話は3G回線で行うのが通常です。
しかし、最近では音声通話も4GLTEで行うVoLTEという技術が用いられるようになってきました。
つまり、音声通話をする際には、VoLTEに対応しているか、3G回線に対応しているかのどちらかが必要です。

auの3G回線世界的にも特殊なCDMA2000方式を使用しており、docomoSoftBankとは全く異なります。
そのため、auの3G回線に対応しているものはかなり少ないのが現状です。
また、VoLTEに対応しているかもバラバラのため、au回線で使えるスマホは数が限られています

au回線を使う予定の方は、ここに注意しなければなりません。

LTEや3Gなどは、Bandという数字で分けられており、

となっています。
3社ともBand 1を使っています。Band 1は海外でも広く使われているため、ほとんどのスマホがこれに対応しています。
不思議なのが、実はBand 26はBand 18としても活躍するので、Band 26に対応していれば、Band 18対応でなくても良いのです。

docomoでは、Band 1をメインとして運用しています。また東名阪ではBand 3にて速度を向上させています。Band 19はプラチナバンドと呼ばれ、電波につながりやすくしています。
docomoの場合、Band 1/3/19に対応していることが望ましいです。

auBand 18がメインです。Band 1も広く使われていますが、それだけでは不安定な場所もあるとか。
auの場合、Band 18(もしくは26)に対応していることが必要です。

SoftBankBand 1と8がメインのため、こちらに対応しなければなりません。

実際のところ、日本国内で売られているスマホなら、ほとんどがdocomoに対応しています。

周波数のまとめ

スマホを買うときには、対応Bandを調べてから買いましょう。

格安SIMでも速度が速いau格安SIMを使うなら、対応BandとauのVoLTE対応かを必ず確認しましょう。
auの3G回線に対応したものは本当に少ないので注意してください。

docomo系を使う方は、あまり深く気にしなくても大丈夫です。

メモリ

Memory
メモリは、CPUで処理するためにデータを一次的に置いておく場所で、4GBが主流です。
メモリは大きければ大きいほど良いです。

DSDS

SIM Card.
DSDSとは、スマホSIMカードを2枚搭載できる機能です。これは主要3キャリアで販売されるスマホにはない機能ですが、SIMを2枚指すことができると、2回線を同じスマホで使い分けることができます。

バッテリー

Connexion 48/52
バッテリーの容量は、mAhの値で表記されています。標準的なスマホでは、2500~3000mAhのバッテリーが搭載されています。

また、最近では急速充電の機能が搭載されたものがあり、短時間で充電ができるものがあります。

カメラ

Google Pixel XL smartphone
カメラの性能は皆さんもかなり重視するポイントではないでしょうか。
カメラの性能は、素数で評価されます。一般に画素数が高ければ、鮮明な写真が撮れます。

しかし、画素数の高さと実際の美しさは必ずしもイコールとはいえません

カメラセンサーから入った情報をうまく処理できるか、によって美しさが大きく変わります。

また、最近ではレンズを二つ搭載するモデルも現れ、スマホのカメラは混沌とした世界になっています。

このあたりは、「機種名 カメラ」で検索すると実際に撮影してみた方のレビューが見れたりします。

また、SoCのAntutuベンチマークのように、カメラの性能を数値化したものもあります。
それが、DxOMarkです。
https://www.dxomark.com/category/mobile-reviews/

これを書いている12月現在では、Pixel 2がiPhoneを抜いてトップのようです。

NFC

NFC stickers, wristband & key fob to experiment with!
NFCとは、おサイフケータイのようにタッチで何かを行う機能のことですが、おサイフケータイとは別物ですので注意が必要です。

音響

Lr43_L1000321
本体内蔵のスピーカーにはモノラルステレオの2タイプあります。
当然ですが、ステレオの方が音がよいです。
また、イヤホンに出力される音声は、各社がそれぞれカスタマイズしている部分なので、一概にどれが良いとは言えません。

個人的には、Sonyの音声は本当に良いと思いますが、これは好みの問題ですね。

総括

ここまでかなり長くなりましたが、いかがでしょうか。

今まで書いたものすべてをみる必要はないと思います。
周波数は必ず確認しなければなりませんが、その他は一番重視するものを詳しく調べると良いでしょう。

たとえば、写真をよく撮るならカメラの性能を、ゲームをよくやるならSoCの性能を入念に調べると、後から後悔せずに済みます。

本当にたくさんの種類があるスマートフォン。皆さんも自分にぴったりの一台を見つけてください。

ではまた。

家のルーターをNECのWG1200HP2に変えてみた

こんにちは。
今日はいつもとはジャンルの違う話を。

ルーターを交換する機会があったので、書いてみます。

交換前のルーター

2年前にスマホを新調したときに、セットで買ったこちらのルーター
Buffalo製で5GHz・2.4GHzどちらも対応した普及モデルと言ったところです。

BUFFALO【iphone6 対応】11ac/n/a/b/g 無線LAN親機(Wi-Fiルーター)エアステーション Giga ビームフォーミング対応 866+300Mbps WSR-1166DHP2/N (利用推奨環境4人・3LDK・2階建て) [フラストレーションフリーパッケージ(FFP)]

2年間頑張って使いましたが、正直にいうと動作が不安定。2.4GHzの方が現れなくなる、なんていう時があったりして、なんとも怪しい動きをしました。

恐らく、私のものは不良品だったのだろうけど、使えないわけでもないし、修理代かかるし…

ということで、2年使い続けてきました。

しかし、またまたスマホを新調しましたので、ついでにということで新しくしました。

個人的には、不安定な動作よりも自分の部屋まで無線の電波が届かないことの方が不満でした。

これは、私の家の作りとルーターの位置が問題ですが。

交換後のルーター

タイトルにもある通り、NECのWG1200HP2に買い換えました。

NEC Aterm WG1200HP 11ac/n/a(5GHz帯)&11n/g/b(2.4GHz帯) 無線LAN親機(Wi-Fiルーター) 同時利用タイプ 867+300Mbps PA-WG1200HP

2ストリームで2.4GHzと5GHzの両方に対応しています。
さらに、ビームフォーミングやMU-MIMOなどの最新(?)機能もちらほら兼ね備えています。

期待できるのは、電波強度が前のものに比べ強くなっていることです。

また、CPUがデュアルコアで処理能力が高いことも期待できそう。

使用感

ちゃんとつながります。当たり前ですけど。

初期設定がかなり簡単で、ネットワークへの接続も1分程度で終わりました。

また、スマホへのWi-Fi設定もNFCでタッチするだけ、という簡単さ。
これには驚きました。

通信状態は良好で、やや通信速度も上がった気がする?
これは恐らく気のせいです。

少し困るのは、スマホWi-Fiへ接続したとき、ちゃんとつながるまでの時間がやや長いことです。
これは恐らく気のせいではありません。

最後に

まだ使い始めたばかりなので、ここに書いたのは使い始めた感想です。
あまり参考にならないかと思います。

もう少し使ったらさらに書き足そうかと思います。

ではまた。

海外で人気なおしゃれで無料のHTMLテンプレートを20集めた

こんにちは!今日は海外で人気のHTMLテンプレートをご紹介します。

  • はじめに
  • おすすめHTMLテンプレート
    • Box Portfolio
      • ダウンロード
      • デモ
    • Multiverse
      • ダウンロード&デモ
    • Snow
      • ダウンロード
      • デモ
    • THOMSOON
      • ダウンロード
      • デモ
    • Spectral
      • ダウンロード&デモ
    • Snapshot
      • ダウンロード&デモ
    • Mobirize
      • ダウンロード
      • デモ
    • Mobile App Template
      • ダウンロード
      • デモ
    • Present
      • ダウンロード&デモ
    • Radius
      • ダウンロード&デモ
    • Xenon
      • ダウンロード
      • デモ
    • Circle
      • ダウンロード
      • デモ
    • Visualize
      • ダウンロード&デモ
    • Squadfree
      • ダウンロード&デモ
    • AdminLTE 2
      • ダウンロード
      • デモ
    • Crafty
      • ダウンロード
      • デモ
    • Treviso
      • ダウンロード
      • デモ
    • Dimension
      • ダウンロード&デモ
    • Dance Whirl
      • ダウンロード
      • デモ
    • Sonic
      • ダウンロード
      • デモ
  • 最後に
続きを読む

おしゃれなギャラリーが作れるCMS「Lychee」を使ってみた

Photo Gallery
こんにちは。今日はWebの話題です。

みなさん、CMSってご存じですか?

Contents Management Systemの略で、htmlを直接編集することなく、ブログやホームページが作れるシステムのことです。
世界中で広く利用されている「WordPress」は、このCMSの一種です。

WordPressなら、ブログを書くときにいちいちhtmlをまるごと制作する、なんてことはないですよね?
これがCMSの特徴です。

CMSは、WordPress以外にもDrupalConcrete5など様々な種類があります。
余談ですが、個人的にはConcrete5が使いやすくて好きだったりします。

今日は、このCMSの中から「Lychee」をご紹介します。

Lycheeとは

タイトルに合ったようにLycheeはギャラリーを作るためのものです。

ギャラリーとは、写真を一覧で表示して、画像をクリックすると拡大される、といった機能を持つものです。
スマホの中にも写真を見るためのギャラリーアプリが入っていますよね。

写真をメインで扱うようなサイトでは、なるべく使いやすく、きれいに見せたいところですよね。
そんな望みを叶えてくれるのが、Lycheeです。

WordPressプラグインをいれてギャラリーを作ってもいいのですが、そうすると大掛かりなシステムになりますよね。
ちょっと写真が見れるサイトを作りたいんだ、なんて時には面倒だったりします。

ということで、Lycheeが活用されるのです。

lychee.electerious.com

Lycheeは、主にPHPjavascriptで構成されており、写真の管理にMySQLが必要です。
WordPressがインストールできるサーバーであれば、Lycheeもインストール可能です。

インストール手順はとても簡単です。
まず、Lycheeのgithubにアクセスし、ファイルをダウンロードします。
git cloneしても構いません。
github.com

このファイルを解凍し、インストールしたいディレクトリに配置して、その場所にアクセスします。

あとは画面に従って、MySQLのユーザー名やパスワードなど必要な情報を入力し、管理者用パスワードを設定すれば完了です。

詳しい利用方法は、READMEの中に書かれています。
直感的に使い方がわかるので、迷うこともないと思います。

Lycheeの良い点・悪い点

Lycheeの良いところは、シンプルさと美しさです。

ギャラリーを作るCMSは、レイアウトが残念で全近代的なビジュアルだったりしますが、Lycheeは黒を基調としたシンプルなデザインです。
また、それでいて必要な機能はしっかり備わっています。
写真を一括でzipにしてダウンロードしたり、写真1枚1枚を全画面表示したり、名前を変更したり共有したり。
さらにはパスワードによって写真を保護する、なんてこともできます。
基本的な機能は揃っていて、便利です。

今まで3日ほど私が使ってきて困ったことがいくつかありました。
まず、パスワード保護に関するものです。
パスワードによって写真を保護している場合、フォルダ内の写真を見るたびにパスワードを求められることがあります。
写真を1枚見るごとにパスワードを求められ、非常に面倒でした。

この原因はchromeのパスワード保存機能が原因でした。
管理者用のアカウント情報をchromeに記憶させていたことで、このような面倒な現象が起こるようです。

また、写真の一括ダウンロードですが、写真の数が多くなるとうまく動かなくなりました。

原因は、zipファイルの送信にありました。
一括ダウンロードでは、毎回phpにてzipファイルの作成が行われ、そのまま送信されるのですが、これがファイルサイズを考慮しない作りとなっているようです。
サーバーのメモリ不足によって転送ができなくなるようです。

php/Module/Album.php内のgetArchive()を以下のように編集すると直りました。

<?php
public function getArchive() {

	// Check dependencies
	Validator::required(isset($this->albumIDs), __METHOD__);

	// Call plugins
	Plugins::get()->activate(__METHOD__, 0, func_get_args());
	// Illicit chars
	$badChars =	array_merge(
		array_map('chr', range(0,31)),
		array("<", ">", ":", '"', "/", "\\", "|", "?", "*")
	);

	// Photos query
	switch($this->albumIDs) {
		case 's':
			$photos   = Database::prepare(Database::get(), 'SELECT title, url FROM ? WHERE public = 1', array(LYCHEE_TABLE_PHOTOS));
			$zipTitle = 'Public';
			break;
		case 'f':
			$photos   = Database::prepare(Database::get(), 'SELECT title, url FROM ? WHERE star = 1', array(LYCHEE_TABLE_PHOTOS));
			$zipTitle = 'Starred';
			break;
		case 'r':
			$photos   = Database::prepare(Database::get(), 'SELECT title, url FROM ? WHERE LEFT(id, 10) >= unix_timestamp(DATE_SUB(NOW(), INTERVAL 1 DAY)) GROUP BY checksum', array(LYCHEE_TABLE_PHOTOS));
			$zipTitle = 'Recent';
			break;
		default:
			$photos   = Database::prepare(Database::get(), "SELECT title, url FROM ? WHERE album = '?'", array(LYCHEE_TABLE_PHOTOS, $this->albumIDs));
			$zipTitle = 'Unsorted';
	}
	// Get title from database when album is not a SmartAlbum
	if ($this->albumIDs!=0&&is_numeric($this->albumIDs)) {

		$query = Database::prepare(Database::get(), "SELECT title FROM ? WHERE id = '?' LIMIT 1", array(LYCHEE_TABLE_ALBUMS, $this->albumIDs));
		$album = Database::execute(Database::get(), $query, __METHOD__, __LINE__);

		if ($album===false) return false;
	
		// Get album object
		$album = $album->fetch_object();

		// Album not found?
		if ($album===null) {
			Log::error(Database::get(), __METHOD__, __LINE__, 'Could not find specified album');
			return false;
		}

		// Set title
		$zipTitle = $album->title;

	}

	// Escape title
	$zipTitle = str_replace($badChars, '', $zipTitle);

	$filename = LYCHEE_DATA . $zipTitle . '.zip';
		
	// Create zip
	$zip = new ZipArchive();
	if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
		Log::error(Database::get(), __METHOD__, __LINE__, 'Could not create ZipArchive');
		return false;
	}

	// Execute query
	$photos = Database::execute(Database::get(), $photos, __METHOD__, __LINE__);

	// Check if album empty
	if ($photos->num_rows==0) {
		Log::error(Database::get(), __METHOD__, __LINE__, 'Could not create ZipArchive without images');
		return false;
	}

	// Parse each path
	$files = array();
	while ($photo = $photos->fetch_object()) {

		// Parse url
		$photo->url = LYCHEE_UPLOADS_BIG . $photo->url;

		// Parse title
		$photo->title = str_replace($badChars, '', $photo->title);
		if (!isset($photo->title)||$photo->title==='') $photo->title = 'Untitled';

		// Check if readable
		if (!@is_readable($photo->url)) continue;

		// Get extension of image
		$extension = getExtension($photo->url, false);

		// Set title for photo
		$zipFileName = $zipTitle . '/' . $photo->title . $extension;

		// Check for duplicates
		
		if (!empty($files)) {
			$i = 1;
			while (in_array($zipFileName, $files)) {
				// Set new title for photo
				$zipFileName = $zipTitle . '/' . $photo->title . '-' . $i . $extension;

				$i++;

			}
		}

		// Add to array
		$files[] = $zipFileName;

		// Add photo to zip
		$zip->addFile($photo->url, $zipFileName);

	}
	// Finish zip
	$zip->close();

	// Send zip
	header("Content-Type: application/zip");
	header("Content-Disposition: attachment; filename=\"$zipTitle.zip\"");
	header("Content-Length: " . filesize($filename));

	//変更ここから
	while (ob_get_level() > 0) {
		ob_end_clean();
	}
	ob_start();

	$file = fopen($filename, 'rb');
	if(!$file) {
		exit;
	}
	while(!feof($file) and (connection_status() == 0)) {
		 echo fread($file, '1048576'); 
		 ob_flush();
		
	  }
	ob_flush();
	ob_end_clean();
	//変更ここまで

	// Delete zip
	unlink($filename);

	// Call plugins
	Plugins::get()->activate(__METHOD__, 1, func_get_args());

	return true;

}

こちらの記事を参考にさせていただきました。ありがとうございます。
every-rating.com

最後に

いかがでしょうか。不具合が多々あるので、実用可能ではないかもしれませんが、おしゃれで使い勝手がいいので、一度使ってみてはいかがでしょうか。

ではまた。

Let's Encryptとはなにか、について調べる

lets-encrypt
こんにちは。ご無沙汰しております。

本業の方が大変忙しく、最近更新できておりませんでしたが、今日は張り切っていきたいと思います!

今日の話題は、Let's Encryptです。
こちらのブログでもたびたび話題にして参りました。

Let's Encryptは何者なのか

最近、ふと思ったんです。Let's Encryptって何者!?

皆さんの中にも私のように、不思議に思われている方もいらっしゃるのではないでしょうか。

ん?Let's Encryptって何?という方もいらっしゃると思いますので、簡単に説明しておきます。もう分かってるよ、という方は読み飛ばしてください。すでに理解されている方は、そもそもこちらの記事なんか読まないかもしれませんが(笑)

Let's Encryptとは

Let's Encryptは、無料SSL証明書を取得することが出来るサービスです。

そもそもSSL証明書って?

SSL証明書とは、httpsでの通信を可能にするために必要なものです。

URLがhttps:// で始まるホームページはご覧になったこと、ありませんか?
Chromehttpsのサイトにアクセスすると、アドレスバーの左端に緑の鍵マークが現れます。
https

httpsSSLという暗号化技術によって、データのやりとりを暗号化するものです。

そう、SSL証明書SSLは、暗号化技術の名称を表していたんです。

例えるなら、SSL証明書運転免許証のようなものです。

運転免許証を持っている人は、しっかりとした運転技術を持っていると認められた人ですから、車が運転することを許可されたわけです。
さらに公的に発行された信頼度のあるものですから、身分証明にも使われますよね。

SSL証明書もこれに似たような機能を持っています。
暗号化を行うためには、と呼ばれる情報が必要です。
SSL証明書は、この鍵にあたる情報が含まれているため、ブラウザがこの鍵を使って暗号化を行うことが出来るようになります。

SSL証明書があって初めて暗号化することができる、というところが運転免許証と似ていますね。

さらに、SSLは相手の保証を行うものでもあります。
通信相手が実在することを、公的に信頼された機関が確認し、保証してくれます。
これがあるので、利用者は安心して暗号化できるわけです。

身元を保証する、というところが運転免許証と似ています。

一般的に、SSL証明書有料です。企業などで使われているものは、何万単位の費用がかかる高級(?)なものです。

無料で手に入る証明書

無料でこれを手に入れようと思うと、主に手段は主に

の2つがあります。

オレオレ証明書とはなにか

オレオレ証明書というのは、自分で作成した証明書のことです。

本来、専門の機関によって発行されるべき証明書を自分で生み出すわけですから、当然費用はかかりません。
しかし逆に、自作した証明書ということは、公的な機関から認証を受けない、ということになります。よって、この証明書に対しての信頼度は低くなるです。

ですから、ブラウザを通してオレオレ証明書を使ったサイトにアクセスすると、デカデカと警告が出てしまいます
このサイト、危険なんじゃない?という警告です。だって、誰かよく分からない鍵を暗号化に使ってるんですから。

そんなサイトにアクセスしますか?私ならしないでしょうね(笑)

なぜオレオレ証明書が必要なのか

では、なぜオレオレ証明書なるものが存在するかと言いますと、そもそも証明書がなければhttpsで通信できないからです。

これは先ほど説明したとおり、鍵が必ず必要だからです。
逆に、証明書さえあればhttpsで通信できます。

オレオレ証明書なら、通信する相手を保証してもらうことはできないけど、とにかく暗号化通信が始められるわけです。
昔は公的な機関から発行される証明書は有料のものしかなかったため、お金をかけずにとにかく暗号化するために、これが使われていました。

ここまでの話でお分かりの通り、オレオレ証明書は一般向けのサイトには向きません。だって、警告が出てしまいますから。
しかし、社内ネットワークで暗号化通信したい場合など、相手がすでに分かっていて保証の必要がない場合では、これで十分です。ブラウザを通さずにhttpsにて通信する場合もそうですね。

Let'sEncryptとは?

それに対して、Let'sEncryptとはなんでしょうか。

Let's Encryptにて提供されるのは、秘密鍵証明書中間証明書の3種類で、公的に信頼度のある証明書です。
これが無料で取得できるんです。

では、Let's Encryptとオレオレ証明書はどう違うのでしょうか。
ずばり、これは誰が発行するか、です。

オレオレ証明書が個人が勝手に発行したものであるのに対して、Let's Encryptはしっかりとした第三者機関によって発行されています。
これにより証明書に対する信頼度が格段に違うため、Let's Encryptで発行された証明書を使うと、無料でありながらブラウザで警告がでることなくhttpsで通信できるのです。

Let's Encryptは何者なのか

ここまで書いてまいりましたが、私はこんな疑問を抱いていました。

  • どこが発行しているのか
  • なぜ無料なのか
  • どのような仕組みなのか
  • 今後なくなることはないのか
  • 誰でも発行できれば、サイトの信頼性を保証できないのではないか

ここからは、これらの疑問を一つ一つ解決していく形で、書き進めていきます。

Q1.どこが発行しているのか

一体どこが発行しているのでしょうか。
かなりの普及を見せているLet'sEncryptですから、発行元が怪しいところではないと思われますが、気になります。

なぜこんなに信頼されているのでしょうか。

A1.ISRGという非営利団体がサービスを提供している

では、ここでLet'sEncryptの公式ページを見てみましょう。

うわ、英語かよ!となった方、大丈夫ですよ!
非公式ですが、Let'sEncryptについてまとめている日本語サイトがあります。

こちらのLet'sEncryptについて、から少し引用させてもらいます。

非営利団体の ISRG (Internet Security Research Group) が運営しており、シスコ(Cisco Systems)、Akamai電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体が、ISRG のスポンサーとして Let's Encrypt を支援しています。

これによると、ISRGという機関が運営しているようです。
調べてみると、ISRGというのはアメリカにある公益法人で、経済的・技術的・教育的な面でインターネット上での安全な通信を行う障壁を減らすことを目的としているようです。

firefoxの開発で有名なmozillaやサーバーなどの製品やサービスを手がけるCisco情報理論を確立した学者シャノンの出身校であるミシガン大学などの関係者が役員をつとめています。

さらにISRGは、先ほど紹介したmozillaCisco、さらにはfacebookchromeWordpress.comを運営するautomatticや日本でも利用者の多いJimdoなど、様々な企業や団体がスポンサーとなっています。

このスポンサーを見ると、ネット業界で名を馳せたサービスや商品のプロバイダばかりです。chromemozillaが関わっているとなると、信頼度が違いますね。

だからLet'sEncryptは信頼されているのです。逆にブラウザ側からすれば、自分たちがお金を出しているところから発行されているから、信用するといったところでしょうか。

Q2.なぜ無料なのか

無料の理由、これが気になります。どうして無料なのでしょうか。
もしかして、有料サービスのお試しとか?なんて思ってしまいます。

先ほどのISRGのスポンサーを見ていると、有料サービスのお試し、ということはなさそうですが…

A2.非営利団体が運営する全自動認証のSSL証明書だから

では、先ほどのLet'sEncrypt日本語サイトを見てみましょう。

Let's Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLSHTTPSTLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信)を普及させることを目的としているプロジェクトです。

ここが、無料である一つの理由です。

Let'sEncryptの手続きはすべて自動で認証されています。
つまり、人の手が関わっていないわけです。
ですから、運営にかかる費用がうんと低くなるわけです。

さらに運営元のISRGは非営利団体ですから、元からお金を取る気はありません。

こんな理由で、無料で利用できるわけです。
役員のメンバーやスポンサーを見た限り、今後も有料化することはないでしょう。

先ほど、非営利団体が運営する全自動認証のSSL証明書だから無料なのだ、と書きましたが、私はその奥に別の理由もあるのではないかと思っています。

発行を行うISRGの出資元は、ほとんどが企業ですから、なにか目的があって出資するのだと思います。

例えば、chromeの開発元であるgoogleは、常時SSLを推奨しています。
これはサイトがハッキングされ、マルウェアに感染することを防ぎたいと考えているようです。これらのマルウェアに汚染されたサイトが、自分達のサービスに悪影響を与えるかもしれませんから。

しかし、有料の証明書しかなければ、金銭的な理由からなかなか常時SSLのサイトは増えません。
個人でやるブログなんかは、あまり常時SSLにする必要性を感じにくいですから。

ですから、常時SSLの普及にはLet'sEncryptのようなサービスが欠かせないわけですね。

このように、様々な企業や団体の思惑が重なった結果として、Let'sEncryptという無料のサービスが出来上がったわけです。

こんな理由もあるのではないかな、と私は思います。

Q3.どのような仕組みなのか

先ほど、自動化という出てきましたが、どのようにして証明書の発行を行うのでしょうか。

人力の発行ではない、ということは何となくお分かりいただけているのでは、と思います。

A3.クライアントソフトと認証局が発行を自動化している

Let'sEncryptにおける認証方法

認証には、独自のクライアントソフトを使って行います。

このクライアントソフトはcertbotと呼ばれ、多くのLinuxディストリビューションmacOS版が公開されています。
残念ながらWindows版のcertbotはないので、ほかのツールを使うか、最近Windowsで利用可能となったbashを使うこととなります。

取得したいドメインを本当に証明するために、Let'sEncryptには主に2種類の認証方法が用意されています。それは

  • ドメインDNSレコードに指定されたレコードが存在するか
  • 指定されたURLに認証用ファイルが存在するか

の2つです。

DNSでの認証では、_acme-challenge.(自分のドメイン名)に指定されたTXTレコードを設定します。
これを行うためには、DNSを自分で設定できる環境でなければならず、レンタルサーバーでは実現出来ないことが多々あります。

ファイルにて認証する場合、指定されたパスに指定されたファイルを置き、それを確認するというものです。
これは多くの方が実行可能でしょう。ホームページを運営しているなら、ファイルをアップできない、なんてことはあり得ませんから。

しかし、メールサーバーなどではこれは可能でないかもしれません。そんなときはDNS認証を行います。

認証を行う仕組み - ACME

認証の仕組みは少し専門用語が多くなります。暗号化に対する基礎知識がないと厳しいかもしれません。

でも大丈夫です。認証の仕組みを知らなくてもちゃんと使えるようになっています!

認証には、ACMEという通信プロトコルにて、クライアントソフトと認証局とのやりとりが行われます。

まず、クライアントソフトは認証してほしいドメイン認証局に通知します。

認証局はその通知に対して、認証に必要な情報をクライアントソフトに送ります。
ここで送られる情報は、認証用の番号認証用ファイルで、認証局によって自動的に生成されます。
認証用ファイルは、先ほど説明したファイル認証でサーバーにアップロードする為のもので、DNS認証の場合にはファイルの代わりに登録すべきDNSレコードが送られます。

クライアント側は認証に必要な設定(ファイル認証なら指定のパスにファイルをアップロードする)を行った後、認証のための準備ができたことを認証局に通知します。
このとき同時に、先ほど送られた認証用番号をクライアントソフトが生成した秘密鍵で署名し、公開鍵とともに認証局へ送ります。

認証局が認証に必要な設定がされたかを確認し、またクライアントソフトから送られてきた認証用番号の確認を行います。

すべて確認が終了すると、正式に認証されたことがクライアントソフトに通知されます。

この一連の流れで認証が自動で行われます。私たちが直接行わなければならないのはクライアントソフトの実行認証のための設定のみです。
認証自体の仕組みについては理解する必要はありません。

一度証明書が発行されたら、更新するのは簡単で、認証作業は必要ありません。

こちらが大変わかりやすく、参考になりました。詳しくは公式ページにも書かれています。

Q4.今後なくなることはないのか

Webサービスは、突如開発が中止されることはよくあります。

また、どこかの企業に吸収されてしまう、ということもしばしばです。

急に有料化してしまったら、httpsに対応させたものをわざわざhttpに戻さないといけないかもしれません。

それは非常に面倒ですよね。

では、無くなることはないのでしょうか。

A4.無くならない可能性が高い

正直なところ、Let'sEncryptが今後なくなる可能性はないとは言えません

しかし、googleSSLに対応しているかどうかを検索順位に考慮する、と発表するように、httpsの利用はさらに重視され普及が進むと思います。

ISRGが掲げる理念を基に考えると、この団体に金銭的な問題が起こらない限り、Let'sEncryptは無くならないでしょう。

スポンサーを見ると、主要なブラウザを開発する団体が資金提供を行っていますから、金銭的問題も起こりにくいのではないでしょうか。

つまり、Let'sEncryptが急になくなるとは考えにくいように思います。

Q5.誰でも発行できれば、サイトの信頼性を保証できないのではないか

最後の疑問となりました。
いろいろ調べていて、ふと思いました。

誰もが証明書を取得できたら、信頼性のある証明書では無いのではないでしょうか。

例えば、詐欺を行おうとする人であっても取得できるわけですから、サイトに対する信頼性を証明することが出来ないのではないか、と。

しかし、ここに私の思い違いがありました。

A5.サイト自体の信頼性を保証するSSL証明書は種類が別

SSL証明書httpsによって通信するためのツールであって、サイト自体の安全性を必ずしも保証するものではないのです。

私自身、『SSL証明書 = 安全性を保証する』という感覚を持っていましたが、実際にはそうとは限りません。

こちらにその事が丁寧に書かれています。

このページから引用すると、

SSL/TLSサーバ証明書には「ドメイン認証」「企業実在認証」「Extended Validation(EV)」の3種類が存在します。ドメイン認証は最も手軽な反面、ドメインの使用権のみを認証する証明書しか発行できません。組織の実在認証をするためには「企業実在認証」、「EV」を導入する必要があります。また企業実在認証もドメインの使用権と組織の法的実在の認証は可能ですが、それ以上の「組織の物理的実在」「組織の運営」などのより高度な認証を行うにはEVの導入が必要です。

と書かれています。

ここで書かれているように、企業実在認証EVでなければちゃんとした通信相手なのかを保証することはできないということです。

Let'sEncryptはドメイン認証を行うだけですから、ドメインが存在することを証明しただけですから、相手がどうであるかは証明されていないのです。

しかし、ブラウザでは緑の鍵マークがでて、いかにも安全です、という印象を与えます。

これでは、もし詐欺サイトで使われていた場合、間違った印象を与えるでしょう。

私はこれがLet'sEncryptの欠点なのではないかと思います。

証明書が有料であった昔は、証明書が安全の証のようになっていましたが、これを改める時が来たのかもしれません。

最後に

長々と書いてまいりましたが、いかがだったでしょうか。

Let'sEncryptは大変素晴らしいサービスですので、皆さんにぜひぜひ使っていただきたいです。

ではまた。

会員制の動画共有サイトの構築した

f:id:takebo_blog:20170706074140j:plain

こんにちは。
今日は、会員制Webページの構築についてです。

まずは、構築したきっかけから。
お急ぎの方は読み飛ばして下さい。

  • とある日の会話にて
  • 会員向けサイトの仕様
    • ①サーバーは有料のサーバーで、十分なスペック
    • ②ログイン機能にて、会員以外は見れないようにする
    • ③ユーザー名とパスワードは事前に個々に送信し、全ユーザー共通
    • ④ユーザーの新規登録は必要ない
    • ⑤ホームビデオを共有
    • SSLによるセキュリティ対策
  • 参考にしたサイト
    • テンプレート
      • ログイン画面
      • メインページ
    • ログイン機能の実装
    • 動画のプレイヤー
  • 最後に

とある日の会話にて

ある日、こんなことを言われました。

依頼主『君はプログラミングできるから、ホームページ作れるよね。』

自分『はい?簡単そうに言いますけどそれは…』

依頼主『ホームページは会員だけが見られるようなもので、セキュリティは万全にしといてね。』

自分(もう断る雰囲気じゃないじゃん…)


みなさん、こんな無茶ぶりされたことありませんか!?笑
私はありましたよ、つい最近。

プログラミングできるから、ホームページも作れるって…

その理論でいくとプログラマー全員がホームページ作れて、Webデザイナーが仕事を失うことになるんですよ!

というツッコミを入れたいところですが、いつもお世話になってる方なので断れません。

ということで、はじめて会員サイトを作ってみました。

続きを読む