SQLAlchemy のさわりだけ
SQLAlchemy?
Python の O/R マッパーです。
スクリプト言語だし、たかが数行試すだけならSQL 文書いても…とは思ったのだけど、せっかくなので
検証は
- python : 3.6.8 (anaconda)
- sqlite3 インストール済み
- SQLAlchemy : 1.3
インストール
$ pip install SQLAlchemy
スキーマ作成
まずはインストールして
# Importing SQLAlchemy from sqlalchemy import create_engine, Column, Integer, String, Float from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from sqlalchemy.orm.exc import NoResultFound
どうもテーブルがなければ作るという挙動らしい。
# Create Schema. Base = declarative_base() class ClassRoomInfo(Base): __tablename__ = 'class_room_info' id = Column(Integer, primary_key = True, autoincrement = True) title = Column(String(512)) limit = Column(Integer) joins = Column(Integer) def __repr__(self): return "<ClassRoomInfo(id='%s', title='%s', limit='%s', joins='%s')>" % (self.id, self.title, self.limit, self.joins) Base.metadata.create_all(engine)
セッションを作って操作
コネクションの類は全部セッションがどうにかしてくれるご様子。
# Database session start. Session = sessionmaker(bind=engine) session = Session() # ここに何かやりたいこと # End of session. session.close()
INSERT / SELECT
さすが Python 見たままやなー
# Isertion to database. session.add(ClassRoomInfo(title='ひゃっはー', limit=20, joins=10)) # 中略(500 件くらい挿入) # commit session.commit() # Selection id50 = session.query(ClassRoomInfo).filter_by(id = 50).one() print(f'ID 50 = {id50}')
Anaconda パッケージのアップデート
といっても、そんな大したコマンドではないので、あくまでメモ
$ sudo conda update --all
Python 3.6.8 までが今日時点で出てたのでサクッと入れた。
問題は pandas とかアップデート入ってたから、前に書いたサンプルとか動かなくなってそうな点…
結構 Depricate あったからなぁ(汗
AmazonLinux2 に Java11 + Tomcat9 を Ansible2.7 で突っ込む
やろうと思ったきっかけは、そんなわりかし新しい構成でサーバ作ってと頼まれたので。
そして、やってみるとわかるのだけど、2019/03/21 時点でこれをリポジトリサポートしてるLinuxがそうそう無いと言うことに気づく。
強いて言えば Ubuntu18 が JDK11 だけサポートしてた。
でも Tomcat の Java11 対応って、Tomcat9 からなので、それなりに最新を入れざるを得なかったという問題があった。
前回もそんな流れで、JDK11 だけ先行して入ってりゃどうにかなんだろーと思ったためだ。
しかし甘かった…Tomcat9 の問題が待ち構えていたのだ。
なので、今回は前回をパワーアップチャレンジした。
インストールの段階を分離
Playbook は本来やりたいことの単位で区切っておいた方が、可読性の問題から言ってもいいので、全体として 4 つの playbook を作った。
- main.yml
メインの playbook。他の platbook を呼び出すハブ
AmazonLinux2 に ansible 2.7 で JDK11 をぶち込む
VM 作ったらまずは署名認証
VM を立ち上げて、 ssh を確認(今回は 192.168.56.2 にした)したら、署名で SSH できるようにする。
とりあえず mac 側で署名署名などを作る
$ cd ~/.ssh $ ssh-keygen -t rsa -b 4096 -C "hoge@example.com" -f ~/.ssh/virtualbox Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/xxxx/.ssh/virtualbox. Your public key has been saved in /Users/xxxx/.ssh/virtualbox.pub. The key fingerprint is: SHA256:eKnjs4jiHsEktydZ7McMGULVDBQ/Wg3kHpeewVfGVmc hoge@example.com The key's randomart image is: +---[RSA 4096]----+ | .oo**o .o.. E| | o =o+ . oo o | |... = * * .. | |+. = B * = | | o+ + * S | | .o . o | | . o | |. .. o.. | |o+. . oo | +----[SHA256]-----+ $ ls known_hosts virtualbox virtualbox.pub
したら公開鍵を転送
$ scp virtualbox.pub ec2-user@192.168.56.2:~/ ec2-user@192.168.56.2's password: virtualbox.pub $ ssh ec2-user@192.168.56.2
authorized_keys に登録する
$ ssh ec2-user@192.168.56.2 $ cd .ssh/ [ec2-user@amazonlinux .ssh]$ ls -l 合計 0 -rw------- 1 ec2-user ec2-user 0 3月 19 21:22 authorized_keys [ec2-user@amazonlinux .ssh]$ cat ~/virtualbox.pub >> authorized_keys
ansible 設定
適当に ansible.cfg を作る。
曰く、ローカルディレクトリにおいとけば効くのだそうだ
[defaults] host_key_checking=False inventory=/Users/xxxx/workspace/VirtualBox/hosts private_key_file=/Users/xxxx/workspace/VirtualBox/virtualbox
なんか勢いでディレクトリ作っちゃったので、署名の類も移動するか
mv ~/.ssh/virtualbox* /Users/xxxx/workspace/VirtualBox/
hosts も作って
[develop-server] 192.168.56.2
これでもうコマンドは通るはずなので
$ ansible all -u ec2-user -m ping Enter passphrase for key '/Users/xxxx/workspace/VirtualBox/virtualbox': 192.168.56.2 | SUCCESS => { "changed": false, "ping": "pong" }
OK通ったね。
Amazon Corretto11 を DL させてインストールする
といっても、単純に Playbook を書くだけ。
- hosts: develop-server user: ec2-user sudo: yes vars: corretto: https://d3pxv6yz143wms.cloudfront.net/11.0.2.9.3/java-11-amazon-corretto-devel-11.0.2.9-3.x86_64.rpm java_home: /usr/lib/jvm/java-11-amazon-corretto tasks: - name: Update all package yum: name: '*' state: latest - name: Install wget. yum: name: wget state: latest - name: Install corret. yum: name: '{{ corretto }}' state: present - name: Alternatives. alternatives: name: '{{ item }}' link: "/usr/bin/{{ item }}" path: "{{ java_home }}/bin/{{ item }}" with_items: - java - javac
実行すると
$ ansible-playbook java11.yml [DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This feature will be removed in version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. PLAY [develop-server] ****************************************************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************************************************************** Enter passphrase for key '/Users/xxxx/workspace/VirtualBox/virtualbox': ok: [192.168.56.2] TASK [Update all package] ************************************************************************************************************************************************************** ok: [192.168.56.2] TASK [Install wget.] ******************************************************************************************************************************************************************* ok: [192.168.56.2] TASK [Install corret.] ***************************************************************************************************************************************************************** ok: [192.168.56.2] TASK [Alternatives.] ******************************************************************************************************************************************************************* ok: [192.168.56.2] => (item=java) ok: [192.168.56.2] => (item=javac) PLAY RECAP ***************************************************************************************************************************************************************************** 192.168.56.2 : ok=5 changed=0 unreachable=0 failed=0
問題なく終了し、
$ ssh ec2-user@192.168.56.2 ec2-user@192.168.56.2's password: Last login: Tue Mar 19 23:55:37 2019 from 192.168.56.1 __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@amazonlinux ~]$ java --version openjdk 11.0.2 2019-01-15 LTS OpenJDK Runtime Environment Corretto-11.0.2.9.3 (build 11.0.2+9-LTS) OpenJDK 64-Bit Server VM Corretto-11.0.2.9.3 (build 11.0.2+9-LTS, mixed mode)
完了。
調べながらでも 2h で済むか…
Compass から勉強会情報を拾う
Compass から勉強会名と参加率を拾ってみる
まず何がしたかったかというと、勉強会のタイトルを形態素解析して、その募集人数と参加者(+参加待ち)の統計とったら、勉強会界隈のトレンドが追いやすくなるんじゃね?と思ったのが始まり。
で、その為の第一歩として、Compass から勉強会情報を拾ってくる処理をまずは考えた。
まずは requests でAPIを叩いてみる
COMPASS は API仕様 が公開されているので、そこから拾ってみる。
import requests
パラメータ組み立てて
compass_rest_api = 'https://connpass.com/api/v1/event/' params = {"ym":"201904", "count":100, "order":3,"start":1} # 4 月、100 件(max)、着信順、先頭から query = '&'.join([f'{key}={params[key]}' for key in params.keys()])
投げてみる。
r_get = requests.get(compass_rest_api + '?' + query)
r_get.status_code
200
OKOK
中身を拾うと
r_get.json()
応答が
{'results_returned': 100, 'events': [{'event_url': 'https://aaa.connpass.com/event/124784/', 'event_type': 'participation', 'owner_nickname': 'Wakamatz', 'series': {'url': 'https://aaa.connpass.com/', 'id': 1886, 'title': 'Mathematik und Programmierung'}, 'updated_at': '2019-03-19T00:04:09+09:00', 'lat': '34.775820300000', 'started_at': '2019-04-14T13:30:00+09:00', 'hash_tag': 'functional_programming, data_structures', 'title': '純粋関数型データ構造読書会 第23回', 'event_id': 124784, 'lon': '135.544884900000', /* 中略 */ 'accepted': 4, 'ended_at': '2019-04-14T18:00:00+09:00', 'place': 'FG-Space'}], 'results_start': 1, 'results_available': 511}
一度に 100 件縛りがあるので、そこだけが問題だろうか?
とりあえず 100 件でリクエストしてみて、100 件未満になるまでループしてリクエストしてみる。
実際に勉強会データ(名前と参加者数)を拾ってみた
尚、やってみてわかったのだけど、ソート順がデフォルト以外だと、タイムアウトでコケるようだ。
多分インデックスが不足してるか何かしてるんだろうなーと思いつつ。
(いや、それ以外はそこそこ高速で返ってくる事を考えれば、RDB じゃなくて Mongo とか Cassandra とか使ってそう)
class ClassRoom: def __init__(self, title, limit, accepted, waiting): def or_zero(v): if isinstance(v, int): return v return 0 self.title = title self.limit = or_zero(limit) self.joins = or_zero(accepted) + or_zero(waiting) self.score = self.joins / self.limit if self.limit != 0 else 1 def __str__(self): return f'ClassRoom({self.title}, {self.limit}, {self.joins}, {self.score})' def convert(event): return ClassRoom(event['title'], event['limit'], event['accepted'], event['waiting']) def request_to_compass(start): params = {"ym":"201904", "count":WANT_EVENT, "order":1,"start":start} query = '&'.join([f'{key}={params[key]}' for key in params.keys()]) return requests.get(compass_rest_api + '?' + query) WANT_EVENT = 100 getted = WANT_EVENT current_start = 1 class_rooms = [] while getted == WANT_EVENT: r_get = request_to_compass(current_start) respond_json = r_get.json() getted = respond_json['results_returned'] current_start += WANT_EVENT print(f'{getted}, {current_start}') for ev in respond_json['events']: class_rooms.append(convert(ev)) # least 100 r_get = r_get = request_to_compass(current_start) respond_json = r_get.json() for ev in respond_json['events']: class_rooms.append(convert(ev))
100, 101
100, 201
100, 301
100, 401
100, 501
14, 601
[str(s) for s in class_rooms]続きを読む
教師あり学習アルゴリズム
pandas とか matplotlib とか色々弄っていく。
インプットはコレ
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎
- 作者: Andreas C. Muller,Sarah Guido,中田秀基
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/05/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
全部は書かない。
先ずは必要なライブラリのインポート
Python で始める機械学習
という本の第二章先頭なのだけど、いきなり暗黙 import じみた事やってて初見殺しにも程があんだろ(汗
%matplotlib inline from IPython.display import set_matplotlib_formats, display import pandas as pd import numpy as np import matplotlib.pyplot as plt import mglearn
データの種類別散布図
で、改めてデータロード
X, y = mglearn.datasets.make_forge() print(f"X.shape: {X.shape}")
X.shape: (26, 2)
そしてグラフ化
ちなみに、mglearn.discrete_scatter は、どうも pyplot の scartter を第3引数のデータごとに記号を変えて呼び出してくれるものらしい。
参考: テラテイルでの質問
mglearn.discrete_scatter(X[:, 0], X[:, 1], y) plt.legend(["Class 0", "Class 1"], loc=4) plt.xlabel("First feature") plt.ylabel("Second feature")
Text(0, 0.5, 'Second feature')
[f:id:white-azalea:20190318232637p:plain]
それぞれのデータの中身を見ていく。
y はデータの種類を表して
y
array([1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0])
X は、その座標を示してる。
こっちは x, y 座標のペアだ。
X
array([[ 9.96346605, 4.59676542], [11.0329545 , -0.16816717], [11.54155807, 5.21116083], [ 8.69289001, 1.54322016], [ 8.1062269 , 4.28695977], 中略 [11.563957 , 1.3389402 ]])
もっと他にも散布図
wave データセットというらしい。
他の散布図も作画してみる。
単純に x, y の配列だけを指定すると、データ分類のないシンプルな散布図ができる。
X, y = mglearn.datasets.make_wave(n_samples = 40) plt.plot(X, y, 'o') plt.ylim(-3, 3) plt.xlabel('Feature') plt.ylabel('Target')
Text(0, 0.5, 'Target')
[f:id:white-azalea:20190318232752p:plain]
y
array([-0.44822073, 0.33122576, 0.77932073, 0.03497884, -1.38773632,
-2.47196233, -1.52730805, 1.49417157, 1.00032374, 0.22956153,
-1.05979555, 0.7789638 , 0.75418806, -1.51369739, -1.67303415,
-0.90496988, 0.08448544, -0.52734666, -0.54114599, -0.3409073 ,
0.21778193, -1.12469096, 0.37299129, 0.09756349, -0.98618122,
0.96695428, -1.13455014, 0.69798591, 0.43655826, -0.95652133,
0.03527881, -2.08581717, -0.47411033, 1.53708251, 0.86893293,
1.87664889, 0.0945257 , -1.41502356, 0.25438895, 0.09398858])
X
array([[-0.75275929],
[ 2.70428584],
[ 1.39196365],
[ 0.59195091],
[-2.06388816],
[-2.06403288],
[-2.65149833],
[ 2.19705687],
[ 0.60669007],
[ 1.24843547],
/* 中略 */
[ 1.10539816],
[-0.35908504]])
乳癌データセット
恐ろしいなまえだなおい…マジか O'Reily 先生よ
from sklearn.datasets import load_breast_cancer cancer = load_breast_cancer() print(f"Cancer keys: {cancer.keys()}")
Cancer keys: dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
cancer.data.shape
(569, 30)
[f'{n}: {v}' for n, v in zip(cancer.target_names, np.bincount(cancer.target))]
['malignant: 212', 'benign: 357']
cancer.feature_names
array(['mean radius', 'mean texture', 'mean perimeter', 'mean area',
'mean smoothness', 'mean compactness', 'mean concavity',
'mean concave points', 'mean symmetry', 'mean fractal dimension',
'radius error', 'texture error', 'perimeter error', 'area error',
'smoothness error', 'compactness error', 'concavity error',
'concave points error', 'symmetry error',
'fractal dimension error', 'worst radius', 'worst texture',
'worst perimeter', 'worst area', 'worst smoothness',
'worst compactness', 'worst concavity', 'worst concave points',
'worst symmetry', 'worst fractal dimension'], dtype='<U23')
ボストンデータセット
1970 年代のボストン郊外の住宅価格の中央値、犯罪率、チャールズ川からの距離、高速道路への利便性。
from sklearn.datasets import load_boston boston = load_boston() boston.data.shape
(506, 13)
さらにこのデータをオライリー先生は拡張し、特徴量を 104 まで増やしたデータセットを作ったという。
13 の 2 組み合わせで、重複ありの 91 種類が追加されてるらしい。
X, y = mglearn.datasets.load_extended_boston() X.shape
(506, 104)
K-NN アルゴリズム
これは不明なデータ(図では ☆)を、そこから「最も近いデータと多分同じ仲間なのだろう」とか、その捜索範囲で近い点 N 個の平均で、「多分○○の仲間なのだろう」という様な推測をするアルゴリズム。
直近1個で決めるとこんな感じ。
尚、星の分類は色で示してる。
mglearn.plots.plot_knn_classification(n_neighbors=1)
これを直近3点で考えた時の分類。
mglearn.plots.plot_knn_classification(n_neighbors=3)
この様なアルゴリズムを scikit-learn でやってみる。
先ずはデータの読み込みと、学習/試験データへの分離。
from sklearn.model_selection import train_test_split X, y = mglearn.datasets.make_forge() X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)
そして、K 近傍法アルゴリズムの設定と学習。
from sklearn.neighbors import KNeighborsClassifier clf = KNeighborsClassifier(n_neighbors=3) clf.fit(X_train, y_train)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=None, n_neighbors=3, p=2,
weights='uniform')
さて、正答率は?
clf.score(X_test, y_test)
0.8571428571428571
続きを読む
日本のITにもの申す
Togetter: 「日本のITに物申す・比較できる立場にいる外国人から」まとめ - Togetter
コメントが乱暴なのは、パネリストの言葉が乱暴だったのではなくて、私が乱暴な方がメモが早いからです
パネリストと自己紹介
- KANI
WFが主流すぎる…スピードなさすぎだろ。国際社会と戦うならスピードがないとヤられるぞ。
コミュニケーション力:チーム、コード、知識、発送のコミュニケーションを会社にもプロダクトにも必要だろ
英語:日本のマーケットだけて戦ってたら防戦一方だ。英語に進めば新しい事が全部できる様になるんだぜ?
ダイバーシティがなぁ。男性、女性とか年齢とかごちゃ混ぜのダイバースなチームでないといいのができないぞ?
世界にアピールするならそうでもないとダメじゃないのか? - MIKE
開発古過ぎだろ、WF を使うべき場所はあるけど、なんでもWFし過ぎw
英語力なさ過ぎだろwww
新しい方法をほとんど取り入れない。
どんどん取り入れて、役員の説得がひつようなんだよね。
シリコンバレーと違って、日本のエンジニアは、自分の仕事に高い意識を持ってない気がする。
意思決定が遅い。大きい組織ほど、責任を分別して、小さな自己組織化を進めて、意思決定を早くすべきだ。 - ROOMELELE
投資がへぼい。レガシー使い過ぎだ。
人事でみると、ソフト開発者が評価されてない。企業に対して需要なのになんで?
ソフト開発者の給与が低すぎる。シリコンバレーからみて低すぎる
最近サンフランシスコ住みにくいw - DANIEL
全然 SaaS とかの活用が進んでない。
なんか自分たちでどうにかつくりがち。
保守とかで結局足引っ張られるから、自分で作ってメンテナンスするというのが効率が悪い。
クラウドが普及してて、サーバ持たなくていいので、どんどんクラウド使って、インフラ維持とか保守やめようぜ。
職人文化が足引っ張ってないか?最初から一筆書きに完璧を求めすぎだと思う。ちょっとスピード感が厳しい。 日本で一番びっくりするのは開口一番「納豆食べますか』って聞かれる。ちなみに納豆は大好きだw
質問とコメント
- 失われた20年…この成長のなさの問題。
なんか高度経済成長期に貯めた貯金で、年金生活になってる感が強い。
変化できなかった理由はなんだろう?- R: 要素が大きいのは労働市場の特別さ。終身雇用のせいで、人を上手に生かされてないきがする。
転職もしにくいし…同じ企業で転々と移動してて、専門性もつかない。
専門性が求められてるのに、転々と移動しているとどこ行っても初心者なんだよね。
人が同じ会社にいて、流動性がないと、成長してる中小が育たないとか、古くて成長しない大企業が人ばっかプールしてたり、日本が弱る。
Happy でなくてもだらだら会社にしがみつく…体壊してやってるし…
日本の最大の資源は勤勉さだぞ。そんな貴重な資源が無駄塚おされてる - K: 20年前に日本がシリコンバレーになってる事もあり得たんだ。
日本はハードウェアがうま過ぎて、ソフトが軽視されちゃったんだ。
起業しにくすぎる。法律として、従業員の作業時間を記録しないとダメ?
効率化とか考えるなら、働き方自由にしたいのに…。
もっと働き方というのを法制度も含めて考えないとだめじゃね?
- R: 要素が大きいのは労働市場の特別さ。終身雇用のせいで、人を上手に生かされてないきがする。
- 日本がAIで戦うにはどうすればいいだろう?遅れ過ぎてるんだよね
- D: ダイバーシティとかやり方とか、英語とか、たくさんやることはある。
- K: 一つ思ったのは、AI ってブームなんだけどさ、逆にどんな問題を解決すべきなのかって方から考えたらいんでない?
中小企業みると、プロセスが統一化と最適化がすでにされてる。町工場の職人的経験で、最適化されてんじゃん。
そういう意味ではAIのニーズがなくないかって話。 - D: バッチファイルでどうこうってのはよくあるんだけど、日本は三人くらいで綺麗に回せちゃってたりする。
海外だとそれはない。でもこれスケールしない(汗
- 日本のエンジニアの待遇が悪いのはなんでだろうね?
- R: 一つは従業員の流動性の問題で、海外だとより良い給料を出せば集まる。こうした人集めの競争によって待遇はよくなる。
特に優秀なエンジニアだとねぇ。シリコンバレーだと、ビジネスの成功は有能な開発者を確保できるからだ。
だが、日本はそういう意識がない上に、労働市場もそうではないので、市場原理的にも待遇が上がらない。
しかも専門性が育たない上に、レガシーシステムのスキルばかり貯めてたらね…。 - D: 大企業で昔ながらの仕事やってるとこなんだけど、エンジニアがいないと連携できない、SIer にかけると金がかかる。
で、保守だけのメンバーをアサインしたら、そいつらは楽しそうだった。
優秀なのはいる。要するに使われ方が悪い。 - M: シリコンバレーと日本のエンジニアのスキルはそんな変わらん。
シリコンバレーは、エンジニアのやりたいことってのを突き進められる。
日本はそれがない。エンジニアから会社の為に提案するという働きもない、環境としてそれも受け入れないから立場もあげにくい。 - K: そのトーリ
下請けだらけで、だから3K,5K なんだよね
シリコンバレーだとエンジニアは貴重なリソースなんだけどね(汗
Gmail とか Calendar 連携とかもエンジニアが案を出して走ってるんだぜ
内製すればみんなハッピーになれるんだよ。
- R: 一つは従業員の流動性の問題で、海外だとより良い給料を出せば集まる。こうした人集めの競争によって待遇はよくなる。
- SIer に丸投げが起きちゃってね…発注する側もそう考えてそうなんだよね。
発注する側が変わらないとダメなんじゃね疑惑がある、それはどう思う?- M: 国内意識が強いよね、賭け事とかしない国だから。強いやつが内製して成功すれば後に続くんじゃないかな(汗
- 日本とアメリカのいいどこどりできるとしたらどこ?
- M: シリコンバレーも日本も理想郷ってわけではない。
これはエンジニア同士が話し合って、コミュニティを作って、情報を共有しながらやってみるしかない。
それも国際的にコミュニティを持ちたいよね。
- M: シリコンバレーも日本も理想郷ってわけではない。
- 日本のこの流動性のなさって、終身雇用や人材プール、総合職問題もそうだけど、高度経済成長期の「人月を増やせば儲かる」のビジネスモデルに法律も含めて過剰な最適化がされすぎた結果だと分析できるんだけど、この流れや法を変えようと思ったら、どういうアプローチをすればいいのだろう?(私の質問)
- R: 会社に任せちゃうってマインドがよくないよね。
そういうのをどうにかしないと、法整備しても結果はでない。 - K: こういう勉強会の場を増やして啓蒙していかないとね。
- R: 会社に任せちゃうってマインドがよくないよね。
- スタートアップでも古臭いと思うことってない?
- R: ルールとか習慣とかが古臭い。上場準備すると、へんなコンサルとルールがあって、働き方が固定化されちゃうんだよね。
過剰なお役所体質がだめなんだよね。 - D: 上場企業が目的になってたりするよね。上場しなくていいんじゃない(笑
お役所仕事に巻き込まれるよ?WWW
- R: ルールとか習慣とかが古臭い。上場準備すると、へんなコンサルとルールがあって、働き方が固定化されちゃうんだよね。
- WFから変わるにはどうすればいい?
- 今日は大変な日。日本の確定申告。これレガシーそのもの(笑)。
累計で 3000 億とかメンテナンス費用かかってるんだよね(汗)。
レガシーすぎて、アーキテクチャを選んじゃう。今時 JRE6 とかね…。
なんかこういうのに問題を定義する法律とかってない? - 今の日本の若い世代、ウキウキワクワクしててほしい。
こういうアイディアはビジョンがないと生まれない。こういうワクワク感を醸し出すにはどうしたらいい?- M: 日本で戦う夢じゃなくて、世界で戦う夢が必要。そういうビジョンがほしいんだと思う。
最後に
- D: 自分の良さを知る。自分を客観して、世界に挑むべきだ。
- R: 日本人はみんな弱みは言える、強みは言えない。この強みを意識してくれ。強みを伸ばした方がペイできる。
- M: 日本はものづくりの歴史がある。それをソフトウェアに向けてくれ。
- K: 日本がエンジニアリーダーになるには、英語とソフトウェアだ。今やれば来年の今頃にはできるようになってる。まずはやるんだ!