くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

AndroidのWebViewでInstagramを表示する

InstagramのOAuthをAndroidで使おうと思ったら、WebViewが開けず。。
そのときにいろいろ調べたときの備忘録

JavaScriptを有効にすればOK

WebViewのSettingsでJavaScriptを有効にするとうまく動いた!

WebView webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(request_url);
webView.setWebViewClient(webViewClient);

参考にした記事によるとそれだけだったらしい。。。

参考にしたサイト

Djangoのmanage.pyでDBデータのダンプ/ロードする

DjangoでDBデータを扱うときの備忘録。よく使うけど、忘れるので。

DBのデータをダンプする

# 全テーブル出力
$ python manage.py dumpdata --indent 2 --format json

# モジュールの全テーブル出力
$ python manage.py dumpdata <mymodule> --indent 2

# 特定のテーブル出力
$ python manage.py dumpdata <mymodule>.<model> --indent 2

# ダブルバイト文字はunicodeで表示されるので、native2asciiなどで変換
$ python manage.py dumpdata --indent 2 --format json | native2ascii -reverse

DBのデータをロードする

# <filename>のロード
$ python manage.py loaddata <filename>

おまけ、shellでファイルを実行する

$ python manage.py shell < myscript.py

$ python manage.py shell
...
>>> execfile('myscript.py')          # Python2.x
>>> exec(open('myscript.py').read()) # Python3.x
import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()

以上!!

webpack-dev-serverに外部からアクセスできるようにする

webpackでフロントエンドをいじっているけど、
モバイル向けのレイアウト確認のため、スマホから接続したいなと思ったときの備忘録。

webpack-dev-serverの外部アクセス設定

ホストとホストチェックの設定をwebpack.config.jsに追加して、
いつもどおりnpm run devすればOK。

module.exports = {
  devServer: {
    host: '0.0.0.0',
    disableHostCheck: true
  }
}

以上!!

Pythonのドキュメントコメントの書き方(Googleスタイル編)

Pythonのドキュメントコメント(Docstrings)の書き方、何やら流派があるらしい。。
Googleスタイルを調べてみたので、その時の備忘録。

  1. reStructuredText(reST)スタイル
  2. NumPyスタイル
  3. Googleスタイル

Googleスタイルの例

Short Summary:簡単な1行説明。名前とか

def add(a, b):
   """The sum of two numbers.

   """

Extended Summary: 複数行の詳細な概要

def add(a, b):
   """The sum of two numbers.

   (Extended Summary)
   """

Parameters: 関数の引数

"""
Args:
  x (type): Description of parameter `x`.
  y: Description of parameter `y` (with type not specified)
"""

Returns: 関数の返り値

"""
Returns:
  int: Description of anonymous integer return value.
"""

Raises: 例外

"""
Raises:
  LinAlgException: If the matrix is not numerically invertible.
"""

See Also: 関連項目

なし

Notes: 備考。追加の説明。LaTeXも使える。

"""
Note:
  The FFT is a fast implementation of the discrete Fourier transform:
  .. math:: X(e^{j\omega } ) = x(n)e^{ - j\omega n}
"""

Examples: 使用例

"""
Example:
  >>> np.add(1, 2)
  3
"""

Attributes: クラスの属性

"""
Attributes:
  x (float): The X coordinate.
  y (float): The Y coordinate.
"""

Methods: クラスのメソッド

なし

NumPyスタイル編はこちら

wannabe-jellyfish.hatenablog.com

参考にしたサイト様

Pythonのドキュメントコメントの書き方(NumPyスタイル編)

Pythonのドキュメントコメント(Docstrings)の書き方、何やら流派があるらしい。。
NumPyスタイルを調べてみたので、その時の備忘録。

  1. reStructuredText(reST)スタイル
  2. NumPyスタイル
  3. Googleスタイル

NumPyスタイルの例

Short Summary:簡単な1行説明。名前とか

def add(a, b):
   """The sum of two numbers.

   """

Extended Summary: 複数行の詳細な概要

def add(a, b):
   """The sum of two numbers.

   (Extended Summary)
   """

Parameters: 関数の引数

"""
Parameters
----------
x : type
    Description of parameter `x`.
y
    Description of parameter `y` (with type not specified)
"""

Returns: 関数の返り値

"""
Returns
-------
int
    Description of anonymous integer return value.
"""
"""
Returns
-------
err_code : int
    Non-zero value indicates error code, or zero on success.
err_msg : str or None
    Human readable error message, or None on success.
"""

Raises: 例外

"""
Raises
------
LinAlgException
    If the matrix is not numerically invertible.
"""

See Also: 関連項目

"""
See Also
--------
average : Weighted average
"""

Notes: 備考。追加の説明。LaTeXも使える。

"""
Notes
----------
The FFT is a fast implementation of the discrete Fourier transform:
.. math:: X(e^{j\omega } ) = x(n)e^{ - j\omega n}
"""

Examples: 使用例

"""
Examples
----------
>>> np.add(1, 2)
3
"""

Attributes: クラスの属性

"""
Attributes
----------
x : float
    The X coordinate.
y : float
    The Y coordinate.
"""

Methods: クラスのメソッド

"""
Methods
-------
colorspace(c='rgb')
    Represent the photo in the given colorspace.
gamma(n=1.0)
    Change the photo's gamma exposure.
"""

Googleスタイル編はこちら

wannabe-jellyfish.hatenablog.com

参考にしたサイト様

Django REST Framework+SwaggerでAPIドキュメント自動生成

Django REST FrameworkにSwaggerを簡単に入れれるらしいので試してみたときの備忘録。

インストール

とりあえず、pipでインストール

$ pip install django-rest-swagger

あわせて、settings.pyにも追加&設定

INSTALLED_APPS = (
    ...
    'rest_framework',
    'rest_framework_swagger',
)

# 認証ありのAPIもSwaggerUIから使えるように、`LOGIN_URL`とか`DEFAULT_AUTHENTICATION_CLASSES`を設定
LOGIN_URL = 'rest_framework:login'
LOGOUT_URL = 'rest_framework:logout'

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

URLマッピングを追加

SwaggerUIへのパスをurls.pyに追加。
認証のURLも合わせて追加しておく。

from rest_framework_swagger.views import get_swagger_view

schema_view = get_swagger_view(title='API Lists')
urlpatterns += [
    url(r'^swagger/', schema_view),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

あとは、ブラウザからアクセスするだけ!

http://localhost:8080/swaggerにアクセスすると、APIViewとかからドキュメントを作ってくれます!

便利!

参考にしたサイト様

フリーランス一年目の振り返りと今年のほーふというやつ

2018年にフリーランスになってからもうすぐ一年なので、振り返ってみようおもう。
1年をとおして思ったこと・考えていたこと・2019年やりたいことをまとめてみました。

ざっとまとめると、

ざっとふりかえると、全体的にいい感じの立ち上がりかなというのが率直な感想。
意外とお仕事のお誘いをいただけ、なんとか生きていけそうな感じ!

自分のアプリの更新・新作もいくつかリリースでき、資格も増えたのでスキル的にも積み上がってる感じがする。

2019年は、スキルを高めつつ、自分名義の開発をガンガンしていきたい!

退職して野良エンジニアになった。

2011年から新卒で入社した会社を2018年にやめて、晴れて野良エンジニアに!
退職理由はのちのち退職エントリでも書くとして、ざっくりな理由は、やっぱり方向性の違いから。。

もともとエンジニアリングというかソフトウェア工学を突き詰めたかったけど、
今後もマネージメントの道しかないのだなぁとおもい、自由なフリーランスへ!
やっぱり、心底、システム開発が好きなのだなぁと。

フリーランスのお仕事は意外とある

フリーランスになる前・なった直後は、お仕事あるかなぁと不安だったけど、結構ある印象。
1年経ってみて、やっぱりエンジニアが少なく、仕事が溢れている感じに思ってる。

お仕事は基本、Lansersやクラウドワークスなどのクラウドソーシングサービスから。

実績のないはじめのうちは提案ばかりだったけど、
実績が溜まってきてからは、メッセージで個別に相談を受けてから、受注という流ればかりになり、
2018年6月ごろには、ほぼ提案なしでお話をいただけています。

クライアント受けのよかったプロフィールとスキルセット

プロフィールページのPVも右肩あたりになっていて、
プロフィールにもスキルセットや実績をがっつり書いたのがよかったのかなぁと。
はじめてみる人は、人となりや実績が見えるとやっぱり安心してメッセージを送れるみたい。

お話を聞いていて、好感触だったのは、以下の2つのよう。
  • Webシステム/iOS/Androidを一括してお願いできる
  • 要件や仕様が未確定なので、相談しながら決定していきたい

サブシステムごとに会社が変わると、インターフェースを意識合わせしたりなど、
コミュニケーションコストの増加やマネジメントが煩雑になるので、やっぱりうれしいみたい。

また、クライアント自体がシステム開発の経験が少ないため、MESEな仕様検討など、難しい印象。

なので、ざっくりな要件から仕様を詰めていける人材が幸せらしい。
あと、気になるところは適宜提案、コメントすると好印象で次に繋がることが多い。

たとえば、

  • 「この仕様だと、XXXのときだと、YYYの要件が満たせないので、ZZZのようにするのはどうでしょうか?」
  • 「このUIだと、AAAっぽく見えるので、BBBのようなエフェクトやCCCのような見た目がよいとおもうのですが、どうでしょうか?」

など。

目の届かないところに気づく、教えてくれるのは、うれしいですよねー

ときには撤退も必要

フリーランスでお仕事に困っているからと言って、なんでも受けるのは悪手だと思う。
メッセージでやり取りをしているときから、「あ、やばそう」って人は結構いたりする。。

  • 予算が極端に少ない
    • 予算が少ないほど、細かい所の要求が多く、見積もり外の作業依頼も無償で要求される。。
  • 「簡単ですから!」といって、要件を明確にしない
    • だいたい、網羅的に仕様を考えると簡単じゃない。
  • 要求や仕様を聞いても、全体的にふわっとしている
    • 一旦、仕様を決めても、ふわっと変更を求められるので、終わらない感じがする。。

初見でも、「予算が極端に少ない」は対処できるので、
「実績がどうしてもほしい!」とか「このスキルを向上したい!」など、
自分のメリットがない限り、あまり受けないほうがよいとおもう。

もちろん、超絶優良クライアントもいる

逆に、情熱があって、こちらの提案も受け入れつつ、明確な要求を持ち、
迅速な決定力のある、予算を惜しまないという、超絶優良クライアントもいる。
いろいろお話をいただけると、新たな出会いがたくさんあって、フリーランス楽しい

資格はとったほうがよい。アピールのためにも。

フリーランスになってから、なるべく資格は取るようにしている。
理由はいくつか。

  1. クライアントからの受けが良い。相談時に安心感がある。第三者に認定されるって大事。
  2. 勉強する中で、知らない知識を体系的に蓄えれる。業務だと、つまみぐいになるので、体系的な学習は大事
  3. ローン組むときも有利になる(らしい) 不安定な職なので、資格あるから仕事あります!のアピールできるよう

今は、とりあえず、IPAの高度を片っ端からとろうかなと。国家資格つよい

2019年は、もうちょっと自分のアプリをがんばりたい。。

2018年から、受託のお仕事は順調にいただけているので、あとは安定化や継続いただけるようにがんばる感じ!
すでに4社から相談を受けているので、生きていける感じかなーと。

それだけでなく、2019年は新しいことにも挑戦していきたい!

主には、新しいアプリを作ってリリース!ですが、以下のスキルを積みたい。

  1. FirebaseなどのmBaaSを本格活用
  2. Vueをはじめ、フロントエンドスキル。(サクッと作れる得意な構成を見つけたい。。)
  3. 運用・監視・構築周りの本格活用
  4. 手がついてない気になる技術をさわりたい(Flutter/Docker/Figma/StoryBook/Ansible etc..)

あと、自分のWebサイトも改修したい。。きれいにしたい。。

無料でがんばっているけど、そろそろ少しくらい課金して、AWSとか使い倒すのもよいかなと思い始めてきた。。
ブログももうちょっとちゃんとやろう!

以上!