読者です 読者をやめる 読者になる 読者になる

こちょこちょブログ

プログラミングとか学んだことの備忘録ブログです。

Django(Python)のDB操作まとめ

プログラム テクノロジー

仕事でDjangoPython)に触る機会があり、0から学習しながら進めています。

今回は個人的に分かりづらかった、DB(SQL)周りの内容をまとめました。

ドキュメントを読んでも分かりますが、ちょっと読みづらいです

 

条件指定

SQLで条件を指定したい場合は「filter」を使えばできます。

誤解を恐れないで言うと、

filter = where

という認識で良いと思います。

 

サンプル

 

複雑な条件を使いたいときは Q object を使う

 

日付型のインサートとアップデート

ちょっとSQLとズレますが、Model で以下のように設定すると、良しなにやってくれます。

 

・auto_now_add=True にすると自動で今の時間がインサートされます

createdt = models.DateTimeField(auto_now_add=True)

 

・auto_now=True にすると自動でインサートされるしアップデートもされます

update_dt = models.DateTimeField(auto_now=True)

 

※参考先↓


 

Google Developers Summit:Progressive Web Appsに行ってきた

Webサービス アプリ テクノロジー イベント

少し前に行われたGoogle Developers Summit : Progressive Web Appsに行ってきたので、PWAについて自分なりにまとめたいと思います。

f:id:kmatz90:20160508164153j:plain

 

Progressive Web Apps(PWA)とは?

無理やりシンプルに説明すると、今までのWebアプリ(サービス)に、

プッシュ通知やオフラインアクセスなどをできるようにした新しいWebアプリの概念です。

 

Webアプリでプッシュ通知やオフラインアクセスを使うにはどうするのか?

答え:Service Workerを使う!

 

Service Worker(SW)とは?

Webページとは別にバックグラウンドで実行されるJavascript環境(API)のことです。

プロキシ的な感覚が近い?と思います。

なので、技術的にはPWAを勉強するというより、

SWを勉強すると表現した方がいいかもしれません。

詳細はこちらを参照。 

 

Service Workerを使うには?

具体的な使い方はこちらを参照

なお、Service Workerを使うには、SSL化(HTTPS)が必須になります。

 

SUUMOのPWA導入事例

これは実際にカンファレンスで聞いてきた話です。

 

SSL化の課題

SUUMOでPWAを導入する際に1番ネックになったのがSSL化で、

かれこれ1年以上かかっているそう(大きな理由はlocalStorage)。。

しかも紙媒体のURL表記が「http」のものもあるので、

「HSTS」を導入する予定とのこと。

 

Add to Homescreen

ホーム画面にショートカットを追加させる施策です。

スーモに再来訪したら「ホーム画面に追加しませんか?」的なバナーを出して追加を促したそう。

ホーム画面から来た人はCVRが約1.2倍と言っていたので、導入効果はあるもよう。

 

Offline Cache

利用したことで表示速度が約4倍に。

 

プッシュ通知

ユーザーが新着案件(賃貸)情報を受け取る設定をしたら、

スマホにプッシュ通知できるような仕組みを検討中とのこと。

 

その他

ジオフェンシングもそのうちやりたいと話していた気が。

 

まとめ

スピーカーも話していましたが、ネイティブアプリは色々大変なんですよね。

リリースとアップデートに審査が必要だし、

GoogleAppleを挟む分、自由じゃないし時間がかかったり。

その点、PWAのようにWebにあるといつでも改修できるし、

各OSに依存しないのでネイティブアプリのデメリットを解消できます。

 

結構明るい技術だと思うのですが、

今のところブラウザのSafariMicrosoft Edgeに対応していないようです。

※対応状況はこちらで確認できます。

なので、iOS主流の日本ではすぐすぐ取り入れる技術ではないかもしれませんが、

今後のアプリのトレンドして抑えておく必要はありそうです。

パーフェクトJavaScript

パーフェクトJavaScript

 

プロダクトマネージャーになりたい人は「Inspired: 顧客の心を捉える製品の創り方」を読むといいかも

読書感想 テクノロジー キャリア

少し前からバズワードっぽくなっているプロダクトマネージャー。

結局どういう人なの?って思ったので、

Inspired: 顧客の心を捉える製品の創り方 を読んでみました。

 

※以下からPMと表記する箇所があります

 

プロダクトマネージャの役割(仕事)とは?

この書籍には「PMの役割とは?」みたいなものが散りばめられているのですが、

その中でもよりシンプルに表現されているのが以下。

 

プロダクトマネージャーの主な任務としては 2つある。

製品の市場性を評価すること(1)と、

開発すべき製品を定義すること(2)である。

 
(1)製品の市場性を評価すること

製品の仕様を決めることだけが仕事ではないのです。

そもそも作ろうとしているプロダクトが、

本当に価値のあるものなのか、

あるいはどうやって価値を高めていくのか

という検証をすることも仕事になります。

 

どうやって作るか(How)だけではなく、

何(what)を、なぜ(why)作るかのレイヤーまで手を出すイメージですかね。

 

また、製品の価値やユーザーの意向を測る指標として、

NPS(ネットプロモータースコア)というものがよく使われているようです。

 

(2)開発すべき製品を定義すること

プロダクトマネージャーの仕事は、

究極の製品を定義することではなく、

目的を達成するために必要最小限までそぎ落とされた製品を定義することである。

これ言うのは簡単なのですが、実際にはかなり難しいんですよね。

製品(機能)を削るというのは、偉い人や顧客の承認を得ないといけないので。

つまり「そぎ落とす理由をロジカルに説明できて」、

なおかつ「偉い人たちと臆せず戦えるキモを持ちあわせた人物」でないとPMは務まらないということですね。

 

プロダクトマネージャーはコードを書くのか?

書籍を読む限りほとんど書かないようです。

というのも、

エンジニアリング部門というのは、基本的に、

正しい製品を作ることではなく

製品を正しく作ることに専念することになっている。

と書いてあるように、 

実際にプレイヤーになると「製品を正しく作ること」に専念してしまい、

「何が正しい製品なのか」混乱すると思います。

 

ではコードを書けなくてもいいのか?

優秀なプロダクトマネージャーになるためには、

自分で新しい技術を発明したり、使いこなしたりする能力を身につける必要はないけれど、

その技術を理解し、活用の可能性を調べられるぐらいには使いこなさなければならない。

書けなくてもいいようですが、 フィジビリティを判断する能力は必要とのこと。

 

プロダクトマネージャになるには?

プロダクトマネージャーは、

エンジニアが質の高い製品を作るために必要だと思っていることを自由にやらせるようにしなければいけないし、

エンジニアは、

プロダクトマネージャーが使いやすくて、価値の高い製品を自由に思い描けるように配慮しなければいけない。

 

すばらしい製品の定義を思いついて、それをエンジニアリングチームに丸投げしてしまう、というのがある。

そのせいで、何をしたいかと何ができるのかをすり合わせるという非常に重要な作業に取りかかるのが遅れて、

いろいろな情報をしっかり検討する時間もないまま意思決定をしなければならない状況に陥ってから、慌ててすり合わせをする羽目になる。

 

やっぱり実際の現場でエンジニアとして経験を積んだ人の方が、上記のような気持ちが分かると思います。

気持ちが理解できるということは、エンジニアチームと上手くコミュニケーションが取れるということだと思うので、

PMになるにはエンジニアとして修行を積むというのが近道だと思います。

※SEじゃダメ

 

まとめ

PMは「製品(プロダクト)のCEO」とどこかで聞きましたが、

ほんとにそんなイメージだと思いました。

 

プロダクトマネージャという言葉が、

世間に認知される前(できる前)からこの役割はあったと思いますが、

なぜここ最近でいっきにフォーカスされるようになったんですかね。

いわゆるITが成熟してきて、単純なサービスの内容だけでは勝負できなくなって、

製品をより良いものにする人、ひいては製品に責任を持つ人を作ろうといった背景ですかね。

 

ちなみにクックパッドでは、PMのことをディレクターと読んでいるらしいです。

呼び名は様々ですが、いずれにしても、

ユーザーを幸せにするサービスを作るためには、

学んで検証をするPDCAを回し続ける人物が必要ですね。

Inspired: 顧客の心を捉える製品の創り方

Inspired: 顧客の心を捉える製品の創り方

 

Swiftでランダムな文字列を生成する方法

アプリ テクノロジー プログラム

Xcodeのバージョン:7.1

Swiftのバージョン:2.1

 

方法

ランダムな数値を生成した後、

その数値の場所の文字列を取得すれば、

おのずとランダムな文字列が生成できます。

 

Swift 2以降は、

advancedBy(n)

を使って任意の場所の文字列を取得できます。

 

 

注意点

上述した通り、

letter[letter.startIndex.advancedBy(randNum)]

のように、

文字列の変数[]

で囲まないと正常に動作しませんでした。

具体的に言うと、advancedBy(n) の「n」に入った数値をそのまま出力してしまいました。

 

何か僕がミスってるのかもしれないですが、

同じような状況に陥った方は上記の方法を試してみてください。

 

詳解 Swift 改訂版

詳解 Swift 改訂版

 

Swiftでキャリア情報とかOS情報とかデバイス名とかIPアドレスとか取得する方法

アプリ プログラム テクノロジー

Xcodeのバージョン:7.1

Swiftのバージョン:2.1

 

ユーザーが使用している端末のデータを取得したいときがあります。

キャリア名とかOSのバージョンとかデバイス名とか。。

ある程度の情報は、以下の方法で簡単に取得できます。

 

IPアドレスだけ特殊で、

Bridging Header(ブリッジングヘッダー)を使わなければ取得できないようです。

ブリッジングヘッダー作成の方法はこちらを参考にしました。

追加したブリッジングヘッダー(.hファイル)に

#include <ifaddrs.h> 

を追加後、

で取得できます。

 

ちなみに、フレームワークプロジェクト(Cocoa Touch framework)だと、

ブリッジングヘッダーは使えないそうです。。

 

詳解 Swift 改訂版

詳解 Swift 改訂版

 

SwiftでBase64エンコードしたときに改行コードが入ってハマった

プログラム テクノロジー アプリ

新年早々めでたくハマって、

f:id:kmatz90:20160109171157j:plain

こんな顔になったので、メモしておきます。

 

Xcodeのバージョン:7.1

Swiftのバージョン:2.1

 

ちなみにBase64とは?

データを64種類の印字可能な英数字のみを用いて、

それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。

MIMEによって規定されていて、

7ビットのデータしか扱うことの出来ない電子メールにて広く利用されている。

- Wikipedia

 

改行コードを正規表現で削除(置換)する

SwiftBase64エンコードした場合、

「64文字」ごとに改行コードが入るようなので、

正規表現で改行コードを削除して対応しました。

MIMEの基準では「76文字」ごとと書いてあるんですけどね。

具体的なコードは下記です。

含まれていたのは「\r\n」でしたが、

念のため「\n」も消せるようにしておきました。

 

※追記

KishikawaKatsumiさんにコメントでご指摘頂きました通り、

encStr!.base64EncodedStringWithOptions([])

で改行を含まないようにできました!

オプションを空で指定する方法を知りませんでした。。

なので、正規表現とかわざわざ使わなくて大丈夫です。。

その他の疑問も丁寧に説明をして頂いて、大変助かりました。

 

詳解 Swift 改訂版

詳解 Swift 改訂版

 

ぜんぶインターネットのおかげ

考えてみた

僕はインターネットが好きだ。

本当にインターネットがあって良かった。

 

インターネットの良いところは、

自分が知らないことを知れる」ことだと思う。

進撃の巨人で言うと、壁の外のことを知れるイメージ。 

f:id:kmatz90:20151226235426j:plain

インターネットがあるおかげで、

東京で楽しく消耗しながら生きていけている。 

 

僕は田舎に生まれてから高校までずっと同じ場所で過ごしてきた。

その反動からか、小さい頃からずっと、華の都大東京(長渕風)で働かないと死ぬのと同じだと思っていた。

紆余曲折あったが、結局インターネットのおかげで東京で働けている。

 

インターネットが好きなのでエンジニアになった。

 

分からないことの大半はインターネットで調べたし、

何が分からないことなのかもインターネットが教えてくれた。

 

インターネットのおかげで、

自分をより必要としてくれる場、評価してくれる場も見つかった。

 

インターネットのおかげでいろんな人に出会えた。  

 

たぶんこの先生まれてくる子たちは、

インターネットは水や空気と同じように

当たり前に存在しているものという感覚になると思う。

でも当たり前にあるものにこそ感謝をしなくちゃいけない。

 

このブログが書けるのもインターネットのおかげ。

 

今年もありがとうございました。

来年もよろしくお願いします。