【メモ】Redisについて

Redisについての雑多なメモです。

特徴

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.

Redis

  • Key-Valueストレージで、NoSQLに分類される
  • そういう文脈上キャッシュというよりはデータストレージ
  • 最大の特徴は構造を持つデータ(リストやオブジェクト)をそのまま保存できること
  • パフォーマンスはmemcachedremarkably similarらしい
  • データは定期的にディスクに保存されるためサーバが落ちてもデータが残るし、再起動時にはロードされる
  • データのサイズに制限はないが、全体サイズがメモリ容量に収まる必要がある、あるいは削除の設定をする必要がある

導入

// ダウンロード
$ wget http://download.redis.io/redis-stable.tar.gz
$ tar xzf redis-stable.tar.gz
$ cd redis-stable
// ビルド
$ make

// 起動
$ src/redis-server

PHPでの利用方法

PHPでRedisを利用する際は、以下の2つがメジャー。

どちらのクライアントも基本的にRedisのコマンド名と同じメソッドが定義されているので利用法に大きな差異はないが導入方法が異なる。また、phpredisはextensionなのでpredisよりも高速で動作することが予想される。

predis

ライブラリなのでcomposer経由でインストール。

{
    "require": {
        "predis/predis": "^1.1.1"
    }
}

アプリケーション側からは以下のように利用する。

<?php
require __DIR__ . '/../vendor/autoload.php';

use Predis\Client as PredisClient;

try {
  $redis = new PredisClient();
} catch (Exception $e) {
  die($e->getMessage());
}

// 値の設定
$redis->set('message', 'Hello world');
// 値の取得
$value = $redis->get('message');

print($value); // Hello world

phpredis

こちらはextensionとなっているので、

ダウンロード & ビルド → php.iniにモジュールの登録

の手順を踏む必要がある。

  • ダウンロード & ビルド
$ git clone git://github.com/nicolasff/phpredis.git
$ cd phpredis
$ phpize // エクステンションを追加する際に,phpを最初からコンパイルし直す必要なく,追加するためのコマンド(*)
$ make && make install

(*) Redisの使い方

  • モジュールの登録

ビルドされたredis.soというファイルをphpのextensionが入っているディレクトリにコピーし、php.iniに登録する。

$ cp modules/redis.so {php-config–extension-dir}
$ sudo echo “extension=redis.so”  > /etc/php5/conf.d/redis.ini

アプリケーション側からは以下のように利用する。

<?php
$redis = new Redis(); // extensionとして登録しているからロードせず使える
$redis->connect('127.0.0.1',6379);

$redis->set('dog', 'bow-bow');
$res = $redis->get('dog');
echo $res . PHP_EOL;

$redis->close();

気になる点

  • 導入するタイミングはいつなのか
  • 結局memcachedとどっちがいいのか
    • データ構造が保存できるとはいえmemcachedシリアライズの方法、共通の実装が揃えば使い勝手は一緒な気がする。

参考

【2016】読書リスト

年の瀬を感じる今日この頃。
備忘録を兼ねて、2016年に読んだ技術書・参考書を一覧にまとめました。

参考にしたサイト

読む本は主に以下の二つのQiitaエントリーを参考にしています。

qiita.com

qiita.com

エントリの筆者の二人に感謝申し上げます🙇

2016読書リスト(計:45冊)

※読んだ順序はこの通りではありません。

  1. リーダブルコード

  2. インフラエンジニアの教科書

  3. UI Graphics - 世界の成功事例から学ぶ、スマホ以降のインターフェイスデザイン

  4. ハッカーと画家

  5. TEAM GEEK

  6. アジャイルサムライ

  7. 伽藍とバザール

  8. マスタリングTCP/IP 入門編

  9. ネットワークエンジニアの教科書

  10. Unixという考え方

  11. Unix考古学

  12. プログラミングHaskell

  13. Core Image for Swift

  14. エリックエヴァンスのドメイン駆動開発

  15. 人月の神話

  16. ソフトスキルズ

  17. アルゴリズムの基本

  18. 暗号技術入門 秘密の国のアリス

  19. デザインのルール、レイアウトのセオリー。

  20. タイポグラフィーの基本ルール

  21. iPhone Core Audioプログラミング

  22. プロトタイピング実践ガイド

  23. はじめて学ぶUML

  24. 独習UML

  25. Arduinoをはじめよう

  26. プログラミングの基礎

  27. functional swift

  28. すごいHaskellたのしく学ぼう

  29. Kotlinスタートブック -新しいAndroidプログラミング

  30. プログラミングErlang

  31. いまから始めるWebフロントエンド開発

  32. 詳細!PHP7+MySQL入門ノート

  33. いちばんやさしいWordPressの教本

  34. プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

  35. サイトの拡張性を飛躍的に高めるWordPressプラグイン開発のバイブル

  36. みんなのPython 第3版

  37. 一歩先にいく WordPressのカスタマイズがわかる本

  38. Flask Web Development

  39. MySQL徹底入門

  40. よくわかるHTML5+CSS3の教科書

  41. よくわかるJavaScriptの教科書

  42. Learning JavaScript

  43. パーフェクトPHP

  44. シングルページWebアプリケーション

  45. nginx 実践入門

  46. Swift Internal Introduces

  47. SWIFT ALGORITHMS & DATA STRUCTURES

  48. Web API: The Good Parts

  49. コンピュータの構成と設計 第5版 上

振り返り

振り返ってみると前半の方は「え、これ読んだの今年!?」っていうくらい昔のことに感じます。

中にはあまり面白くなかったもの、ちゃんと理解できなかったものもありますが、
数多くの好奇心刺激する本に出会えて楽しかったです。
幅広い知識に触れることができた一方、どれも実用レベルでないのは残念なところです。
結局手を動かさないと使える知識にならないんだなと実感しました。

来年は

本を選ぶ上で特に戦略は持っておらず、興味の向くままに選んでいます。
戦略があった方がいい気もするし、このスタンスに特に自信があるわけではありませんが、
来年もこのスタイルで読む本を選んでいきたいと思います。
みなさんどのように本を選んでいるのでしょうか。

来年は実務で使う技術に加え、

などに挑戦したいなーと思います。
オススメの書籍、書籍を紹介しているサイト等あれば是非是非教えてください🙇

FrenchKit

先週末9/23,24にフランスのパリで行われたFrenchKitに参加して来ました。

f:id:KK462:20161002174855j:plain

2日間のうち1日目の23日はトークのみ、2日目24日はライブコーディング及びクラスルーム、クロージングというコンテンツでした。

コンテンツ

f:id:KK462:20161002175055j:plain

全てを見つけることはできませんでした。。(Realmで公開されるのかな?)

【LT】Human Engineering

スピーカー:Jeremie Giraultさん(@kamidude)
github.com

Designing Pro Apps

スピーカー:Piet Brauerさん(@pietbrauer)
speakerdeck.com
github.com

【LT】Building your UI Developer's Toolbox with Playground

スピーカー:Hugues Bernet-Rollandeさん(@rompelstilchen)
speakerdeck.com
github.com

Reactive Programming with RxSwift

スピーカー:Florent Piletさん(@fpillet)

www.slideshare.net

Mixins vs Inheritance

スピーカー:Olivier Haligonさん(@aligatr)
speakerdeck.com

【LT】Swift script all the things!

スピーカー:Roy Marmelsteinさん(@marmelroy)
github.com (未更新ですが、後々更新されることと思います。)

Swift Evolution - 140 proposals in 30 minutes

スピーカー:Jesse Squiresさん(@jesse_squires)
speakerdeck.com
github.com

Optimizing Your App's Performance - How to Do It Right

スピーカー:Bruno Virletさん(@bvirlet)

【LT】Swift Package Manager

スピーカー:JC Pastantさん

Core Data - it's not dead yet

スピーカー:Abizer Nasirさん(@abizern)
speakerdeck.com

End-To-End Application Development with Swift

スピーカー:Chris Baileyさん(@Chris__Bailey)

An Overview of Verification Techniques Today

スピーカー:Fabrice Kordonさん(@fabricekordon)

Extending Xcode

スピーカー:Boris Buglingさん(@neonacho)

Launch Arguments: the Mysteries

スピーカー:Marin Usaljさん(@_supermarin)

Live Streaming Swift Talk

スピーカー:Chris Eidofさん(@chriseidhof)&Florian Kuglerさん
SortDescriptorの話。(関連:http://chris.eidhof.nl/post/sort-descriptors-in-swift/)

MVC Supercharged

スピーカー:Grégoire Lhotellierさん(@greg3z)&Jéremie Giraultさん(@kamidude)
github.com

Classroom

各ブースに分かれてのハンズオンでした。 ソースコードこちら

  • RxSwift Hands-on(Florent Pilletさん@fpillet)
  • Core Data Hands-on(Abizer Nasirさん@abizern)
  • Introduction to Bluetooth LE and IoT(Hugues Bernet-Rollandeさん@rompelstilchen)
  • DTrace: Beyond Instruments(Frank Lefebvreさん)
  • Accessibility for iOS Applications: the Main APIs, the Best Practices and Beyond the Technique(Amadou Amath Ndiayeさん)
  • Reactive Programming with Realm(Marius Rackwitzさん)
  • Server-Side Swift Hands-on(Chris Baileyさん@Chris__Bailey)

How to Become an iOS Full-stack Developer in Just 60 Minutes

ゲーム大会with🍷&🧀

食事

初日朝 f:id:KK462:20161002175230j:plain

初日昼 f:id:KK462:20161002175255j:plain

初日夜 f:id:KK462:20161002175312j:plain f:id:KK462:20161002175334j:plain

2日目🍷&🧀 f:id:KK462:20161002175412j:plain f:id:KK462:20161002175427j:plain

おすすめトーク

Designing Pro Apps
git2goを作ったpietさんによるiPad Proを開発機として使うお話。
Playgroundも使えるようになったし、休日に作業したい時とかアリかも。
そのほかいいiPad Proアプリの作り方など。

Swift Evolution - 140 proposals in 30 minutes
try!swiftでもお話しされたJesseさんによるSwiftEvolutionのプロポーザルを解析されたお話。
Q&Aの「Erica Sadunさんは実在するんですか?」がウケてた。

[Optimizing Your App's Performance - How to Do It Right]
画像のフィルタリングを最適化する話。
標準のAPIからCを経てアセンブリ言語まで。結果は、アセンブリまで最適化する必要はないそう。
最近命令セットなどを学んだのでタイムリーで面白かった。

[End-To-End Application Development with Swift]
IBMのChrisさんによるSwiftをサーバーとモバイル両方で使うメリットについてのお話。
前日にKitura1.0がリリースされており、"Server side Swift is getting real"だそうです。

感想

  • トーク後の司会役含めた3人でのセッションが面白かった。(Q&A含む)
  • 会話の多くはフランス語で行われており、現地の方が多かった様子。
  • 男女比は9:1くらいで、パリでもそうなんだなあと。

カンファレンスを口実に海外に行くのは充実した旅行ができるのでオススメです😄。

ブログ等

www.jessesquires.com

2015-2016書籍目録

去年の5月にキャリアスタートしたエンジニア2年生です。
備忘録を兼ねて、一年間で読んだ書籍を赤裸々に列挙したいと思います。
気づけば7月も後半で、タイミングは謎ですがご容赦ください🙇

iOSObjective-C・Swift

インフラ・ネットワーク

Haskell

データベース

Git

UNIX

デザイン

プロジェクト

一般

おわりに

2016-2017はとりあえずこれ以上の冊数読めるよう精進いたします。
おすすめの本ありましたら是非教えてください。

メモ

実機の動作をmacにミラーリングする方法

プレゼン等人前で話す時に、
実機で動作している様子をスクリーンに映したいことがある。
そんなときは、

QuickTimePlayerを起動

ファイル->新規ムービー収録
f:id:KK462:20160625231409p:plain

start・stopボタンの横の下矢印を押す

カメラ欄の実機を選択
f:id:KK462:20160625231423p:plain

で、mac上に実機の動作をミラーリングすることができる。

実行時間のオーダーの表記法

関数fがあったときに、

すべての場合において、入力のサイズnに比例して実行時間が変化する場合
実行時間は

f(n) = Θ(n)

と表される。

入力の中身によってはオーダーに差がでるとき、
これ以上は実行時間が大きくならないオーダーがnであれば

f(n) = Ω(n)

と表し、
これ以上は実行時間が小さくならないオーダーがnであれば

f(n) = O(n)

と表す。