2018-01-31

機能のベリファイで観点を見つける方法

ある機能のテストを行う時に、どの観点でテストするか考える必要がある。

その観点をはじめからなるべく多く見つけることが重要なんだけど、その観点の見つけ方をまとめてみる


認証系のセキュリティテストで致命的欠陥を見つけられなかった原因

セキュリティ系の品質保証方法で、致命的な欠陥を見つけられなかったので反省。忘備録として書いておく。


相手の道理を聞くべき3つの理由

仕事してて自分が圧倒的に足りていないと感じること。それは、相手の道理を知ることだと思う。

道理とは、相手の行動の原則である。善悪の基準や目的と言ってよい。


2018-01-30

世界的ベストセラー『7つの習慣』をまとめ、思ったことをいろいろ書いてみました。

ここ最近、技術書ばかり読んでいたのですが、会社に入って人格の欠如に悩み始めました。ちょうどそんなときに、7つの習慣、上司が紹介してくれ、電子書籍があったので読みました。世界的に評価の高い本らしいですね。







『7つの習慣』(ななつのしゅうかん、The 7 Habits of Highly Effective People)は、スティーブン・R・コヴィーによって書かれ1996年に出版された書籍。原著の初版は1989年。コヴィーの末日聖徒イエス・キリスト教会/モルモン教の信仰経験に基づいて書かれた。(wikipedia

7つの習慣の概要



7つの習慣は、人生をより善く生きていくうえで重要な習慣をまとめている本です。
本の内容は、大きく分けると、こんな感じになっておりました。


  1.  インサイド・アウト(内から外へ)
  2. 7つの習慣とは
  3. 私的成功
    1. 第1の習慣:主体的である
    2. 第2の習慣:終わりを思い描くことから始める
    3. 第3の習慣:最優先事項を優先する
  4. 公的成功
    1. 第4の習慣:Win-Winを考える
    2. 第5の習慣:まず理解に徹し、そして理解され
    3. 第6の習慣:シナジーを創り出す
    4. 再新再生
    5. 第七の習慣:刃を砥ぐ

今回はこの本をまとめてみたいと思います。

2018-01-28

回帰テスト(Regression Test)をやるうえで重要な観点

回帰テスト(リグレッションテスト)とは



ソフトウェアの製品をアップデートする場合、アップデート以後に、過去の実装とコンフリクトして、エラーが起こる。このような、ディグレを確認するためのテストを回帰テストという。

プログラムを修正・変更した場合に、過去に実施したテストを再度実施することを回帰試験(regression test)又は退行テストという。修正前の試験に再度合格するかどうか、他の機能に影響与えていないかどうか、他の機能が動作するかどうかを確認する。過去のテスト資産を使い、実施する回数も多いことから、実施を省略することがないようにテスト自動化することにより効率化を図る。(ソフトウェアテスト - Wikipedia

2018-01-23

Python sqlite3を触ってみる

Pythonでローカルで動かすちょっとしたアプリケーションなら、sqlite3がよさそうなので、基本的な触り方をメモしておく。

2018-01-21

FlaskとAngular JSで{{}}がかぶってエラーが起こるときの対処法

FlaskとAngular JSを利用している際に、エラーが起こる


FlaskでAngular JSを利用して以下のようなHTMLコードを書いているときに、エラーが表示される。


<html ng-app>
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script>
</head>
<body>
  <h1>リダイレクトURL</h1>
  <p>OAuth Providerで登録した、Client IDと、リダイレクトURLを入力してください。</p>
  <form>
    <label for="client_id">クライアントID</label>
    <input type="textfield" name="client_id" id="client_id" ng-model="client_id" placeholder="クライアントID"></input>
    <label for="redirect_uri">リダイレクトURL</input>
    <input type="textfield" name="redirect_uri" id="redirect_uri" ng-model="redirect_uri" placeholder="リダイレクトURL"></input>
    <label for="textfield">スコープ</label>
    <input type="textfield" name="scope" id="scope" ng-model="scope" placeholder="scope"></input>
  </form>
  <p>生成されたURL</p>
    <a href="https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=263680507619-6sm2e6jv584ilmd7h6jrn5dstk6magke.apps.googleusercontent.com&redirect_uri=http://127.0.0.1:5000/callback.html/&scope=https://www.googleapis.com/auth/calendar
">これじゃ</a>
    <p>{{client_id + redirect_uri + scope}} </p>
  {% if result %}
  <h1>アクセストークン</h1>
    <form method="post">
      <label>Access Token</label>
      <blockquote>{{ result }}</blockquote>
      <input type="textfield" name="access_token" value="{{result}}">
      <input type="submit"></input>
  </form>
  {% endif %}

  {% if schedule %}
  <h1>スケジュール一覧</h1>
  <blockquote>{{ schedule }}</blockquote>
  {% endif %}

<!-- javascript-->
<script>
</script>
</body>
</html>


jinja2.exceptions.UndefinedError
jinja2.exceptions.UndefinedError: 'client_id' is undefined


2018-01-20

【TwitterのAPIを利用するときに確認!】TwitterのOAuth認証はOAuth1.0を使っていた

ツイッターのOAuth認証(オーオース)を利用しようと思って、クライアントアプリを作ろうと思っていた時に、リクエストトークンを使うことが前提となっていた。


OAuth認証では、リクエストトークンを使うなんてことはRFCの規定に書いていないので、なんじゃこりゃっとなった。


よくわからないので、「リクエストトークン」でいろいろググってみても、全然見つからなかった。出てくるのは基本ツイッターのOAuthに関することだけ。


なので、OAuth認証についていろいろ調べていく過程で、理解できたことをまとめる。



プログラミング初心者がエラーが出たときに心がけること10つのこと





プログラミング初心者だと、質問するのはとても難しいです。最初は何がわからないのか、わからない状態なので、どう質問していいかすらわかりませんよね。プログラミングを学習し始めた段階だと、ほとんどの人がみな同じ感情を抱きます。


特に初心者だと、とにかくエラーだらけになるので、「できないフィルター」にかかりがちです。実はほんの些細なタイプミスでも、わけわからないエラーが出てくるので、無条件でプログラミングが難しいと感じてしまうことが多々あります。


プログラミングのメンターを趣味でさせていただいているのですが、やっぱり初心者だと、できないフィルターにかかってしまい、本来であれば自分で解決できることに関しても調べる方法がわからず、また質問の仕方がわからず、非効率的な質問をしてしまっているんだろうなぁと最近感じます。(いうて自分も人のこと言える立場ではないのですが・・・・)


さすがに独学とは言え、2年書いていると、なんとなくエラーの解決方法がわかってくるのですが、もっと最初のうちにエラー解決のために知っておけることもあるなぁと感じました。


そこで、プログラミング初心者がエラーにぶちあった時に、質問する前にやることと、質問するときにやることに分けて、具体的に何をすべきかまとめてみたいと思います。


2018-01-15

お金のために趣味を副業にするなって話

自分の趣味を副業にしてお金を稼ぎたいと思う人が多いと思うんだけど、これをやる上でものすごく注意することがある。(自分がやってきて失敗したことの単なるまとめ)


それは、お金を稼ぐことを目的に趣味を副業にするのはやめておいた方がいいって話。外発的動機付けに内発的動機が消されて、つまらなくなるから。


そうではなく、趣味を楽しむ延長線上にお金が入る仕組みづくりをする必要がある。


昔僕はブログをひょんなきっかけで書き始めていて、最初は誰も見ないようなマニアックな教育社会学系の記事を書いていたんだけど(母校300人くらいの大学生の親の学歴調査したりとか)、広告入れてたら少しお金が入ることに気付いた。


なので、いわゆる稼げる記事を書き始めるようになったんだが、それはほとんど見られない。そしてやる気がなくなってブログを書くこと自体やめた。



で、社会人になって少しまた時間ができたので、スキルアップのための書評やらエンジニア系の記事を書いてたんだけど、そっちの方がモチベーション続くし、人に役に立つものが記事がすらすら書けるのよね。


そんなこんなで金稼ぎのために書いてた記事はほとんど読まれなかったけど、自分が面白いと思って書いた記事はやっぱり読まれるし、月諭吉くらいは入るようになった。


外発的動機付けでやろうとすると、もともとあった内発的な動機が消えてしまうらしいのだ。


楽しくてやってたのに、気付いたらお金のためにやってるみたいなことに、気付いたらなってて、モチベーション落ちてるみたいな。


なので、お金を稼ぐために趣味を副業化させるのはやめたほうがよい。てか冷静に考えると金稼ぐためにやってるなら、普通に土日パートやった方が全然コスパいいはず。


趣味を副業にするときは、何かしらお金以外にモチベーションになるものがない場合、引き受けると本業と違っていつでもやめられてしまうので、


・それをやって心から楽しいか
・それが自らのスキルアップになるか


というその二つの条件が満たせるものでモチベーションを維持できることを副業にするのがよいのかなぁと。

2018-01-14

Python3 データをMySQLに挿入する

目的

・自動更新サイトを作るときに、PythonでMySQLに外部サイトからスクレイピングしたデータを利用して、記事を自動生成したい

2018-01-13

TypeError: numpy boolean subtract, the `-` operator, is deprecated, use the bitwise_xor, the `^` operator, or the logical_xor function instead. の解決方法

TypeError: numpy boolean subtract, the `-` operator, is deprecated, use the bitwise_xor, the `^` operator, or the logical_xor function instead. の解決方法

結論から言うと、numpyのバージョン依存の問題らしい。
numpyをディグレードして、再度インストールしたら治った。


Ubutnu PythonでChromedriverがインストールできないときの対処法

Ubutnu PythonでChromedriverがインストールできないときの対処法のメモ。
結論から言うと、最新バージョンのChromedriver入れれば治る。


selenium.common.exceptions.SessionNotCreatedException: Message: session not created exception chromedriver

とか

selenium.common.exceptions.WebDriverException: Message: unknown error: missing or invalid 'entry.level'

とか、だいたいChromedriverのバージョンの問題らしいですぜ。







普通にChromedriver Ubuntuみたいに調べると、過去のQiitaの記事とかが上位に出るので、Chromedriver latestとかで調べるとよさそう。
































Python SeleniumでJQueryを利用してテキスト検索を行う

PythonでSeleniumを利用して、テキストを検索する際にjQueryを利用しようと思ってやって詰まった時のメモ


2018-01-09

【認証】OAuth認証をBasic認証と比較して何がよいのか調べてみた

# OAuth認証とはなにか 

OAuth認証に仕組みがわからなかったので調べたことのまとめ。
Basic認証と何が違うのか、どんなメリットがあるのか書いてみた。


  • あるWebサービスに別の外部サービスを利用して認証の仕組み
    • News Picksにログインするときにツイッターのアカウントを利用してログインするのはOAuth
    • Webサービスが別の外部サービスに「そのサービスでユーザーが使っているこの情報の提供を許可してくれない?」と聞いて、ユーザーが許可したら、その別の外部サービスからデータをとる許可証をWebサービスに提供するって仕組み

2018-01-08

Rails text_area_tagのsize指定の方法

Railsでtext_area_tagのsize指定方法が見つからなかったのでメモ。
今回書いたのがform_tagで実装したフォームなんだけど、フォームのメッセージを入力するところのサイズを指定したかった。実際に使ったコードはこんな感じ。

  <%= form_tag conversations_path, method: :post do %>
    <%= hidden_field_tag :user_id, @user.id %>
    <%= text_field_tag :subject, @user.username, placeholder: "Subject", class:"hidden" %>
    <div><%= text_area_tag :body, nil, placeholder: "メッセージ", class:"", size: "30x10" %></div>
    <div><%= submit_tag "送信", class:"send-message-button" %></div>
  <% end %>

この太字にしている

<%= text_area_tag :body, nil, placeholder: "メッセージ", class:"", size: "30x10" %>

のところなんだけど、sizeをシンボルで指定できるっぽい。

指定方法は2つあって、

size: "30x10"

みたいに指定する方法と、

cols: "30", rows: "10"

みたいにする方法があるらしい。

この辺を参考にした。

2018-01-03

個人で片手間サービス開発日記③Tech Mentorsの実装面もろもろの要件定義

続き。実装面の話。今までの話はここにまとめておく。


実装

  • 言語:Ruby | Ruby on Rails ,jQuery
    • 認証
      • devise:ログインを扱うgem
    • 投稿
      • redcarpet:マークダウンに対応させる
    • 検索
      • ransack:スキル検索(BY skill = ? AND teachable=? AND needMentor = ?みたいな感じになりそう)
    • スキルのタグ管理
    • ダイレクトメッセージ
      • ActionCable:
      • もしくは普通に一個ダイレクトメッセージのmodel作る
    • テスト
      • RSpec:単体テスト
      • Turnip:これはできたら。統合テスト
    • ウェブサーバー
      • 未定
    • アプリケーションサーバー
      • 未定
    • DB
      • sqlite:開発環境
      • MySQL:本番環境(未定)
    • SaaS
      • モックアップ:Heroku
      • ベータ版:どっかのVPS or AWS
      • 本リリース:AWS
  • DBの構造
    • User
      • id
      • username:string
      • password:string
      • profile:text
      • twitter:text
      • facebook:text
      • github:text
      • created_at:datetime
    • Skill(Act as Taggableになるかも)
      • id
      • skill:string
      • title:string
      • content:text
      • teachable:boolean
      • needhelp:boolean
    • Message
      • id
      • userid:int
      • userid:int
      • content:text
      • created_at:datetime
    • Reply
      • id
      • userid
      • title
      • content


開発工程


以前CtoCのサービス、いわゆるマッチングサイトやった時の失敗談はここにまとめておくけど、サービスを提供する側と供給と、サービスを欲している人の需要のバランスが取れず死んだ。なので、メンターをやりたい人と、メンティーになりたい人が両方存在するかどうかを検証する必要がある。


ただ、これに関してはあると考えていいとおもう。というのも、すでにクラウドソーシングで両方の案件が十分に存在するから。


サーバー


マネタイズとサーバー運用はフェーズによって分ける。
前回はリリースした後にherokuのfreeプラン使っていたので落ちまくりだった。
どのくらいスケールするかわからないけど、そこまで増えるかわからないので、AWSで基本運用しようと思う。

  • 集客フェーズ
    • マネタイズ:IT系の広告費用、マッチング自体が外部CtoCに誘導
    • サーバー:VPSもしくはAWS
  • アクティブユーザー増加フェーズ
    • マネタイズ:IT系の広告費用or転職アフィリエイト
    • サーバー:AWS
  • 仲介手数料フェイズ
    • マネタイズ:就活エージェントと仲介手数料
    • サーバー:AWS

集客


副業で稼いだお金で全部つぎ込む。
Facebook広告、News Picks、ツイッター広告に投資して集客する。
Facebookは前に実験で利用してなんとなく分かった。クラウドワークス、ランサーズ、ココナラあたりをフォローしている人ならいけそうな気がする。あとフリーランス事業者も対象者になりそう。そうするとLevatechとかもいけそうかな。


あとは、プログラミング初心者を支援している企業に声をかけてみる。TechCampとかその辺。


  • Facebook広告効果を数字で検証してみた|Review of My Life 
https://review-of-my-life.blogspot.jp/2017/09/facebook-pr-for-individual-blog.html


QiitaはAPIがあって、そこからツイッターのアカウントが取得できるはずだから、そこでも営業をしかけてみる。クラウドソーシング系は全部顧客データスクレイピングして、データを紐づける。


オウンドメディアをやる。これもスキルシェア系のページを自動生成するコンテンツつくって、ドメイン力上げる。これはアウトソースして作る。


UI


会社の人に頼む。お金払ってでもいいからやってもらう。

2018-01-02

個人で片手間サービス開発日記②ワイヤーフレーム書いてみた

前回の続き。


個人で片手間サービス開発日記①プログラミングメンターサービスの要件定義|Review of My Life https://review-of-my-life.blogspot.jp/2017/12/blog-post.html


プログラミングメンターサービスのモックアップを作ってみたって話。
とりあえずモックアップはcacooで作成し、実際に動かしてみるのはprottを使いました。
で、それを公開するのもわかりにくいと思ったので、動画にしました。


どういう仕様なのかは置いておいて、こんな感じになります。
サービスの概要は前のページを参照していただけると嬉しいのですが、基本的には


・プログラミングを学びたい人と、プログラミングを教えたい人のマッチングサイト
・プログラミングを教えたい人は、メンターという役割になる
・プログラミングを教わりたい人は、メンティーという役割になる
・メンターとメンティーがマッチングすると仲介手数料が発生するというビジネスモデル
・また、エンジニアのリクルーティング企業と今後スケールしたら提携したい



ってな感じになっています。


ほんでもって機能。まずはメンティー側の話。
メンティーはまずログインすると、自分の勉強してきたスキルを登録。そしてそのスキルうをメンターを設けて勉強したいかまで選択。そうすると、メンターからのメンターオファーがくるのである。また、新着のメンタ-のレコメンドがくるようになる。




メンティーは習いたいスキルを検索することができる。そして、いろいろなメンター候補を持っているスキルに応じて比較し、もっとも気に入ったメンターにダイレクトメッセージを送ることができる。メンターとの相談の結果、メンターを引き受けてもいいよって場合は、メンティー申請を送ることができる。





同じように、メンターもこのサービスに登録することができる。
メンターは教えられるスキルを登録することができる。また、メンティーを検索して、顧客を検索することができる。





ということで、本当はモックアップのユーザーテストをしたい。これに登録したいって人がいるのか、本当に欲されているユーザーがいるのか調べたい。



静的なページについても。

・説明ページ about
・利用規約ページ user_terms
・ご利用ガイド guide_top
・採用 recruit

残業するくらいなら副業した方がずっとよい理由

​残業するより副業したほうがよい理由



無理して残業してお金貰うよりも、副業した方が得です。


なぜ、残業するくらいなら副業した方がよいのでしょうか。それは、残業で使う時間は、時間を投資して時間給を得られますが、副業で使う時間は時間を投資して知識と成果に応じた報酬が得られるようになるからです。


ちなみにここでいう残業を、特に仕事がないのにだらだら会社に残って時間給をもらっている人と定義します。(仕事が終わらなくて残業している人は除外します)


2017年振り返りと2018年の目標

目次

  • 2017年は何をやっていたか
    • 大学の除籍勧告を受ける(2017/1)
    • 研修中にGithubのコミットメッセージに「fuck」と書いて怒られる(2017/5)
    • IT企業に入社し品質保証チームへ配属(2017/8)
    • 地元の友人と千葉で酒飲んでいたら翌日病院で目が覚める(2017/8)
    • 引っ越す(2017/09)
    • 「VR彼女」に感銘を受け、VRを購入する(2017/09)
    • 打刻を忘れすぎて試用雇用期間延長(2017/9)
    • クレジットカードが止まる(2017/9)
    • VRでくそげーをつくる(2017/11)
    • 晴れて正規雇用になる(2017/12)
  • 2017年の目標
    • 月30万円副業で稼ぐ → 月7万円で未達
  • 2018年の目標
    • 月30万円副業で稼ぐ
  • 2018年は何をしたいか
    • 仕事
      • 品質保証とは何かの基礎を付ける
      • QAエンジニアとして、テスト自動化にかかわる
      • テストエンジニアの本をたくさん読む
      • インフラ・ネットワーク周りの知識をつける
      • 社外勉強会にたくさん顔を出す
    • 趣味開発
      • Webアプリケーションを開発し、プログラミングの学習障壁を下げるTech Mentorsのリリース
    • ブログ
      • 自動更新サイトの収益化
      • プログラミング初心者に有益な情報をたくさん書く
    • 副業
      • 3-10万円の案件をこなせるようになる
      • 外部プロジェクトで力をつける
      • 外部プロジェクトで個人を売る

あの時、自分は何を考えていたんだろう? ツイッターで1年を振り返れる、Tweet Reflectorを作りました

Tweet Reflectorという簡単なWEBアプリを作りました。もちろん無料で使えます
ツイッターのIDと、ツイートを取得する期間を指定すると、その期間のツイートが表示されるURLを取得できます。







過去の投稿見ていると、けっこうエモい!去年の就職前の3月とか、何考えていたんだろうと思ってみたら、すげぇ調子乗ってたり、今年の研修で一番つらい時とか調べてみると、こんな思いしながら頑張ってたなぁなんて感慨深くなります。


ということで、Tweet Reflectorを使って去年を振り返ってみてください。

https://kdmgs110.github.io/tweet-reflection/

2018-01-01

2017年12月ブログ運営報告:クラウドソーシングで稼げるようになってきました

12月のブログ運営報告です。

先月の目標


先月はこんな目標を立てておりました。が、これは定量化されていない目標なので達成したか検証できませんね。目標とやりたいことがまざっているので、今月はまともな目標を立てます。

今までかなり適当にブログを書いていたのですが、ふざけたことやって収益化する実験が面白いので、もう少し単価の高い収益化をしてみようかと思います。新卒向けのエンジニア・採用関係で狙ってみようかなぁ。
ふざけたことして、IT版のヨッピーになりたい。

今月書きたい記事とか施策とか
  • Tinder APIを使って、プロフィール画像が地蔵でも東大出身だったらマッチングするのか検証する
  • DMMのAPI使って、AV女優の画像認識を行い、AV女優通のオタクを作る
  • MM号のまとめサイトかbot作る
  • データサイエンティストの採用要件スクレイピングする
  • ココナラもう少しちゃんとマーケする
  • コンバージョン用の記事の作成
  • コンバージョン用の経路作成
  • Google Analytics使ってしっかり導線の検証してみたい
  • Goolgle Analyticsと、Rで勉強した知識を使って記事書きたい

収益・PV数


先月17915円でしたが、今月は66003円となりました。ブログは全然更新していなかったので、PV数は4000PVくらい下がりましたが、それでも8000円くらいは稼いでくれているので、よいですね。クリック率もクリック単価も安定して高くなってきたので、あとはPV数を稼げばこちらも安定して入りそうです。


収益:合計66003円


  • Adsense収益:8302円
  • Amazon収益:518円
  • ココナラ収益:39750円
  • note収益:1296円
  • A8収益:100円
  • クラウドワークス:6480円

PV数:22355PV
ページCTR:0.98%

今月やったこと


完全に受託にフォーカスしました。クラウドソーシングを利用して、いろいろな案件に提案してアプリを開発したり、導入したりしました。
スクレイピングツールの開発案件やプログラミングの困ったところ教える系の案件で稼げるようになってきました。


来月の目標

  • 月15万円目指します
    • 単価が3-5万円くらいの案件2個ほど
    • 既存システムの販売で1万円くらいのを3件ほど
    • 外部プロジェクト X 2
  • Webアプリのプロトタイプ作ります
    • Ruby on Railsでプログラミングのメンターマッチングサイト


来月やりたいこと


ツール系は単価低いので、開発優先順位下げます。Webアプリ開発、もしくはワードプレスで稼げるようになれば単価が高そうなので、そっちの路線でやってみます。あとはインフラやLinux系の知識、あと副業の法律的な知識をつけたいと思っています。

    • 自分のGithubページの作成
      • 今までの実績や作成物等の公開したポートフォリオ
    • SEO対策ツールの作成+販売
    • Tech Mentorsリリース(プロトタイプ)
    • Tech Mentorsの自動生成ワードプレスブログ
      • rails メンターみたいなキーワードから検索結果を自動更新
    • 年始に買った2冊の本読み切る
    • インフラ周りの知識をつけて、VPSかSaaSにディプロイ(脱Heroku)
    • QAの勉強会の2回出る


    注目の投稿

     PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...