いろいろ足りない

不足分を補いたい

最近読んだ本とか

HIGH OUTPUT MANAGEMENT

HIGH OUTPUT MANAGEMENT

両方結構前に買って目は通していたものの、中途半端なままだったので腰を据えてはじめから読んだ。
経営者としての苦難、組織づくり、マネージャーの在り方等についてが書かれている。
HARD THINGSは下手な小説よりも胃が痛めつけられるような話があり、興味深く読めた。
しかしながら自分の身近な組織に置き換えてみると、上司にあたる人々は彼らの主張するところの基礎すらできていない。
それは組織運営、ビジネス的なスキル不足から、社員のモチベーションの上げ方まで。
HIGH OUTPUTではマネージャーによる部下への教育の重要性を説いているが、部下が上に対して教育している始末。
ピーターの法則を最短最速で達成しているのだ。はぁなんと素晴らしい組織であることやら。
そして当の上司は上司で部下の在り方を嘆いていることでしょう。

仮に自分がこの本に関することをそのまま主張したとして、返ってくる言葉は「うちにはうちに合ったやり方がある」であろう。
それはごもっともなのだが、そのやり方を決める指標や基準などない。
臨機応変朝令暮改。大変素晴らしいことであるが、その時その時での気分で決めているのとあまり違いはわからない。
似た事象に対し、前回の判断と今回の判断が異なるのは何故なのだろうか。
それが筆者たちであれば明確な答えを用意するだろうし、その根拠はぐうの音も出ないものに違いない。
心から彼らの爪の垢でも煎じて飲んでほしいと思ったのでした。


プロダクトマネジャーの教科書

プロダクトマネジャーの教科書

  • 作者:Linda Gorchels
  • 発売日: 2006/12/05
  • メディア: 単行本(ソフトカバー)
次に読む。


読んでみたい。発注済み。楽しみ。

flutterのBottomNavigationBarとPageViewとprovider

前回から少しだけ手を加えてみる。
harist.hatenablog.jp


左右にスワイプすることによりタブを切り替えたい。そんなときはPageViewを使う。
api.flutter.dev


自分なりの言葉で言えば、PageControllerを用意するのと、表示内容はPageViewに与える。
BottomNavigationBarにはタップ時のみ切替の処理を加えれば良い。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() {
  runApp(MultiProvider(
    providers: [
      ChangeNotifierProvider(
        create: (context) => PageIndexProvider(),
      )
    ],
    child: MaterialApp(
      theme: ThemeData.dark(),
      home: HomePage(),
    ),
  ));
}

class HomePage extends StatelessWidget {
  final _currentTab = [
    const Center(child: Text('tab1')),
    const Center(child: Text('tab2')),
    const Center(child: Text('tab3')),
    const Center(child: Text('tab4')),
  ];

  final _bottonNavigationItems = [
    const BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('tab1')),
    const BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('tab2')),
    const BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('tab3')),
    const BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('tab4')),
  ];

  final PageController _pageController =
      PageController(initialPage: 0, keepPage: true);

  @override
  Widget build(BuildContext context) {
    final _provider = context.watch<PageIndexProvider>();
    return Scaffold(
      body: PageView(
        controller: _pageController,
        onPageChanged: (index) => _provider.currentIndex = index,
        children: _currentTab,
      ),
      bottomNavigationBar: BottomNavigationBar(
        items: _bottonNavigationItems,
        currentIndex: _provider._currentIndex,
        onTap: (index) {
          _provider.currentIndex = index;
          _pageController.jumpToPage(index);
        },
      ),
    );
  }
}

class PageIndexProvider extends ChangeNotifier {
  int _currentIndex = 0;

  int get currentIndex => _currentIndex;

  set currentIndex(int index) {
    _currentIndex = index;
    notifyListeners();
  }
}

flutterのBottomNavigationBarとprovider

flutterが面白くてちょこちょこ触り始めた。
BottomNavigationBarとproviderの組み合わせはどうやるのが良いのかなといろいろ検索してみたのだけれど、StatefulWidgetや付属するStateクラスが出てきていて、StatelessWidgetのみで表現する方法じゃ駄目なのかなぁと思ったのでメモ。
まだお作法的なところが分からずにいる。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() {
  runApp(MultiProvider(
    providers: [
      ChangeNotifierProvider(
        create: (context) => BottomNavigationBarProvider(),
      )
    ],
    child: MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  final _currentTab = [
    const Center(child: Text('tab1')),
    const Center(child: Text('tab2')),
    const Center(child: Text('tab3')),
    const Center(child: Text('tab4')),
  ];

  final _bottonNavigationItems = [
    const BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('tab1')),
    const BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('tab2')),
    const BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('tab3')),
    const BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('tab4')),
  ];

  @override
  Widget build(BuildContext context) {
    final provider = context.watch<BottomNavigationBarProvider>();
    return MaterialApp(
      theme: ThemeData.dark(),
      home: Scaffold(
        body: _currentTab[provider._currentIndex],
        bottomNavigationBar: BottomNavigationBar(
          items: _bottonNavigationItems,
          currentIndex: provider._currentIndex,
          onTap: (index) {
            provider.currentIndex = index;
          },
        ),
      ),
    );
  }
}

class BottomNavigationBarProvider extends ChangeNotifier {
  int _currentIndex = 0;

  int get currentIndex => _currentIndex;

  set currentIndex(int index) {
    _currentIndex = index;
    notifyListeners();
  }
}

ここまでやねえ

会社が潰れるのは資金が枯渇するのが大半だと思うんだけど、そこに至るプロセスも大体決まってる気がする。
成功パターンにはこれだというものが無いが、失敗パターンはある程度絞られてくるという印象だ。
程々に資金があって尚、失敗していくパターンをつらつらと下から目線で語ってみる。

新しい事業に乗り出す

こんな事業を新しく始めよう。
まぁそこは経営者が好きにやればよいのだが、事前の戦略が不十分なまま始めたりする。製品の完成形を最後まで見通せないにせよ、まずは小さく始めたら良い。一気に舵切りすべきではないのだ。
結果、中途半端に戦力が分散されて、せっかく芽が出かけていた事業は枯れ、新規事業は中途半端なままに終わる。
競合他社に追い抜かれるから中途半端な形でもリリースし続けていく必要がある、という声もあるのだろうが、ならその時間分も計算して事前準備に割いておけよ、とは思う。
そんな準備不足。

スケールアップに失敗

金はある。人を入れよう。人を入れればそれだけ成長が加速する……のは、会社に馴染める風土作りだとか、開発プロセスが明確だとか、多人数をマネジメントできる経験者がいるだとか、組織の成熟度がある程度高くなっているときだと思う。
また、間違っても所属していた会社が有名だったからという理由で人を入れてはいけないし*1、ましてや単に英語ができるから程度の理由で人を入れたりしてはいけないし、人員募集時には即戦力を求めてはいても入社時には即戦力を期待してはいけないのだ。
結果、実力がよく分からない人たちがそれなりの地位で入ってきて、業務知識が一切無いまま役職に就き、現場を混乱させるのだ。
そしてまったく仕事をしない人を量産していく。*2
こういう手法は余程の実力者であれば通用するのだが、そうでない限り他者のモチベーションを下げるだけなのだ。
ちょうど携帯電話の料金に似ていて、末永く使ってる人は割引されず、新規加入者の扱いはすこぶる良いように。
無論、携帯電話会社は顧客の奪い合いになっているので、そういう戦略は理解できるのだが、会社においては長く勤務してきた人のモチベーションが下がって去り、戦力が大幅ダウンするだけだ。


上記はマネジメント不足な領域でもあるしそれについても書くつもりだったけど、お腹が空いたのでここまでにする。
結局は会社の成長ステージによって経営者に求められることも変わるから、経営者自身が成長or変化するか、あるいは経営者を挿げ替える必要があるのかなーと思います。
経営者が昔のままだと失敗します。

*1:人が優秀なのではなく、そういう人でも上手く活用できていた会社が優秀だったんだなと思うことが多い。そして期待はずれな人ほど、そのノウハウを持ち合わせていない

*2:本当に一日中資料を見ているだけの人や、役職に就いていながら何も判断しないし何の方向性も示さないし何のマネジメントもしない人がいる

pywinautoの使い方をはじめから

はじめに

windowsのアプリケーションを自動化するにあたって、いろいろツールはあるようだがpywinautoに行き着いた。
pywinauto.readthedocs.io

いろいろな記事を参考にしたのだが、既に自動化されたコードはあるものの、「じゃあ自分が自動化したいアプリケーションに対してはどうやって使うの?」が当初分からなかったのでここに記してみる。
尚、これは公式ドキュメントを読まなかったため起きたものであり、もし同じような方がいるのであれば下記リンクをまずは読むことを勧める。
pywinauto.readthedocs.io

続きを読む

最近読んでる本とか

読んだ。
まだ自分のものにできておらず、今後もう少し自分の中でよく噛み砕いて血肉にしていきたい。ただ、良い本、良い内容であることは確か。
その前提でのまとまらない感想ではあるが、疎結合とか凝集度について、概念としてはその通りだと思うし異論も何も無いんだけど、いつもそれらの説明には具体例が欠けていると思っていて、コードレベルで知りたい気はしている。
このコードは疎結合じゃないからこういう問題がある、こうすれば疎結合になってこういうメリットが生まれ出るよね、ってのを知りたい。ただ自分のレベルが足りないだけなのかもしれないが。
テストやリファクタリングについてはもうその通りで正しくレガシーコードからの脱却であった。
まずは何よりテストという方針に持っていきたい。

そんな訳で次読む。

テスト駆動開発

テスト駆動開発

  • 作者:Kent Beck
  • 発売日: 2017/10/14
  • メディア: 単行本(ソフトカバー)
元々レガシーコード~よりも前に買ってはいたんだけど、これ読んだりしてて積んでた。

その他Kindleで下記。
通勤時間に読み進めたい。


最近はツールの解説本みたいなのよりは、その在り方みたいなのに興味が出てるような。

まず終わらせよう

思いつきレベルで新しいことを始める。
それを並行して次々始める。
思いつきレベルなので現実的な妥協点が存在せず、それが自縄自縛となりトラブルが起きる。
または、並行しているため各々の品質を担保できずトラブルが起きる。

……そんな現状。


PDCAを回していかないといけない、そんなお偉いさんの言葉はよく聞くもののの、
じゃあ直近、どのような改善の下に計画を立て、何を実施し、何をチェックしたのかが全く出てこない。
自分のレベルが低すぎるのか、どのようなPDCAが回っているのかが分からずにいる。

見える化していかないといけない、そんなお偉いさんの言葉もよく聞くものの、
じゃあ何か可視化されたものが出てきたかというと、何も出てこない。
あるいは自分のレベルが低すぎるのか、どこかに誰でも分かるような実施状況でも出ているのだろうか。

……そんな現状。


他にも組織的な課題が山積し、いよいよ末期かなーと思いつつ働いている。
別に間違ったことは言っていないと思うのだけれど、その実行が伴わないと何の意味もないと思っている。
「小さく始めて改善を積み重ねる」
自分はこれ以外にうまくやる方法はないと思っている。
振り返ることもなく、問題が起きたときに考えはするのだけれど根本的な解決もせずなあなあで対処するが故、
結局は同じような問題が何度も起きる。
いつになったら変わるのかなーと思いつつも、そのような期待をするだけ無駄とも思っている。

そんなぼやき。

コマンドプロンプト起動時に「指定されたパスが見つかりません」が出る問題

別にパスがおかしい訳でもなく、起動時に「指定されたパスが見つかりません」と出る。
特に実害なかったから放置していたんだけど、放置できなくなったので対処。
参考にしたのはここ。というか答え。
stackoverflow.com

レジストリエディタを開いて、
`HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun`
の値を削除する。

どうやらAnaconda3をアンインストールしたときに、この場所までは削除されずそのままになっていた様子。
そのせいでFlutterの実行時にエラーが出て2日ほど嵌っていたのは自分だけで良い。


この問題を調べる過程で下記のソフトの使い勝手が良かったので合わせて紹介。
www.rapidee.com

2020年の目標

あけましておめでとうございます。
今年はどうしましょう。
昨年はいろいろやろうと意気込んだ割に最初の3ヶ月でずっこけてそのままだったので、
今年はあまり気張らずできることを粛々とやっていきたい。

もう1段階レベルを上げる

かなり抽象的ではあるものの。
自分は基本的にいろいろできる(と思い込んでる)ものの、全体的なレベルが低いと思う。
それはコーディングの能力然り、品質然り、周りとの協調性然り。
客観的に見れば「惜しい」という感じがする。
具体的に何をするというよりは意識的な問題で、全体的な底上げを図りたい。
達成目標をどこに置くかだよなぁ。
どこまで行っても自己満で終わるとは思うが、「こうしたい」というのがはじめに挙がった。

英語をマスターする

大きく出た。
何なら英会話教室に出向く勢いでマスターする。
同僚と難なく話せるようにする。

読書習慣をつける

積み本は罪。
昨年は本を買うのが趣味と自分で思うほどに、買っては読まないを繰り返したので、
まずは読書習慣をつけるところから。本を開くところから。

Web業界の力をつける

別業界であり、おそらく時代遅れの基礎的なことしか知らない。
どこでもやっていけるようにする一環として、いろいろ味見していけたらなと。

体力つける/運動する

なんか昨年急に4kgくらい体重が増えた。
ある程度体重が増えたことで元気さを保てているなら良いのだが、同時に腹が邪魔に思えてきた。
でも大丈夫。自分にはリングフィットアドベンチャーがあるから。


とりあえず柱となる5つの項目を挙げた。
あまり気張らず、しかし怠けず、といったバランス感覚で乗り切って行きたい。