Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Fusion360でジョイント機能

ボディをつくります。
今回は回転軸をつくるので、同じ太さの凸凹を作っておきます。
f:id:shuzo_kino:20170901225323p:plain
新しいコンポネントをつくります
f:id:shuzo_kino:20170901225338p:plain
オブジェクトを選択
f:id:shuzo_kino:20170901225434p:plain
コンポネント化した物体と物体の接合部をある
f:id:shuzo_kino:20170901225508p:plain
接合部を設定すると、アニメーションしながら勝手にくっついてくれます
f:id:shuzo_kino:20170901225514p:plain
ジョイントを編集
f:id:shuzo_kino:20170901225807p:plain
数値をいじると、アレコレできます。
f:id:shuzo_kino:20170901225703p:plain

bottleで外部サービスにPOSTする

情けないミスを繰り返してしまったせいで長くなっちゃいましたが。

実際のところ

requestsライブラリをつかいます。
この例では、"/api/func"にアクセスするとIFTTTに投稿するようになっています。
一通りのプロセスが終わると、返ってきたステータスコード*1をよこしてきます。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from bottle import route, get, run, default_app, request, template
import requests

@get('/api/func')
def api_func():
    data = {"value1": "abc", "value2": "def", "value3": "ghi"}
    headers = {'Content-Type': "application/json"}
    url = 'https://maker.ifttt.com/trigger/{{YOUR_APPNAME}}/with/key/{{YOUR_KEY}}'
    response = requests.post(url, json=data, headers=headers)
    return template("Post Request status_code is {{statusval}}", statusval=response.status_code)

if __name__ == '__main__':
    # コマンドから"python3 index.py"で起動した場合
    run(host='localhost', port=8080)
else:
    # uWSGIから起動した場合
    application = default_app()

*1:上手く行けば200

pythonの環境変数をみる

import sys
sys.path
#>>>  ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/ubuntu/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

Pipで入れてる筈のパッケージで"ImportError: No module named …"とか言われたら

Pipで入れてる筈のパッケージで"ImportError: No module named …"とか言われたら、
内部的にパスが通ってない可能性があります。

実際のところ

場当たり的対処 or 何らかの事情で環境変数を参照出来ない場合

当該パッケージのinstallコマンド。
当然先に入っている旨のメッセージが来ますが、ここでパスが分かります。

$ pip install requests
Requirement already satisfied: requests in /home/ubuntu/.local/lib/python2.7/site-packages

このパスを使ってるスクリプト内で参照させます。

import sys

sys.path.append('/home/ubuntu/.local/lib/python2.7/site-packages')

それでもダメならsudo で入れ直し

$ sudo -H pip install requests

PythonスクリプトからIFTTTのWebhookに投稿する

今回はPythonをつかって、IFTTTのWebhook*1

しくみを知りたい方はこちら
shuzo-kino.hateblo.jp
ブラウザからポチポチやりたい方はこちら
shuzo-kino.hateblo.jp

実際のところ

貴方のキーはYOURKEY、アプリ名はYOURAPPという想定でいきます。
requestsライブラリを導入して、こんな感じで。

import requests
data = {"value1": "abc", "value2": "def", "value3": "ghi"}
headers = {'Content-Type': "application/json"}
url = 'https://maker.ifttt.com/trigger/YOURAPP/with/key/YOURKEY'
response = requests.post(url, json=data, headers=headers)
print response.status_code

実行するとこんなふうにステータスコードを返します。

$ python sample.py 
200

*1:Makerチャンネルから改名

【読書メモ】競争しない競争戦略

経営の本です。
「消耗戦から脱する3つの選択」という副題にもある通り、
ポジショニングをちゃんとやりましょうって本です。

まず、業界にはリーダー企業というものが存在する前提で議論が進みます。
リーダー企業というモノはライバル企業に対し同質化、属領化を強いる傾向があると著者は考えています。
その上で、リーダー企業と対峙するための3つの選択肢が挙げられています。

  • ニッチ戦略
  • 不協和戦略
  • 協調戦略

いかに自社の立ち位置を持ち、相手主導で同質化されないようにするか、というお話が進んでいきます。

ニッチ戦略

これは割りと有名。
強力な武器と確かな市場を抑える事で生き残りを図る方法。
具体例として10個ほど。

  • 技術
  • (販売)チャンネル
  • 特殊(用途)
  • 空間
  • 時間
  • ボリューム
  • 残存
  • 限定
  • カスタマイズ
  • 切り替え

ただし、これに固執しすぎると市場が細ってしまう懸念もあると。
この問題については
ニッチは複数持つことができる点、
極めれば新市場の開拓にも使えるという事例も紹介されています。

不協和戦略

これは結構珍しい視点のような気がします。
業界構造を利用して、相手に同質化されない為の手法です。
中々胸糞というか、ある種破壊者めいた振る舞いですね。
リーダーの強みを弱みとしてしまう事で同質化を阻止する4つの事例が出てきます。

  • 企業資産の負債化
  • 市場資産の負債化
  • 論理の自縛化
  • 事業の共喰い化

協調戦略

リーダー企業の同質化につきあいつつ、主導権はあくまで自分が握るという方法。
自社無しにはバリューチェーンを構築できないようにしたり。

  • コンピタンス・プロバイダー*1
  • レイヤー・マスター*2
  • マーケット・メイカ*3
  • パンドラ*4

おわりに

早稲田の経営学系の先生が出版された本であるため、
結構アカデミックな話よりになってはいます。
MBAホルダーはこういうのを勉強しているんでしょうねぇ……。
実務の人ではないので、又聞きや調査が中心になっており生々しさが不足しているものの、
事例集や考え方のヒントとしては非常にいい本でした。

*1:コア部品の供給。GEのエンジンとか。我々の業界ではARMさんですかね

*2:特定の機能供給に特化

*3:新たな市場を切り開く

*4:他の業種とのコネをつくる

BottleでCookieを使う

何かと便利なCookieもBottleで活用可能です。

実際のところ

response.set_cookie()で、request.get_cookieで拾います。

@route('/hello')
def hello_again():
    if request.get_cookie("visited"):
        return "Welcome back! Nice to see you again"
    else:
        response.set_cookie("visited", "yes")
        return "Hello there! Nice to meet you"

基本的にブラウザの実装に引っ張られますが、4kb程度の量が相場のようです。