プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

BuriKaigi2024に参加しました

出張で富山にいるのでBuriKaigi2024に参加しました。

burikaigi.dev


残念ながらブリ体験は定員に達していたので出来ませんでしたが、面白い話が聞けました。

参加したセッション

・今こそ、ラムダ式を考える
・OpenAIではじまった生成AI開発ふりかえり
・AIさんとの付き合い方
・技術同人誌を書こう-アウトプットのススメ-


今こそ、ラムダ式を考える
発表されていた内容はこちら

聞いていて思い出したのが、SAPの標準汎用モジュールでもラムダが多用されていて、コピーアドオンを作る際にどうしても動きを読まなくてはならず、苦労した記憶があります。(2日くらいかかったはず)

[ABAP] How do I create and use lambda functions (anonymous functions) in ABAP? | CodingQueries

またラムダ式だとコンパイルの過程が違うの知らなかったです。
それでSAPのコンパイルはどうやっているのか気になったのですが、
色々な言語で作られているみたい。

Rifat Hossain's answer to What programming language does SAP use to develop its products? - Quora

SAPをさわっているとコンパイルまで考えなくて良いので、
アセンブラの内容も見れて精進しなきゃなと…この発表もJavaで作っているなんて…


OpenAIではじまった生成AI開発ふりかえり
AIさんとの付き合い方

弊社でもOpenAIを使って業務効率化できないかと話が出ていたので参加しました。
「OpenAIではじまった生成AI開発ふりかえり」では、主にAzure(だったはず)のサービスについての話でした。
うちで使っているのはOpen AI APIなので、実行の画面も異なっていたので面白かったです。

「AIさんとの付き合い方」ではゴミ出し案内サービス導入断念事例が紹介されていました。
生成AI使ったゴミ出し案内サービスの導入断念 香川 三豊市 | NHK | 生成AI・人工知能

二つのセッションを聞いていて考えていたのが、目標の設定と費用対効果を見ていかないと実用できるかわからないなと。
トークンの量によって費用が変動するので、何に使うのが一番効果的なのか試していかないといけないです。


技術同人誌を書こう-アウトプットのススメ-
技術同人誌が置いてあるということもあってのBuriKaigi参加でした。

他の本も気になった…

「LLMのいま」で、ハルシネーションを活用する方法もあるのに驚きました。
また、なかなか一人だと技術同人誌を書く勇気がないので、コミュニティを見つけられてよかったです。
書けそうなネタ探していきたいと思います。

色々なセッションがあり、楽しめました。
スタッフ・登壇者・参加者のみなさまお疲れ様でした。

あとCDataさんのやるはずだったセッションの記事も面白かったです。
今度は是非話を聞きたいです。
Tesla の公式API をPostman から実行し、車両データの取得やエアコンの操作などを行ってみる | CData Software Blog


最後に
来年こそはブリ体験したい

実地棚卸伝票登録について【SAP】

仕事のアウトプット

SAPの棚卸しは3ステップ

棚卸伝票登録(MI31 or BAPI_MATPHYSINV_CREATE_MULT)

検数入力(MI04 or BAPI_MATPHYSINV_COUNT)

棚卸決済(MI24 and MI07)

棚卸伝票登録は伝票のみ、検数入力はされない。
検数入力後に修正がはしることも(BAPI_MATPHYSINV_CHANGECOUNT)

www.stechno.net

ameblo.jp

WCM周りの記事【SAP】

WCM周りの記事を貼り付けていく。

WAP→Work Approval(WCMにリンクされているオブジェクト、作業承認)
WAPI→Work Application Templates(有効化後、任意のオブジェクトタイプの使用を更新する際に、新しい選択オプションによって拡張
WCD→Work Clearance Document(作業クリアランス文書)



ざっくりのフロー
WCM -Business Models & Process flow | SAP Blogs
SAP Work Clearance Management Process Flow - YouTube


作業承認
Work Approval - SAP Documentation

WCMオブジェクト
WCM Object - SAP Documentation

関連テーブル
SAP PM Work Clearance Management Tables and relationships(PM-WCM)
テーブル相関図
Plant Maintenance Tables (PM/CS/QM) | SAP Blogs

HR(PA30)のデータについて【SAP】

HR周りを少しだけ理解したのでメモです。

PA30→HRマスタデータ更新
インフォタイプはテーブルと紐づいている(PA0001とか)

PA13→ポジションを更新する

組織ユニット(ORGEH)
ポジション(PLANS)
ジョブ(STELL)
↑についてはこの記事を読むとなんとなくわかる
SAP HCM Organizational Structure - Free SAP HR Training

今回使ったテーブル
PA0105
PA0000
PA0001
HRP1000

各テーブルの時間制約条件によって、PA30から登録できる時と、エラーになる時がある。
例えばORGEHの期限が1900/1/1〜2021/12/1だとして、従業員の期限がORGEHの期限を上回っていたとしても
PLANS(Position)の期限が9999/12/31の場合だと登録できる(と、解釈している)

時間制約について
SAP Help Portal

あと通信データ(PA0105)の登録時、ユーザ情報の登録が重複エラーになることがある(他の従業員情報で登録されている場合)
その場合は、他の従業員情報の通信データ(ユーザ情報)を削除する。
これは何度でも登録・削除できるから適宜更新していく。

削除は上部のプルダウンから一括削除できる。
個々のインフォタイプに関連する情報だけ削除しようとしても、削除できないときがある。
権限の問題なのか、構造上の問題なのかは不明。

SAPはプログラムが複雑な構造になっているので、全体を理解するのに時間がかかるな・・
けれど嫌いな方ではないので、ひたすらこれだけやってればいいなら続けていきたい(潰しが効かなくなるが・・)

人月の神話

読んだのでメモしたことを記載していく。

p14 見積もりとスケジューリングに使われる「人月」そのものの間違い
  →コストは実際に人数と月数の積に比例するが、進捗はそうではない
p18 往来の方法でスケジュールされたプロジェクトを検証
  →たいていスケジュールの半分がテストに使われる
p19 シェフの例
p23 遅れているソフトウェアプロジェクトへの要員追加は、さらにプロジェクトを遅らせるだけだ
p26 プログラマ の生産性
p28 ミルズの案
p36 コンセプトの安全性
p38 ムーアズ TRAC言語 ALGOL68
   システムにおけるコンセプトの安全性こそが使いやすさを決定するもの

p308 訳語
   アーキテクチャ→外部設計局面
   インプリメンテーション→内部設計局面(実装というときにも使ってそう)
   実現→プログラミング局面

p44 安全に定義されたメモリスペースと機械の実行処理時間の目標
p50 Stretch 二度目のシステムが危ない(セカンドシステム症候群)→機械xにはmbiteとnマイクロ秒の値割当

p51 コアダンプ→実行中プログラムがエラーで強制終了する際にその時点でプログラムが使用してるメモリ空間の内容をまるごと写し取ってファイルに保存したもの
  スナップショット→ある時点のソースこーそやファイル・ディレクトリ・データベース・ファイルなどの状態を抜き出したもの
  インタープリタ→「通訳者」の意。コンピュータでプログラム実行する方法の1つ
  IBM7030(Stretch) IBM最初のスパコン構築の試み

p56 マニュアルとは製品の外部仕様書
p58 バッカスーナウア記法
p60 週次ミーティングと全体会議
p68 バベルプロジェクトの失敗原因→コミュニケーションの欠落
p70 プロジェクト手引書→それぞれに分かれた文書というよりも、プロジェクトが生産する何かについてそれを文書として構造化したもの
p74 才能はさまざまな組み合わせによって、それぞれ違って発揮される
p76 ロバート・ハインライン「月を売った男」
p82 労力 = (定数)× (命令の数)1.5 PERT
p90 プロラムサイズのコントロール

p92 オーバーレイ→物理メモリで処理できないほど大きなプログラムを実行する場合、機能ごとに分類し、細かく管理、制御すること
p93 実現者自身の姿勢の問題がある トータルシステム的な利用者志向の心構えを養うことが、プログラミングマネージャーの最も重要な役割と言えるかもしれない
p100 ソフトウェアプロジェクトのための文書について
p106 システム1つは駄目にするつもりで作成しなければならない
p111 前のリリースで発見された古いバグは、新しいリリースで再び発生する傾向がある
p113 プログラムメンテナンスはエントロピーが増加する過程がある
p116 (ボロクソ)
p121 mcframe
p124 対話型プログラミング→入力のためにIFに対話形式を採用しているプログラム
   高水準言語→人間にとって理解しやすい構文で書かれている言語
p130 コードができあがるずっと前に、仕様書は外部のテストグループへ渡し、完成度と明瞭さについて詳細に調べてもらわなければならない トップダウンのデザイン
p134 対話型デバッグ(1959)
p154 関連文書の重要性
p168 銀の弾を探し求める どこにも見当たらない
p173 ソフトウェア製品はアプリケーションや利用者、慣習および機械機器(媒体)といた文化的マトリックスにはめ込まれている
   偶有的困難⇄本質的困難
  ↑副次的、付随の(p198)
p177 Ada(プログラミング言語
p187 1950〜1960の研究。利用者は給与管理や在庫管理、会計管理などに店頭パッケージを使いたがらないことが示された→その後変化
p190 プログラムは書くのではなく、構築する
p192 わくわくさせる製品

パワポも作ったから機会があれば会社で話す予定。

AWSでWordPressを入れてみる

【超初心者向け】WordPressをAmazon EC2インスタンスにインストールする - Qiita

チュートリアル: Amazon Linux による WordPress ブログのホスティング - Amazon Elastic Compute Cloud

上記の記事を参考に、WordPressをインストールしようと思ったのですが、接続エラーになったので原因と解決法。


接続エラーの原因

まずログを確認

cd /var/log
cd mariadb
tail -f mariadb.log
※tail -f はリアルタイムでログを表示することができる

そしたらエラーと警告吐いてました。

Invalid (old?) table or database name
Access denied for user

テーブルかデータベース名が違う

vim wp-config.php 
wp-config.phpファイルを確認すると、userをusrに書き間違えてました。
そのため書き直そうとしましたが、書き直しができない。

ls -l 
カレントディレクトリ内のファイルやディレクトリの情報を確認。

chown -R ec2-user:ec2-user * 
ディレクトリとその中身の所有者を再帰的に変更する
再帰的 (全ての階層の権限を変更)
書き込みがEC2ユーザーだとできない状況になっていたので、アクセス権限を変更して、wp-configを書き直しました。
apacheユーザーに変更した後、書き換えでも良いし、ユーザーをapacheグループに追加でも良い。
 sudo usermod -a -G apache ec2-user 
色々な方法がありますね。

注意
インスタンスは終了すると今までやってきたことが全て消えてしまうので、残したい場合は停止。
終了しないように削除保護をすることも有効。

引き続きちょこちょこ勉強していきます。

Haskell入門【3】

すごいHaskellたのしく学ぼう! | Miran Lipovača, 田中 英行, 村主 崇行 |本 | 通販 | Amazon
↑これの第14章(p315)から

Maybeモナド:失敗の可能性という文脈付きの値を表す
リストモナド:非決定性がついた値を表す
Writerモナド:もう1つの値がくっついた値を表し、付加された値はログのように振る舞う。

Writerモナドを使えば、一連の計算を行っている間、すべてのログが単一のログ値にまとめて記録されることを保証できる。

ユーグリットの互除法→2つの数を取ってその最大公約数(2つの数をどちらも割り切れる数のうち最大のもの)を求めるアルゴリズム p323
snd→ペアを受け取ると、2つ目の構成要素を返す

関数はアプリカティブファンクター。これにより、関数が将来返すであろう値を、すでに持っているかのように演算できる p330
関数にとっての文脈とは、値がまだ手元になく、値が欲しければその関数を別の何かに適用しないといけない
stack→いくつかのデータを格納でき、次の2つの操作をサポートするデータ構造 p333
①Push:スタックのてっぺんに要素を積む
②Pop:スタックのてっぺんの要素を取り除く

Control.Monad.Stateモジュールは、状態付き計算を包んだnewtypeを提供している
>>=を使えば2つの状態付き計算をのりづけすることができる p336

モナド値を操作したり、モナド値を返したりする関数をモナディック関数という p342
liftMは関数とモナド値を取って、関数でモナド値を写してくれる≒fmap p343

任意の入れ子になったモナドは平らにできる(join関数) p346
冪集合:その集合の部分集合を全て含んだ集合 p350

分数のためのデータ型:Rational p357

いくつかのデータ構造に、そのデータ構造の一部分に注目するための方法:Zipper p363
データ構造の更新を簡単にし、データ構造を辿るという操作を効率的にしてくれる

ジッパーを使ったファイルシステム p374

付録:日本語のような一文字が1バイトで収まらない文字を含むテキストを扱う時、そのままbytestringに書き換えると問題が生じる(エンコード、文字列リテラルがStringの値)

読み終わりました。
できれば、ちょっとしたプログラムを組もうと思います。