中年プログラマーの息抜き

ブログをはじめました。気の向くままにプログラム関連ネタをメモしていきます。

プログラムでモデルとクエリ結果をJOINしてみた

はじめに

SQLが書けない環境でJOINを共通的に使えるようにするために

プログラム

private static <T, D extends Cloneable> void join(boolean p1, List<D> p2, Map<String, List<T>> p3, Function<D, String> p4, Map<String, BiConsumer<D, T>> p5) throws CloneNotSupportedException {
     for (int i = 0; i < p2.size(); i++) {
         String key = p4.apply(p2.get(i));
         if (p3.containsKey(key)) {
             if (p5!= null)
                 p5.get(key).accept(p2.get(i), p3.get(key).get(0));
             for (int n = 1; n < p3.get(key).size(); n++) {
                 D clone = CloneUtils.cloneObject(p2.get(i));
                  if (p5!= null)
                      p5.get(key).accept(clone, p3.get(key).get(n));
                  p2.add(i++, clone);
             }
         } else if (p1) {
             p2.remove(i--);
         } else {

                  if (p5!= null)
                      p5.get(key).accept(clone, p3.get(key).get(n)); //nullを設定できれば

         }
     }
}

利用例

List<・・・> ‘daoList;//結合したいデータ

List<Cloneable> ‘dtoList;//結合されるソース

・・・

Function<daoモデル, String> key1 = m -> ・・・;//結合キーの左

Function<dtoモデル, String> key2 = m -> ・・・;//結合キーの右

join(true, dtoList, daoList.stream().collect(Collectors.groupingBy( key1 )), key2 , daoList.stream().collect(Collectors.toMap(key1 , m -> setter, (m1, m2) -> m1)));

ひとこと

SQL書かないでね・という開発ではORMを調べるのも大変になりますが、それよりも仕様理解に充てる時間を増やしたいときはこんな感じで進めていくのも一案。 

CISCO 841M 設定:その14:別LANに設置したプリンターから印刷する

f:id:tm-b:20170728004131j:plain

はじめに

L3スイッチが4ポートあり、それぞれVLAN1, VLAN2, VLAN3, VLAN4で分離したとしても、ルーティング機能により、VLAN2⇔VLAN3などVLANをまたいだ通信を遮断している状態で始まりです。今回は例として、VLAN2にネットワーク接続されたプリンターを使ってVLAN3から印刷できるようにアクセスリストを考えてみようと思います。

 

VLAN2は「192.168.20.0/24」、VLAN3は「192.168.30.0/24」、プリンターは「192.168.20.100」とします。

機材

CISCO 841M本体
・KAUMO USB RJ45 シリアルコンソールケーブル
・Win10 ノートPC

ACLグループVLAN2

access-list 名前 可否 プロトコル 受け先 受け元 のイメージで

access-list 120 permit tcp 192.168.20.100 0.0.0.0 eq 515    192.168.30.0 0.0.0.255

access-list 120 deny    ip   any 192.168.30.0 0.0.0.255

access-list 120 permit  ip  any  any

ACLグループVLAN3

access-list 名前 可否 プロトコル 送信元 送信先 のイメージで

access-list 130 permit tcp any    192.168.20.100 0.0.0.0 eq 515

access-list 130 deny    ip  any     192.168.20.0 0.0.0.255

access-list 130 permit ip  any any

まとめ

プリンタポート番号は、その機種によって違うと思います。(515番や9100番とか)。。また、プリンタ検索用のUDPは設定してないので、PCへプリンタを追加するときは、プリンタのIPアドレスを直指定しました。。(PCからプリンタ検索で探すことはできません) 、 という限定的な設定ですが、設定イメージをメモとしました。 今回は単一機種のVLANですが、多段ルータでも同じ要領で設定。。。

ASP MVCのViewでコントローラー名やアクション名を取得

f:id:tm-b:20200929012602j:plain

 

はじめに

Razor(レイザー)のレイアウトファイルにページのタイトルなどの出力処理をまとめたいと思い調査したメモ

 

実行中のコントローラー名を取得

@Url.RouteCollection.GetRouteData(Context).Values["controller"]

 

実行中のアクション名を取得

@Url.RouteCollection.GetRouteData(Context).Values["action"]

 

画面タイトルなどデータベースで管理してコントローラーからビューに渡す方法をよく使いますが、アクション数が100個程度であれば、レイアウトファイル内で分岐処理をするほうがお手軽、、まあ十分かなと思い実装を試しました。

 

モデルを介さない値はViewに渡さない