ペチパー的Python初心者メモ

ひとまず覚えておこうと思ったものをメモしています。

書式付き文字列(日付)

"{0:%Y}-{0:%m}-{0:%d} {0:%H}:{0:%M}:{0:%S}".format(now)

参考

pandas.DataFrame に行を追加

df.loc['2019-07-18 13:14'] = ['A5', 'B5', 'C5']
df.loc['YYY'] = pd.Series(['B6', 'C6', 'D6'], index=['B', 'C', 'D'])

参考

pandas resample オプション

B         business day frequency
C         custom business day frequency (experimental)
D         calendar day frequency
W         weekly frequency
M         month end frequency
SM        semi-month end frequency (15th and end of month)
BM        business month end frequency
CBM       custom business month end frequency
MS        month start frequency
SMS       semi-month start frequency (1st and 15th)
BMS       business month start frequency
CBMS      custom business month start frequency
Q         quarter end frequency
BQ        business quarter endfrequency
QS        quarter start frequency
BQS       business quarter start frequency
A         year end frequency
BA, BY    business year end frequency
AS, YS    year start frequency
BAS, BYS  business year start frequency
BH        business hour frequency
H         hourly frequency
T, min    minutely frequency
S         secondly frequency
L, ms     milliseconds
U, us     microseconds
N         nanoseconds

参考

Django クエリパラメータの取得

    def get(self, request):
        param_value = request.GET.get("query_param", default="foo")

参考

Django モデルの JSON 文字列化

from django.forms.models import model_to_dict

def default(o):
    if isinstance(o, (date, datetime)):
        return "{0:%Y}/{0:%m}/{0:%d} {0:%H}:{0:%M}:{0:%S}".format(o)

class TestView(TemplateView):
    def get(self, request, *args, **kwargs):
        rows = Model.objects.all().order_by('id')
        body = json.dumps(
            [model_to_dict(row) for row in rows], 
            default=default)

参考

Django データベース周辺参考記事

プログラマー35歳(定年|限界)説

巷にはプログラマー35歳(定年|限界)説というものがあるようです。

これまでにこの話を耳に挟む事はありましたが、まともに聞いてみようという気にはなる事はありませんでした。(ちなみに私もプログラマーの端くれで今度の9月で35歳となります)

最近になって私自身もプログラマーとしての伸び代がもうそれほど無い事を意識するようになりました。その意識は日を追うごとに明確になってきています。

名ばかり事業主として安いサラリーで日々せっせと仰せつかったプログラムを作っておりますが、最近これまでの数年間を振り返る事がよくあります。思い出す事といえば突然の電話連絡に怯えプレッシャーに押しつぶされそうになりながら仕事の意識から解放されず仕事と狭い自室に囚われて、周囲の大切な人達を大切にするどころか、なるべく視界に入れないようにさえしていたかもしれません。そうやって得たものは何だったのか、無駄に歳だけとった様な気がしています。

最近になってようやくこのように過去を振り返る余裕が出来たのも確かです。4月の後半から単純労働(プログラミング)する時間を週に3日だけと貫いています。

物事を考える時間、振り返る時間が無いとどうしても近視眼的に目の前に迫ったタスクをこなすだけでいっぱいいっぱいになってしまって少し先に目をやることも難しくなってしまっていたなと実感しています。

適性や限界というのは人それぞれだと思いますが、私もここに至って単純労働としてのプログラミングを生業とすることに限界を感じています。

生活の為にお金を稼ぐ事は相変わらず重要だけど、それと同じくらい自分と周りの大切な存在に目を向ける時間は大切なんだなと。今更で情け無いですが。

某社で某社社長と打ち合わせを行った。

話を聞くと、色々な案件で客から問い合わせや以来が増えていて切羽詰まっている様子だった。

その中である二つの案件をなるべく早く片付けたいということで、なるほど、ではどちらから着手しましょう?と聞いたら怒気をもってどちらとも決められない、と。

立て続けに、実は昨日も客からお叱りの連絡をもらったよ、色々こちらでもカバーしきれなくなっている、さらにはそちらからこちらの作業員に指示を出してもらわないと困るなどとまくし立てる様だった。

責任転嫁ここに極まれりという感じだった。もっとタフな人だと思ってたが。

客から責められるなんて話を持ち出されても、それはそちらの事情で私の立場からしたらハァそうですかというほかない。仕事多いですものね、いい開発者が見つかるといいですね。

こちらに指示を出してくれとはどういう了見だろうか。これはつまるところ半ば自棄になった小企業経営者の経営の丸投げだろう。

私自身単なる末端の作業員でしかないが、「作業員に指示を出す」には作業にかかわるメンバーの状況把握と、プロジェクトに関わる案件の把握、客からの依頼・クレームなど諸々を判断し調整しなければならないことぐらいは理解できる。これは小規模のIT企業にとっては経営の大半を占める重要な役目(管理)であろう。

私はその期待に答えるだけの能力を持ち合わせていないし、不足した能力を補うためにこれからも続く人生の貴重な時間を今まで以上に費やして食らいついていく気力もないし、それなりの報酬をもらっているわけでもないし、とにかくこんな丸投げはごめんだ。

とはいえこの社長の気持ちも理解できる。客から詰められて余裕がなくなれば多くは平常ではいられないだろう。お気持ちを汲んで欲しかった(意識していないとはいえ)所に優先順位を聞かれて感情が溢れてしまったんだろう。しょうもない。

 とにかく、こちらから指示を出すとか、新たに追加するフィールドの名称に一々私の合意を取ろうとするのはやめたほうがいいということは伝えた。

 

「この古いバージョンでは動作確認できていないから、発生している問題はバージョン違いに起因している可能性が高いです。なので新しいミドルウェアをインストールしたほうが無難で手っ取り早いです」

「そうか。仕方ないね、撤退だね」

「そうですね」

 

意地になれない。意地を張るエネルギーさえないのかもしれない。

ミドルウェアを使用したプログラムの設置をお願いしたい旨、現場から応援要請があった。

現場に行く前に事務所でキッティングは済ませるべきというのは皆分かっている。それでも事前に作業依頼が来なかったのは私になるべく手元の作業に集中してもらおうという気遣いからだろう。しかし突然後に引けない状態で作業を依頼されるほうが負担がはるかに大きい。時間の調整も出来ないし、作業は中断される。

ひとまずプログラムをインストールし、設定まで行い動作可能な状態にまで仕立てる。

動作確認で動かしてみるとレジストリキーが見つからないとエラーが発生。そのほかにも忘れてしまったが何らかのエラーが出力されていた。環境を確認してみるとミドルウェアのバージョンがかなり古いものだった。

そのような古いバージョンでプログラムの動作確認はしておらず、正常動作しなかったとしても不思議ではない。ただ、このマシンはこれとはまた別のミドルウェアを用いた印刷プログラムがインストールされておりそちらは正常に動作するらしかった。それは別のプログラマによって実装されたものだ。

以前なら他人の実装したものに自身の実装したものが劣っていると感じて意地になってその問題を解決しようとしたはず。しかし今度は全くそう感じることがなかった。これ以上私のリソースを食わないでくれ、金で解決できるなら是非そうしてくれ、としか感じなかった。

 

私にとっては奇妙な心境の変化だったので書き留めておく。

Linux 時刻合わせ

ntp 設定ファイル

/etc/ntp.conf

ファイアウォール等の制限により外部のサーバーにアクセス出来ない場合などを除き、原則以下の設定を追加すれば良い。 その際 servers ディレクティブはコメントアウトしてもいい。

pool ntp.nict.jp

設定保存後は ntpd を再起動

sudo service ntpd start

同期状況は

ntpq -p 

により確認

参考