いろいろ足りない

不足分を補いたい

供養と原点

先日、現職での最後の出社を終えた。
最後の日でさえも不快な出来事はあったが、不思議と怒りや悲しみといった感情は無かった。
もはや会社に対して抱いている期待が一切無くなってしまったせいだろう。
自身の気持ちの整理というか、ただ文句を書くだけになるかもしれないが、これまでを振り返ってみたい。

続きを読む

人生ってそんなものね

衝撃的なニュースが入ってきた。
なんと転職理由の一つでもあった(具体的表現は避けるが)上司が会社を辞めるというのだ。
自分としては是非とも会社に残り活躍して頂きたく、万が一でも転職先が同じになる事態を避けかったのだが……。
せめてもの現実逃避というか、ストレスの解消というか、何故そうなったかその経緯を自分の妄想として書き散らす。
ここに益はない。

  • 例によって経営層の人を見抜く素晴らしい人物評価によって入社を決める。そして実務能力に欠ける。それでいて年収は確保されている
  • 年収はもちろん、仕事ができない時点で周囲の社員から反発を招く
  • 権力だけはあるので、反発した社員の業績評価を軒並み低評価に。尚、実績に基づく評価をすることはない
  • 反発した社員は去り、居心地の良い環境が出来上がる
  • ただし仕事ができないのはそのままなので、反対意見のない自分の指示通りの結果は実績として何もなく、その事実だけがストレートに返ってくる
  • いたたまれず退職へ

……といった感じだろうか。
マネージャーのアウトプットは、自身と自身の関連部署も含めたアウトプットの総和だという認識が皆無で、自分自身しか見ていないからこうなる。
少なからず自己犠牲ができないのなら管理職になんてなるなと。無論それを会社に利用されても駄目で、なるべきではないのだが。


会社を潰せるほどの無能な人間はいないとされる。それができるのは優秀な人間だからだ。
ただ、会社を無茶苦茶にはできるようだ。
彼一人のせいで何人が辞め、何人の給与が下がり、何人のモチベーションが下がり、間接的とはいえ会社の業績にどれだけの影響をもたらしたのだろうか。
本当に責められるべきはそんな人間を採用した経営層にあり、個人に向けるのはナンセンスとも言える。
まぁそんなものはもうどちらでもよく自分の知ったことではないのだが。


元ネタ。
この記事に含めた申し訳無さはある。
今一度ちゃんと聴いて自戒や反省としたい。
www.amazon.co.jp

人生のどん底を脱した

……と思う。
harist.hatenablog.jp

幸いにして、自身のわがままとも言える複数の条件に合致する企業から内定を頂いた。
7月末から転職活動を始め、約1ヶ月で内定にまで辿り着いたのは運が良い方だったのかもしれない。
ただでさえ後がない状況下で、コロナに加え、炎天下のなかスーツで面接しに行くなど、精神的には非常にキツかった。
毎朝の嘔吐がもはや日課となっていた。
ともあれ、結果は残せたので、自身の転職活動を振り返っておきたい。

続きを読む

人生のどん底で思うこと

先がないため現在限りなく無職に近い状態にいて、メンタルの調子がよくない。
我ながら、よくもころころと転がり落ちたものだ。
先が見えず視野が狭くなりいよいよもって駄目なのかもしれない。
絶望とともに朝を迎え、夜は皆休むため比較的元気になる。ただ睡眠は浅い。
自分は幸いそうなっていないが、昼夜逆転はそうした心理的要素からなるべくしてなるのかもしれない。
まるで死が近づいてくるかのようだ。

自分の死にたい気持ちに負けないように。
できない自分を殺さないように。
そういう意味では敵は自分自身といえる。ただ、それはそれで悲しいことなので、できれば仲良くしていこう。
そして、大抵それは眠いからだとか心理的に疲れている状態にある。それか運動不足だ。
初期段階で対策しておこう。
まずは寝る。寝足りているのなら、身体を動かしてみよう。そして優しい音楽を聞こう。
場合によってはインターネットから離れたほうが良い。本や漫画を読もう。
良いことを考えよう。楽しみを見つけよう。ひとつ嫌なことがあったら、ふたつ好きなことをしよう。
また、戦うときと休むとき、そのメリハリはエグいぐらいにきっちりとつけよう。それくらいで丁度いい。

いっそのこと今のコロナが収まるのを待つ、最大限引きこもって自分のやりたいことをやるチャンスと捉えてみても良いかもしれない。
ざっと考えてみても、他にも取れる手段はいくつかある。本当にある。あまり思いつめないようにしよう。
ただ、今は今の思う手段で頑張ってみようと思っている、そうか、自分はそう思っていたのか。
文字を書くことで分かる、自分との対話でもある。

もう少しだけ頑張ってみる。

最近読んだ本とか

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

続きを読む