アフィリエイト広告を利用しています
G-QVESCNWRVH

2024年05月14日

私はしがないプログラマー

●SEだと思ってたけど

私は、前職で基幹システムをほぼ1から作った
臨床検査を基幹業務とする年商50億程度の企業でだ
毎年2〜3個のペースでサブシステムも新規追加

その中には勤怠管理システムや入退館管理システムもあった
これってSE(システムエンジニア)だよね
私はSEだと思っていた
●単なるプログラマーになった

5月13日(月曜日)
部の会議で、ある工程の1部分以外のミーティングには参加しなくてもいいと
そう言われた

システムを構築する場合、前後のつながりが分れば
なお良いシステムを構築できる
そんなことは常識の範疇だ

それを責任者が知っているならば
私は単なるプログラマーになったと言う事だ
●うーーん(;O;)降格か?

これは、大工の棟梁から1作業員にされた・・・みたいな感じ
プライドのある自称システムエンジニアとしては
前職でもらったきつい言葉[新しいことをしてはならない]の次に辛い言葉
●オフコース[さよなら]

こころの中で、オフコースの「さよなら」って歌がぐるぐる回り始めた
♬ もう 終わりだね〜 ♬

システム部門に限らず、どんな組織でもリーダーの良し悪しで組織良し悪しが決まる
良い所が見つかるまで転々とするしかないのかな?



人気ブログランキング
人気ブログランキング



2024年05月13日

そういえば・・・30分が一瞬になったことを思い出した

●そういえば・・・・

前職でも同様の経験があった
ある現場から要請があり、それを部下に造らせてみた
部下より、出来たと報告があり、テスト仕様書とテスト結果も確認した
●リリース

リリースを指示し、部下はそれに従った
その後しばらくは何事も無く運用できていたみたいだ
みたい・・・とは、現場からクレームなど一切なかったからだ
●運用形態変更

現場で運用形態が変わった
その事は認識していた
しかし、その運用形態の変更が、以前開発したアプリの不具合を浮上させるものとなった

その不具合とは
●遅すぎ

どうやら、運用形態が変わり、そのアプリの動作時間に制限が出来た
変更以前は、起動して気付いたら思っている・・・それでよかった
しかし、運用形態変更後は起動して、遅くても数分以内に終了しなければならないとの事

私は、要望書を取り出してきて、プログラムソースを確認
確かに、アプリは要望書に書かれてい通りに動作するようにコーディングされていたが
基本ロジックはべた読みで、しかも繰り返し処理が沢山

これじゃ、いくら京都で一番大きい(と納入業者から聞かされていた)マシンでも30分以上かかるわな
そこで、私が作り替え、現場にお詫びするとともにニューバージョンをリリースした

すると、現場から【一瞬で完了するようになった】と喜びの声・・・
喜んでくれるのは嬉しいが、そもそもはプログラムの作り方が悪く
また、テスト結果に所要時間を加えていなかったのが私の落ち度
●先週のべた読みアプリ

先週確認した、顧客システムでプロが作ったアプリ
べた読みで30秒かかっていたのが、論理ファイルとロジック見直しで
1秒未満になったこと、それを今思い出して

そーだ! 昔、こんなことがあったなぁと同じような事をしていたのを思い出したわけ
このプロのソフトハウスも要件定義書通りに作成し、動作させ検収を受けたんだろう
最初はデータ数が少なかったから一瞬で終わっていたんだろうが・・・・(笑)



人気ブログランキング
人気ブログランキング



2024年05月11日

悩みぬいたこと・・・顧客システムの改修で

●なぜこんなに遅い?

お客様から、要望を頂いてプログラムソースを分析する前
動作させてみて現状を確認
すると・・・・たった一か月の資料を出すためにかなり時間がかかる

詳しくは、前のブログを参照してください一回目の結果を捨てる理由
そこで、どんなデータベースのアクセスをしているのか?
内部ロジックは何なのか?
それを重点的に調べました。すると

一つ目は前回のブログでお話しした通り、【データベースのベタ読み】
これは、これで愚の極みなんですが・・・(プロレベルでは)

しかし、もう一つが、理解不能なロジック
この難解なロジックをずーーーっと見ていても
このコーディングをしたSEの意図が理解できない
●あれっ? 僕ってバカ?

もしかして、僕ってベテランSEと思っていたのに実はバカ?
そう自虐的に思えるほどさっぱりわからない
そのコードはこうなんです
20240510 難解なロジック-01.jpg
これは、RPG4 固定形式の記法なので分かりにくいと思うので
RPG4 フリー形式に書き換えたのがこちら
20240510 難解なロジック-02.jpg

これよりかは VBAの記法で書いたらこう
20240510 難解なロジック-03.jpg

どうです?
めちゃくちゃ意味不明でしょ
●プロのコードの意味が

これが、ソフトウェアハウスが書いたコードなんです
つまりお金をもらってプログラムを作るプロフェッショナルが書いたコード
これに意味がないなんて思えないですよね

でも、どう考えても理解できません

つまりこんな感じです
私が生物でありコンクリートを食べないか、もしくは私が生物でなくコンクリートを食べないならば
<処理するんだー>
って事なんですね

これって、処理する条件には、私が生物であろうがなかろうがコンクリートを食べなきゃいいんだってことになろうかと・・・

なんで、わざわざ、私が生物であるかどうかを条件に組み込んでいるのか・・・・
不思議で仕方がありませんでした
●理解と落胆

そして、いろいろ論理式での展開や、ベン図(ご存じ?)での検証とかを行い、たどり着いた結論
作ったやつがへぼ過ぎる
良くこんなコードを顧客に納品して恥ずかしくないもんだね

例えて言えば、例えて言えば・・・・たとえて言えば・・・・


例えられなーい! 酷すぎて
結局、コンクリートを食べないならばだけにしてプログラムを書き換えたところ
印刷出力した結果は全く同じ
しかも、速度は、前回お話しした通り

プロの仕事は、大阪から東京まで最速で移動したい顧客に対して
新幹線や飛行機をお勧めせず、各駅停車の在来線で乗り継いでいったら最速ですよー
って感じの納品をしている

そんなの納品されて黙っていられますか?(笑)
まぁ、そのプロのソフトウェアハウスを紹介したのが、当社だってことを聞いているので
口が裂けてもお客様にそんな事はばらせませんが・・・・

(多分、私のブログの読者にはお客様は居ないと・・・
居たとしても、まさか自分の事だと気付かないと・・・信じたい(笑))



人気ブログランキング
人気ブログランキング



一回目の結果を捨てる理由

新幹線.jpg

●処理時間の計測

IBM AS/400でのプログラムやプロシージャなどの動作について
記憶装置は全て主記憶(Windowsでは主記憶の一部にページング用メモリ)をシミュレート
つまりCPUからは、全てのOS・プログラム・データベースなどは主記憶にあるように見える

当然、AS/400にもHDDやSSDは存在する
それらは、主記憶の一部を構成する
(えっ?それって遅いんじゃない?)そんな声が聞こえてきそう(笑)

でも、そのように見せるため仕組みが・・・賢い(笑)
もちろん、主記憶全部がメモリであるわけはない

最近では、補助記憶部分の全てをSSDで構成することも行われているが
SSDと言えども主記憶メモリの速度に比べたらかたつむり

なので、主記憶のうちメモリ部分とHDDやSSDとの間のデータ転送は必要
これはページングとかメモリスワッピングとか呼ばれる
●1回目は遅いはず

なので、あるプログラムを起動すると
1回目から早い場合もあり、遅い場合もある
主記憶のうち、メモリ上にある場合は早く、HDDやSSD上に有れば遅い

それはWindowsでも同じ
ただ・・・・
IBM i というOSがメモリ管理しているわけではない
●2回目以降が早い理由

IBM i というOSが全てのジョブ、全てのプロセスを管理しているため
主記憶のメモリ上に読み込んでこなければならないオブジェクト(プログラム、データベースなどもろもろ)を全て知っており
全てのジョブがどのデータベースを使用しているかを把握

効率よいページングを行っている

いろいろなジョブで良く使われるプロシージャとかデータベースは
恐らくいつもメモリ上に存在しているから2回目以降は極端に早くなる

また、データベース機能が素敵ドキドキしているハートだから
インデックスを張った場合、必要なレコードだけがメモリ上に展開されたりと
プログラムが最高に早く動作できる環境を提供してくれている
●そのまた理由

そして、冒頭に話したページング・・・これを
IBM AS/400ではハードウェアで行っている
CPUがしているわけではない

なので、CPUはブログラムを実行するだけ
その実行に必要な全てのオブジェクトはハードウェアが用意してくれる
このため、めちゃ早になる
●余談

前職での話
グループ他社が前職のシステムをWindowsベースで開発すると・・・
どうやら親会社が自分とこのシステムを前職の会社に導入させようとした
そこで、要件定義をするとき、処理時間も加えた

これからが大変だった
処理速度が3分以上のプログラムを探すというとんでもない業務が降りかかってきた

2週間ぐらい探しまくったが、見つからなかった
プログラム本数は3,000本ほど

仕方なく、オーディエンスを行った(笑)
現場の方に、遅い処理に何があるか聞いてみた

結果、1個のプログラムが候補に挙がった
それで試してみると、結果がでるまで3分19秒
(これで細工(サイク=319)は流々と思ったので覚えてる(笑))

ところが、2回目以降に時間が短縮される事を思い出し
同じプログラムをもう一度起動してみた・・・・

悲しいことに3秒程度で終わってしまった
と、いうことで3分以上時間がかかる処理は
・夜間バッチ(これはWindows化対象外)
全報告書印刷出力ジョブなので30分はかかる
・請求明細作成(これもWindowsか対象外)
全顧客の一か月分の請求明細を作成するため3分半はかかる
のみ(笑)

どんだけ早いねん!と思ってた



人気ブログランキング
人気ブログランキング



タグ:爆速
posted by Y.Taki@AS400 at 10:00| Comment(0) | TrackBack(0) | AS/400

悩んだ挙句・・・高速化に成功

12万円の損失.jpg

●プロの仕事?

お客様のシステムプログラムの改修が必要となった
どうやら、大した改修でもなさそう

売り上げた月に請求せず、次月請求となる販売があり
その場合に印刷された日付が請求日となっているが
これは売上日でなければならないというもの

つまりプログラムの中で、請求日を印刷している部分を
売上日にすればいいと・・・・
そして、データベースには両方とも存在し、ソース中には両方ともある

しめしめにこにこ
これは、とても簡単! フィールド名を1か所変えればOk
と、言う事でフィールド名を変更し、コンパイル

いざ、テストだ!
まずは変更前のプログラムで実行してみる
●あれっ?

なんだか、結果を得るための時間がえらく長い
高々30万レコードから目的の1か月分を処理するのに30秒以上
1秒に1万レコードしか処理できないって・・・

爆遅〜〜〜
IBM AS/400でこれほど遅いのは見たことがない
って言うか、前職で数億レコードから1か月分の1500万レコード
これを処理する請求明細作成処理で4分弱だったことを覚えている

4分として計算しても、6万/秒程度の処理速度
しかも、請求額を計算する時にそれの数十倍のマスターアクセスもしていた
それに比べると・・・・
●そりゃそうだろう

どうしてこんなプログラム構造にしているのか・・・・
RPGサイクルを使用したいがために、系の処理速度を著しく落としている
処理速度低下の原因の一つが・・・べた読み

ありえへん! プロの仕事じゃない!
いやいや、アマでもこれほどいい加減なコーディングはしない

まぁ、開発当初は1秒程度で済んでたんだろう(笑)
しかし、レコード数の増大を考えにいれていないのは素人さん

そこで、改修要件には入っていないが、改修しちゃった(笑)
あくまで、テストのため、毎回30秒も待たされるのは地獄の苦痛

文書化も含めて、変更にかかった時間は・・・約10分
いざ、テスト(笑)
IBM AS/400のプログラム処理速度を測定する時は
1回目を捨てて、2回目以降の3回の処理時間を計測 (何故かは次回に!

一回目:31秒
二回目:31秒
三回目:31秒
あれっ? ちなみに、ゼロ回目・・・本来捨てるはずの計測結果も31秒
納得の結果になった(笑) どれだけ無駄な動作をしてるんだろう
●高速化の為に行ったこと

データベースにインデックスを張っただけ
(AS/400的に言うと論理ファイルを作成しただけ)
そして、プログラムで元のデータベースの名前を論理ファイルの名前に変更しただけ

これだけなら1分だけど、残りの9分は・・・
悩んだーーー
何で悩んだかは、次々回に(笑) (これでブログネタが増えた顔1(うれしいカオ)

高速化の結果
一回目:1秒未満(笑)
二回目:1秒未満
三回目:やっぱり1秒未満

なぜ1秒未満かというと、スマホのストップウォッチで測ったけど
スタートのためのタップを左手人差し指でやったから、正確に測定できなかったΣ( ̄ロ ̄lll)ガーン
だって、プログラムを起動させたら、すぐに終了していたから

もちろん、テストをした結果は全く同じ印刷結果が得られたことは言う間でもない
(請求日のところは売上日にはなっていたけどねウインク
●結論

プロと言えど、ヘタレはいる
なんと言えば良いのか分からない

原因が分かった時には空いた口が塞がらず、気分転換しなければ
改修業務をそのまま継続できなかった(笑)

まさかデータベースのべた読みなんて(笑)
AS400の機能性能を無視してこんな作り方をするから

でも、まあAS400だから30秒程度で済んでたのかも(笑)
このお客様のシステムにより
お客様の被った不利益は・・・時間的損失は・・・

1回当たり30秒だけど、このプログラムに限った事ではない
これに類することを1日50回するとして、
1日当たり1500秒 =25分
1か月あたり     ≒10時間
1年あたり      ≒120時間

時給1000円(安っ!)で換算すると 12万円

このヘタレのおかげで毎年12万円の損失を与えていたことになる

ちなみに・・・タイトルの悩んだのは次々回に述べる事であるので念のため(笑)






人気ブログランキング
人気ブログランキング



" allowfullscreen>

2024年05月10日

元々(前職)が厳しすぎたのかしら?

●昔々は共用アカウント

IBM AS400に触れてから既に35年以上
最初は、共通ユーザーで運用していました

ユーザーアカウントは、事業部ごとに1つずつ作り
ログオン(サインオン)した時に表示するメニューを選ぶため
それだけのために、ユーザーアカウントを使用していました
●個人情報保護

でも、それだけでは何らかのトラブルが発生した時
完全に追跡できません

そして、2005年に個人情報保護法が施行され
前職の企業は医療業界なので、特に厳しく管理運用することになりました
●個別アカウント

Windowsでも一人一人に固有のアカウントを振り出すことはできますが
事実上出来ない業務もあります

緊急対応をしなければならない場合、Windowsでログオンしてアプリを立ち上げて・・・
なんてことをしていると人の命が危うくなることもあります
なので、Windowsでは仕方なしに共通ユーザーを使用していました
(もちろん、営業やシステム部門、管理部門、経営部門では個人ごとのアカウント運用でした)
●AS400では全職員に個別アカウント

ところが、AS400を使用する場合は
共通アカウントは厳禁とし、全職員に個別アカウントを振り出しました
これで、IBM i オペレーティングシステムは全てのログにユーザーアカウント名を書き出してくれます

システム部門要因は、複数のアカウントを使用できるようにしました
通常運用用のアカウントと、機密保護管理者権限を持つアカウントです
機密保護管理者とは、AS400の世界で言われる最高権限ユーザーで、WindowsではAdministratorと呼ばれます

医療業界のプライバシーマークを取得し、
システム部門だけですがISMSも取得し
アカウント管理はますます厳密になりました

パスワードは、8桁以上で、英字・数字・記号の3種類を全て含ませ
世代管理は14世代
有効期限は60日

としていました

ムカついたのは、プライバシーマークの審査を受けている時に
審査員から[御社のパスワード要件はかなり厳しいですね。運用できているんでしょうか?]と言われ
[心の中で]要求事項に書いてあるからしてるんだど(# ゚Д゚)

まぁ、確かにとんでもなく厳しいみたいでした(笑)
前職で構築してきたシステムはセキュリティー面から個別アカウントにしたわけですが
そのおかげで、労務管理・勤怠管理・入退館管理などいろいろな場面で有効活用できました
●現職で

お客様から問い合わせメール[AS400でのアカウントの登録方法を教えてほしい]があり
営業担当がそのやり方を画面コピーを添えて答えていましたが
そのやり方が・・・確かに簡単にするにはそれが一番ですが

セキュリティーのセの字も無い・・状態でした
まぁ、業種が業種なだけにそこまで高度なアカウント管理は必要ないとは思いますが

でも、現職の会社でも
システム開発は共有アカウントを使用しています
なので、誰かがツールを使うと、その設定値が残ってて
大変鬱陶しい

だけど、今は下っ端なので、ブツブツ心の中で文句を言いながら使っています(笑)

本当、個別アカウントにすれば、かなり有効活用できそうな場面が沢山あるのに
それを面倒くさい・・・かな? 良く分からないのかな?
それだけの理由で使わないって、、、食わず嫌いもいいとこです

どうやって、システム責任者を教育していったら良いんだろう・・・
大きな課題ですねー(*^▽^*)





人気ブログランキング
人気ブログランキング



" allowfullscreen>
posted by Y.Taki@AS400 at 03:01| Comment(0) | TrackBack(0) | AS/400

2024年05月09日

研究に没頭して………(笑)

●日付の表現の仕方

前職では日付は8桁の文字として処理していました
現職では日付の年と月と日をそれぞれ4桁、2桁、2桁の数値として処理しています
前職の方が扱いやすかった………

でも、数値のほうがコンパイラにとっては良いのかもウインク
●そんなことはない

RPG4では、日付型の変数も使えるようにはなっている
でも、今から新規開発するシステムでもない限り
文字列型や数値型の日付フィールドを日付型に変更するなんてことはしない
変更のための努力の結果得られるのは
開発者の達成感だけ(笑)

利用者は………何も恩恵が得られない(笑)
やるだけ無駄
●変なとこ

こないだ、システム改修のためにプログラムソースを見た
その会社のシステム、ソースを見た限りなんだか変だ
AS/400のソースは一行ごとに更新日付が付されている
なので、それを見るとどこのロジックをいつ変更したかがだいたい見当がつく
●2029年???

でもその会社のシステムのプログラムソースを見たら
290408とか設定されているのがあった
おかしいな?このフィールドはYYMMDDのはずなのに
まさか欧米式にMMDDYYとかDDMMYYで入力されているのか?
もっと見ると、右2桁に31とか入力されているのを見つけてしまった

さっぱり理由がわからず、そこを担当するもう一人に聴いてみた
すると、驚くべき答えが………





人気ブログランキング
人気ブログランキング



" allowfullscreen>
タグ:日付表現

2024年05月08日

四捨五入で失敗したー

●バグったー

5月7日 連休明け
現場の方から、どうも数値が合わない・・・という連絡があった
現象を確認すると

四捨五入が上手く行っていないようだった
●四捨五入とはなんぞや?

それは、もう読んで字のごとく(笑)
ある桁が、4以下なら切り捨て5以上なら切り上げをすること
ですが・・・落とし穴がありました。

たとえば、3.5を整数にしようとしたら、四捨五入すると 4になります。
3.8を四捨五入しても4、 4.2を四捨五入しても4ですね。
これを数学的に実現しようとすると、0.5を足して整数化すればよい・・・と考えました
●演算方法

実際に・・・
3.5+0.5 = 4.0 ⇒ 整数化すると 4
3.8+0.5 = 4.3 ⇒ 整数化すると 4
4.2+0.5 = 4.7 ⇒ 整数化すると 4
目論み通りですね

でも、落とし穴と言うのは、この演算方法は、マイナスの値には通用しないんです。
−3.5+0.5 = −3.0 ⇒ 整数化すると −3 本当は −4であってほしい
−3.8+0.5 = −3.3 ⇒ 整数化すると −3 これも −4であってほしい
こんな感じです

どうすればいいか? 答えは簡単なんですが・・・
●RPG4ではどうするか

本当は、四捨五入をするための拡張命令を使用すればよかったんですが・・・
それを知らなかったので、上記のようなしちめんどくさいことをしてしまい
結局、バグを出してしまいました。

RPG4での具体的な命令はというと、 EVAL 命令に (H) を付けて
EVAL(H) とすればよかったんです。
あ〜〜〜あ!
●被害は些少で済んだ

このバグによる被害は些少で済んだんですが
プログラム改修に1時間程度かかってしまいました
ほんとに、もう・・・恥ずかしい青ざめ

穴があったら入りたい・・・
無くても穴を掘って埋まりたい(笑)
そんな感じでした

まぁ、一つ賢くなったウインク
それで自分を慰めときます(笑)




人気ブログランキング
人気ブログランキング



" allowfullscreen>

小林さん研修

●ミーティングにて

新人さんの来週の予定は、月曜日から金曜日まで小林さん研修
小林さんというのは、IBM Power(AS/400) のスペシャリストで
小林さん研修というのはソフトウェア開発以外の技術研修らしい

部の責任者が、他に参加したい人って聞いてきたので
恐る恐る手を上げたら、私も参加できることに
●私の想像

それはきっと、IBM Power(AS/400)のアーキテクチャーやOSの構造など
そんな私としては復習しておきたい事柄だと思い
ウキウキしていました。
●ところが

夕方近く、その責任者から
[小林さん研修]は新人社員相手の研修だから
今回、Takiさんは参加しなくてもいいですよねって
見合わせになりました(笑)
●まぁ、そうだよね

まぁ、半分冗談で手を上げてみて
それが通っちゃったけど、実際に研修を受けて得るものは?
って考えると、それはあまり無いでしょうね

逆に、そんな時間を無為に過ごすのは給料泥棒の範疇になるから
これで良かったのかも(笑)




人気ブログランキング
人気ブログランキング



" allowfullscreen>
タグ:IBM IBMAS/400 AS/400

2024年05月06日

4連休は・・・思考の中断(笑)

忘却曲線.png

●本業のシステム改修

引き継いだ顧客のシステム改修
課題がほとんど解決できてきて
残りは・・・難しい課題ばかり
●一生懸命考えて

木曜日の終業を迎えると・・・
残業せずにそそくさと帰宅

残業しない労務管理は良いんだけど
ノっている時に業務を中断すると
次の日にそこのレベルに戻るのに時間がかかる
●特に四連休ともなると

人間には忘却曲線とかいうのがあって
おぼえた一時記憶は
エビングハウスの忘却曲線によると

4日後には26%程度しか残っていないとか
一生懸命考えた思考なのでそこまで低下はしてないとはいえ
楽観的に考えて75%(笑)とすると
●25%分は思い出さないと

元の状態に戻らない・・・ことに
明日は心してかからないと
数時間は無駄に過ごすことに青ざめ

給料泥棒にはなりたくなーい(笑)




人気ブログランキング
人気ブログランキング



" allowfullscreen>
タグ:忘却曲線
posted by Y.Taki@AS400 at 10:13| Comment(0) | TrackBack(0) | 雑談
ファン
検索
<< 2024年11月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新記事
写真ギャラリー
最新コメント
タグクラウド
カテゴリーアーカイブ
プロフィール
Y.Taki@AS400さんの画像
Y.Taki@AS400
IBM AS/400で稼働するシステムの開発・追加を担当して30年以上になります。使えば使うほどこの AS/400 が好きになりました。 こんなSEがいろいろな視点から様々な業務などについて語ります。
プロフィール