通称、MQ、message Queue で名の知れた大御所 Apache Kafka も今となっては老朽化し、現代は、gRPC というのでリプレース開発されているらしい。
RPC といえば、古き Remote Procedure Call ? と思いきや、Googleが開発を進めているもの。RPCフレームワーク、HTTP/2
Recentry but it passed 5 years since appearance,
MVC : model, view , controller, which is traditional design pattern.
MVT : model , view , template , which is adapyed in Django, Python framework.
refer to https://inside.java/2025/06/12/ffm-vs-unsafe/ , java 22 has memory operating api, simulating like a malloc(C) , new (C++),
Inside Java
https://inside.java/2025/06/12/ffm-vs-unsafe/
sumary is MemorySegment
https://docs.oracle.com/javase/jp/22/docs/api/java.base/java/lang/foreign/MemorySegment.Scope.html
- 「ヒープ・セグメント」は、Javaヒープ("on-heap"リージョン)内のメモリー・リージョンによってバックアップされ、アクセスを提供します。
- 「ネイティブ・セグメント」は、Javaヒープ("off-heap"リージョン)の外部にあるメモリーのリージョンによってバックアップされ、アクセスを提供します。
heap memory( which is operated by malloc, caloc ) , heap area or
stack memory( nomal local val ) , located sack area . above native segment, off-heap may be stack
emorySegment segment = ...
int value = segment.get(ValueLayout.JAVA_INT, 0);
@Benchmark
public void fmaReadLoop_1000(Blackhole blackhole) {
for (int i = 0 ; i < 4000 ; i+=4) {
blackhole.consume(memSegment.get(ValueLayout.JAVA_INT_UNALIGNED, i));
}
}
Ths Blackhole may be log
https://javadoc.io/doc/org.openjdk.jmh/jmh-core/1.23/org/openjdk/jmh/infra/Blackhole.html
Consume object. This call provides a side effect preventing JIT to eliminate dependent computations.
Is it means
immediately invoked function expression( IIFE)は、プログラミング言語において、関数を定義後、即座に実行するような構文のこと。 そのような関数を指して即時実行関数や即時関数などと呼ぶこともある。
先ずは、node.js
かなり古めが入っていたのでバージョンアップ
ダウンロード
https://nodejs.org/en
インストーラー
node-v20.12.1-x64.msi
C:\nodej>node -v
v20.12.1
次に nodej でサンプル web server を立ち上げてみる。
>node
>.help
>.edtiror
////// code
const http = require('node:http');
const myHostname = '127.0.0.1';
const port = 3001;
const myServer = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World oooooooooo!\n');
});
myServer.listen(port, myHostname , () => {
console.log(`My Server running at http://${hostname}:${port}/`);
});
//////
Ctrl + D
次に、雛形プロジェクト作成ツール Vue CLI を入れる。
> npm install -g @vue/cli
・・・・
・・・・
プロジェクトを生成
>vue create mycli
([Vue 2] babel, eslint ) 選択
C:\nodej\mycli\src
→ 生成したコードを適度に修正してみる。
C:\nodej\mycli\src\main.js
※./App.vue のimport別名を変更
--------------------------------------
import Vue from 'vue'
import AppMy from './App.vue' // ※
Vue.config.productionTip = false
new Vue({
render: h => h(AppMy),
}).$mount('#app')
--------------------------------------
C:\nodej\mycli\src\App.vue
・コンポーネントの名称を HelloWorldTomo に変更
・コンポーネント props プロパティ名称を msgTomo: String に変更
-------------------------------------------------------------------------------------
<template>
<div id="app">
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorldTomo msgTomo="Welcome to Your Vue.js App"/>
</div>
</template>
<script>
import HelloWorldTomo from './components/MyHelloWorldCompo.vue'
export default {
name: 'App',
components: {
HelloWorldTomo
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
C:\nodej\mycli\src\components\MyHelloWorldCompo.vue
・コンポーネント props プロパティ名称を msgTomo: String に変更
-------------------------------------------------------------------------------------
<template>
<div class="hello">
<h1>{{ msgTomo }}</h1>
<p>
For a guide and recipes on how to configure / customize this project,<br>
check out the
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
</p>
<h3>Installed CLI Plugins</h3>
<ul>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
</ul>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msgTomo: String
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
-------------------------------------------------------------------------------------
### Compiles and hot-reloads for development
> npm run serve
次に、Jest と vue-test-utils
をインストール ( JavaのJUnit相当 )
(参考) https://zenn.dev/hrtk/scraps/3107800740739e
> vue add unit-jest

以下、自動生成テストコード
C:\nodej\mycli\tests\unit
example.spec.js
import { shallowMount } from '@vue/test-utils'
import HelloWorld from '@/components/HelloWorld.vue'
describe('HelloWorld.vue', () => {
it('renders props.msg when passed', () => {
const msg = 'new message'
const wrapper = shallowMount(HelloWorld, {
propsData: { msg }
})
expect(wrapper.text()).toMatch(msg)
})})
適度に編集したソースに合わせて、テストコードを編集する
import { shallowMount } from '@vue/test-utils'
import HelloWorld from '@/components/MyHelloWorldCompo.vue'
describe('HelloWorldTEST.vue', () => {
it('renders props.msg when passed.....', () => {
const msgTomo = 'new message meeee'
const wrapper = shallowMount(HelloWorld, {
propsData: { msgTomo }
})
expect(wrapper.text()).toMatch(msgTomo) /// toMatch で期待値と実測値を比較検証
})
})
package.json
{
"name": "mycli",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"test:unit": "vue-cli-service test:unit",
"lint": "vue-cli-service lint"
},
・・・・・
・・・・・
テスト実施
>npm run test:unit
前回、Vue.js のプロジェクトに関わって、今回、チーム担当とは別のVueチームが JSF( .xhtml ) とは別のVue で構成されれた一連のサイトであった。今後の準備のためにもVue.js を細々と研究してきた。
Vue2 から Vue3 形式へ大きく変わっている。今はVue3スタイルが主流。
プロパティ
data
computed
method
色々あり、これらは都度ググるで確認。
以下、Vue 2 , 3での .vue ファイルに script , template に HTMLをまとめて記述する方式、など様々の改良がある。
以下、<template>を導入する以前の古典的スタイル。
------ someFor.html ---
<div id="app">
<form>
<input type="button" value="変更" v-on:click="onclick" />
</form>
<ul>
<li v-for="itemm in listXX" v-bind:key="itemm">{{ itemm }}</li>
</ul>
</div>
--- someFor.js ---
new Vue({
el: '#app',
data: {
listXX: [ '赤パジャマ', '青パジャマ', '黄パジャマ' ] /// Vue2 では配列をこの形式で定義
},
methods: {
onclick: function() {
// this.list[1] = '茶パジャマ'; /// →このような直接参照で変更できない。
Vue.set(this.listXX, 1, '茶茶茶茶茶茶'); /// その他 push, pop(), shift, unshift, splice sort, reverse などあり。
this.listXX.splice(1, 1, '茶茶茶茶茶');
}
}
});
これを Vue 3で記述してみる。
codesandbox というオンラインコンパイラの活用が環境構築無し、最短ルート。
https://codesandbox.io/s/vue
----- App.vue --------------------------------------------
<template>
<form>
<input type="button" value="変更" v-on:click="changeData" />
前回 Kotlin の案件に参加しこの言語を体系的に扱った。それを自分視点で改めてまとめる。
↓ このサンプルがベーシックで一番分かりやすい。
https://github.com/Kotlin/kotlin-by-example/tree/master/examples
先ずは Data classes のところ
data class User(val name: String, val id: Int) {
override fun equals(other: Any?) = // 1
other is User && other.id == this.id // 2
}
→ ディフォルトメソッドをオーバーライドする。全メンバーが等しくてオブジェクトが等しい、とするディフォルトをここでは id が等しければ、インスタンスが等しいとする、とするという物。
//1 → other: Any? nullありの全ての型のother,
//2 → other が User のインスタンスの場合( Javaの instanceOf 相当 )、かつ other の id と自分の id が等しければ true
近年、OracleがJavaの有償化を皮切りにオープンJDKが続々出て来ている。
中でも活用頻度があるのが、eclipse foundation の AdoptOpen JDK
これを eclipse に指定する。
AdoptOpen は、以下のような感じでセットアップされる。
C:\Program Files\Eclipse Foundation\jdk-11.0.12.7-hotspot\bin
OpenJDK11U-jdk_x64_windows_hotspot_11.0.12_7.msi で .dll が豊富にありさながらWindowsアプリケーションの様相。昨今の Graal VMが反映されネイティブ化している感じ。
そのままだと
から辿れず。以下を追記
----- eclipse.ini -------------------------
-startup
plugins/org.eclipse.equinox.launcher_1.6.200.v20210416-2027.jar--launcher.library
C:\Users\tomoi\.p2\pool\plugins\org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.200.v20210429-1609
-product
org.eclipse.epp.package.java.product
-showsplash
C:\Users\tomoi\.p2\pool\plugins\org.eclipse.epp.package.common_4.20.0.20210612-1200
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vm
C:/Program Files/Eclipse Foundation/jdk-11.0.12.7-hotspot/bin
#C:/Users/tomoi/.p2/pool/plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_16.0.2.v20210721-1149/jre/bin-vmargs
-Dosgi.requiredJavaVersion=11
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-Dsun.java.command=Eclipse
今では純Javaはむしろ少数派で、ポータルサイト界隈では Kotlinが一般的になっている。
Android開発が、ほぼKolin化していてその有効性がWebに波及した結果かも。
構文特性として、VB同様、
var 変数名: 変数型
このスタイルは、Kotlin も Scala も Go も同じ
[ 例 ]
var koto: String ( java String koto; )
ブロックチェーン BlockChan技術が次世代の金融インフラ云々、騒ぎが暫くあったがいつものようにそろそろブームが冷めてきた様子。Hyperledger Fabric (https://www.hyperledger.org/use/fabric)が実装するオープンソースとして一世を風靡し、大手各社(日立ソリューションズら)が取り組んでいることを派手アピールしている。
しかし自分はこれはオープンソースの研究レベル以外進捗は絶対無い、と見込んでいる。商用へのチャレンジなどと勢いづているが、金融商社等で当たり前に行われている受注・海外送金は従来からのSWIFTという高度なセキュリティで精巧に運用されているが実態。LC信用状決済を伴う場合は国内銀行での手形保証以上の信用課題があり、これらの信用取引すっ飛ばしたような、台帳を分散させて持つという時点でそこの本当に振込しようとする人がいるだそうか?分散台帳でを重要取引を軽々とやろうとする、取引実施者がそう簡単に現れるわけは思えない。技術固執者の夢想と煽り→その扇動に翻弄されるプログラマーらの限界の調査で収束する。
で「ブロックチェーン」という単語が情報処理試験問題にもついに登場し、
令和2年度10月 情報処理安全確保支援士試験(SC)での出題文言としては、
「問5 ブロックチェーンに関する記述のうち、適切なものは?」
→答え:『ハッシュ関数を必須の技術として、参加者がデータの改ざんを検出するために利用する。』と来た。実態はこの程度の認識なのだという事。分かっている人は分かっているのだ。
今更だけどJava8,9以降で導入されているstream APIの復習。普段の参加するプロジェクトでは古いコードをそのまま継承しているので、stream式が全く出てこない。しかし、一般のJava界隈で従来のCollectionに替わりstream式で実装するのがほぼ日常となっている。
StreamAPIを復習する。
Springの参考書籍として、イタリアRedHat所属の Mario Fusco 氏による「Modern Java in Action」が洋書ながらとても分かりやすく、参考コードもとても分かりやすいのでこれを参考とした。
chap5 辺り
// Filtering with predicate
System.out.println("Filtering with a predicate");
List<Dish> vegetarianMenu = menu.stream()
.filter(Dish::isVegetarian)
.collect(toList());
vegetarianMenu.forEach(System.out::println);
List<Dish> menu は、
bean として、public class Dish の静的固定 List メンバー変数として以下を定義している。
public static final List<Dish> menu = Arrays.asList(
new Dish("pork", false, 800, Dish.Type.MEAT),
new Dish("beef", false, 700, Dish.Type.MEAT),
new Dish("chicken", false, 400, Dish.Type.MEAT),
new Dish("french fries", true, 530, Dish.Type.OTHER),
new Dish("rice", true, 350, Dish.Type.OTHER),
new Dish("season fruit", true, 120, Dish.Type.OTHER),
new Dish("pizza", true, 550, Dish.Type.OTHER),
new Dish("prawns", false, 400, Dish.Type.FISH),
new Dish("salmon", false, 450, Dish.Type.FISH)
);
☞ menu.stream() で別のListに代入しつつ、
.filter(Dish::isVegetarian)
.collect(toList());
の
.filter で isVegetarian で、private final boolean vegetarian; がtrueのみ抽出している。
.collect(toList());
で別の List<Dish> に集約
////////////// Bean //////////////////////////////////////////////////////////////////////////////////////////////
public class Dish {
private final String name;
private final boolean vegetarian;
private final int calories;
private final Type type;
public Dish(String name, boolean vegetarian, int calories, Type type) {
this.name = name;
this.vegetarian = vegetarian;
this.calories = calories;
this.type = type;
}
public String getName() {
return name;
}
public boolean isVegetarian() {
return vegetarian;
}
public int getCalories() {
return calories;
}
public Type getType() {
return type;
}
public enum Type {
MEAT,
FISH,
OTHER
}
次回、再びOracleの案件を控え事前準備として。今は以前のように自前でDBサーバを自前Linuxを準備やVM構築、次にOracleサーバーセットアップは昔の話。Oracle Installerは今まで何度やったか気が知れない。今は、Cloud型Oracleサービスが提供されているので活用してみる。最近はこの手のサービスはCloud化されているので以前のような面倒なインストールは必要なくなった。アカウント作成を試みた。
Oracle clound free service
アカウント作成画面
https://www.oracle.com/jp/cloud/free/
ログインページ
https://cloud.oracle.com/ja_JP/sign-in
ログイン後コンソール
https://console.ap-tokyo-1.oraclecloud.com/
⇒AWS同様、先ずはインスタンスの作成から始めてみて、PuTTY Key Generator からSSHキーを作り、セットアップしたところ、
『Out of host capacity』
https://cloudcustomerconnect.oracle.com/posts/657117a494?commentId=295680#295680
=> Please wait a few days, as they are expanding capacity constantly.
と来たので、やはりFreeなので期待できない。
そこで、Autonomous Database なるサービスを利用。
コンパートメントの選択、表示名、データベース名をディフォルトのままライセンスタイプを「ライセンス込み」として、[Autonomous Databaseの作成]からセットアップされる。
表示 次に、接続は[DB]接続ボタンから、クライアント資格証明(ウォレット)のダウンロード で、ojdbc.properties、tnsnames.ora、ウォレット一式を取り寄せて、指定されたTNS接続文字列を使って、接続完了。
初の独学書「PythonとKerasによるDeepLaening」を読みかかり、同時にGithubのサンプルを漁る。
https://github.com/fchollet/deep-learning-with-python-notebooks
↓ディープラーニングの解説で幾度と無く登場する、MNISTのデータセット。
http://yann.lecun.com/exdb/mnist/
・training set
・test set この二系統を準備するのがお決まりのパターン。本では、訓練セット、検証セット。
訓練セットから、最初は分類アルゴリズムのモデルを生成し損失関数(※1)を最小化するべく、学習(訓練)(※2)で少しずつデータを調整する。
※1 損失関数←30年前は、評価関数や目的関数とか言ってた。
※2 学習(訓練)←昔はパラメータ同定化とか言った。
そういえば、昔々自分が20代のエンジニア始まりの頃、フィードバック制御というモデルで出力結果を返して、
モデルを修正するという制御系仕事にどっぷり浸かった。この時の「モデル式修正」が、今で言うAIの「学習」相当なのだ。
「PythonとKerasによるDeepLaening」でも
訓練セット、検証セットそれぞれ決まって、
ラベル
イメージ の対で出てくる。
ラベルなら、こんなデータとの事。
offset | type | value | description |
---|---|---|---|
0000 | 32 bit integer | 0x00000801(2049) | 識別子(定数) |
0004 | 32 bit integer | 60000 or 10000 | ラベルデータの数 |
0008 | unsigned byte | 0 ~ 9 | 1つ目のデータのラベル |
0009 | unsigned byte | 0 ~ 9 | 2つ目のデータのラベル |
.... | .... | .... | .... |
xxxx | unsigned byte | 0 ~ 9 | 最後のデータのラベル |
ついつい中身を確認したくなるので、バイナリーエディタ(Stirling)で覗いてみた。↓
Tensorflow から MNISTを操作するなら ↓
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/tutorials/mnist
「PythonとKerasによるDeepLaening」なら↓
https://nbviewer.jupyter.org/github/fchollet/deep-learning-with-python-notebooks/blob/master/2.1-a-first-look-at-a-neural-network.ipynb
-------------------------------------------------------------------------------------------------------------------------------
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
-------------------------------------------------------------------------------------------------------------------------------
で先ずは、これらデータの取り込みが事の始まり。
セキュリティ界隈でご承知のStrutsフレームワーク脆弱性対応の一環として ⇒ ( https://www.ipa.go.jp/security/ciadr/vul/20180823-struts.html )
タグリブの挙動確認での環境で、
JSP <%@ taglib uri="/tags/struts-html" prefix="html" %> 式で指定する場合がある。
このとき web.xml で
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib> などの指定方法があるけど普通に、
JSP <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
のように直接URIを指定すればよい
struts-taglib-1.3.10.jar
META-INF
tld
struts-logic.tld
でURIが以下に指定されている。
<taglib>
<tlib-version>1.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>logic</short-name>
<uri>http://struts.apache.org/tags-logic</uri>
/////// 知っていれば当たり前なのかもしれないけど、知らないと出くわすエラーその1 /////////
<c:set ら、cタグ ( = Core Tags / JSTL ) は、
standard-1.0.7.jar
META-INF
c.tld ( <uri>http://java.sun.com/jstl/core</uri> )
fmt.tld ら、
+
jstl-1.0.2.jar
javax.servlet.jsp.jstl
core
fmt
sql
tlv
jstl-1.0.2.jar が欠けると、以下
javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:358)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
////// 知っていれば当たり前なのかもしれないけど、知らないと出くわすエラーその2///
『TLD又はタグファイル中のattribute指示子に従って属性valueはどんな式も受け付けません』??
以下の c:out value="${element}" でなにやらわけのわからないエラー発生。
<logic-el:iterate id="element" name="bean" property="stringArray"
indexId="index">
<li><em><c:out value="${element}"/></em> [<c:out value="${index}"/>]</li>
</logic-el:iterate>
⇒古い頃の 動的Webプロジェクト対応のためか、以下バージョン 2.3 に合わせる必要あり。
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
ここが、<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> とかだとうまくいかない。移行前現行システム解析は面倒。でもこういった既存解読が移行計画はどうしても必要。
////// 知っていれば当たり前なのかもしれないけど、知らないと出くわすエラー その3///
commons-beanutils-1.8.0.jar が欠けてるとなにやら以下のエラー。 Apache Commonsに依存している。
HTTPステータス 500 - javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/beanutils/PropertyUtils
メッセージ javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/beanutils/PropertyUtils
説明 The server encountered an internal error that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/beanutils/PropertyUtils org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
////// 知っていれば当たり前なのかもしれないけど、知らないと出くわすエラー その4 ////
commons-logging-1.0.4.jar が欠けてると今度は以下のエラー。なにかとCommons に依存している模様。
HTTPステータス 500 - javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
メッセージ javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
説明 The server encountered an internal error that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
仕掛の発端は昨今のAI再来襲。その代表はやっぱりWatoson。で、IBM Bluemixにサンプルありのことで、Bluemixへの登録からpractice開始。「クラウドと言えばAWSとか、クレジットカード登録が面倒etc.」云々、、QAをやりとりするや否や、暫くして『IBM Cloud 』へと改称になった。
Spring Seminar にて、IBMブースにてIBM Code Pattern for Java の紹介を受け、順に Deploy Spring Boor microservice in Kubernetes あたりからCodeを覗いてみた次第。
https://developer.ibm.com/code/patterns/deploy-spring-boot-microservices-on-kubernetes/
の通り、Pytonによるtransaction Generator のシミュレータから始まる。
以下の通り、random で乱数、transactionAmount を transaction の JSON テンプレートに指定し、data=json.dumps(transaction) にて、
JSONを post に指定している。
requests.post( URI", data=[json値], headers=[headers値])
time.sleep(1)
で1秒おきに送信。
↓
表示
で、Python 用のIDLEとして、以下が今の流行模様。
( IDLE = Integrated Development and Leaning Environment )
↓
https://www.python.org/
で、この mazon Linux AMI 2017.09.1 (HVM), SSD Volume Type には、
「Python、Ruby、Perl、および Java が含まれます」とあり予め色々用意されてある。これはせっかくなので Ruby の Self Review 。手元のVMにRuby環境わざわざ作るまでもなかったのだ。
とあるサンプルで以下のじゃんけんを見つけそのまま試したところ。なにやら「構文が最後まで終了していない」などというエラー
-----------------------------------------------------------
puts "play"
puts "[0]:Goo \n[1]:Choki \n[2]:Pa"
player_hand = gets.to_i
cpu_hand = rand(3)
if player_hand == cpu_hand
puts "aiko"
elseif ( player_hand == 0 && cpu_hand == 1 ) ||
( player_hand == 1 && cpu_hand == 2 ) ||
( player_hand = 2 && cpu_hand == 0 )
puts "you win !"
else
puts "you lost!"
end
このサンプルの
elseif ( player_hand == 0 && cpu_hand == 1 ) ||
は、
else if ( player_hand == 0 && cpu_hand == 1 ) ||
の誤記と解釈し、else if としてみる同様、「構文が最後まで終了していない」などとのエラー。
でさらに調べるとなんと、
↓↓↓↓↓↓
elsif ( player_hand == 0 && cpu_hand == 1 ) ||
Ruby の場合は、else if じゃなくて elsif とのこと。
Java/C 系SEの自分にとって戸惑いの一歩。
次の仕事でなにやらSSO構築があり、ここでCokkieを配信し同時にCokkieのドメインで可否を制御するようなものがあり、これに先んじてawsにサーバー構築して、次にJavaコンテナーを導入後にCokkie検証してみようかなと思い立った。
で先ずは、AWS でインスタンス構築。前にもやってみたけど再チャレンジ。
Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type
で次に、秘密鍵を作るところ。ここで鍵はPutty で作るしかないものだと思っていた。が実は、普通に
キーペア ⇒ キーペアの作成で終わり。
キーペアの作成
Putty Generator で作る場合は、Putty Generator menu で Type of key generate を RSA に指定が必要。
ここを SSH-1(RSA) などを選択すると、接続時に「Key is not in valid OpenSSH public key format」となる。
ここで指定した Pass phrase がそのままログイン時のパスワードになる。
で、次に Apache を入れる。https://qiita.com/Arashi/items/629aaed33401b8f2265c
などを参考に、
ec2-user]$ sudo su -
ec2-user]$ passwd で rootパスワード変更後
root] yum -y install httpd でセットアップは一発OK
service httpd start 起動
service httpd stop 停止
service httpd restart 再開し
で終わりかと思い、
http://パブリック DNS
http://ec2-54-95-63-165.ap-northeast-1.compute.amazonaws.com
で見つからない、また ping [ IPv4 パブリック IP ] しても見つからない?
どうやら EC3インスタンスは、初期状態でSSHの外部アクセスのみのセキュリティ設定であるとのこと。
http://www.checksite.jp/aws-ec2-icmp-rule/
https://qiita.com/jkr_2255/items/48be7527d88413a4fe71
下部のセキュリティグループの設定から、編集-追加から、インバウンドルールの編集で、ICMP や HTTPを追加する。セキュリティグループ セキュリティグループの編集 インバウンドルール編集でICMPとHTTP追加 で
先ずは、Apache疎通
次の仕事でなにやらSSO構築関係があり、ここでCokkieを配信し、同時にCokkieのドメインで可否を制御するようなものがあり、これに先んじてawsにサーバー構築して、次にJavaコンテナーを導入後にCokkie検証してみようかなと思っている。
で先ずは、AWS でインスタンス構築。
Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type
で次に、秘密鍵を作るところ。ここで、Putty で作るしかないものだと思っていた。が実は、普通に
キーペア⇒キーペアの作成で終わり。
Putty Generator で作る場合は、表示 で Type of key generate を RSA に指定が必要。
SSH-1(RSA) などを選択すると、接続時に「Key is not in valid OpenSSH public key format」となる。
で、次に Apache を入れる。https://qiita.com/Arashi/items/629aaed33401b8f2265c
などを参考に、
ec2-user]$ sudo su -
ec2-user]$ passwd で rootパスワード変更後
root] yum -y install httpd で一発OK
service httpd start 起動
service httpd stop 停止
service httpd restart 再開し
で終わりかと思い、http://パブリック DNS
http://ec2-54-95-63-165.ap-northeast-1.compute.amazonaws.com
で見つからない、また ping IPv4 パブリック IP でも見つからない?
で、どうやら EC3インスタンスは、初期状態でSSHの外部アクセスのみのセキュリティ設定であるとのこと。
http://www.checksite.jp/aws-ec2-icmp-rule/
https://qiita.com/jkr_2255/items/48be7527d88413a4fe71
下部のセキュリティグループの設定から、編集-追加から、インバウンドルールの編集で、ICMP や HTTPを追加する。表示 表示 表示
で先ずは、表示
今、JJUG など至る所で活躍している、GS-CollectionのKATAを、早速自分のIntelliJを落としてやってみる。このIDE、Android Studio のベースになっていることもあり、普及の一途。
Help - Support Center でのMLも充実している様子。
IntelliJ、バージョンアップが激しいが、最新の ideaIC-14.1.3.exe でセットアップ。
昨今、JSUGセミナーには何度か参加した GSは、https://github.com/goldmansachs/gs-collections-kata
で普通に Open Project から取り込み。JUnitテストコードのある collection で Run すると、テスト対象の 「com.gs.collections.kata.Company クラスが見つけられません」とのエラー。
IntelliJ では、テストコードが本クラスとは別プロジェクトに存在している。
eclispe だったら、ビルドパスの構成-プロジェクトから、必要プロジェクトを追加指定するのだが、IntelliJだと以下のような操作となった。
右上の虫メガネマーク左の project structure を選択する。 eclipse - 右 - Project に相当
次に Dependency タブで、+マークから Module Dependency... を選択。
次のダイアログで、Choose Modules から、Select the modules the current module should depend on: でmain で
これでようやく、テスト対象の「Classが見つからない」エラーが解消なくなった。
昨今、様々なJavaScript系フレームワークが誕生している。全て、USAのおたく少年が作ったものが世界中のファンを得て、広がっている。
AngularJS ( by Google ) ← Googleサイトにラーニングシステムあり。
Backbone.js
Ember.js
Knockout.js
とはいえ開発現場では、ほぼjQueryをコアにした共通.jsを派生して実装が進んでいる。基本、id= 属性又は class=で 属性指定した値を、$でセレクトして、
メソッドを定義する、というもの。jQuery表記のイベントハンドラも昔ながらのJSのonClickとは別。
.metod1().method2().method3() 式に、どんどん繋げるとこも、一見最初は戸惑う。
$('#circle').animate({borderRadius: '+=50px'}, 'slow', 'linear',
function() {
}
のように、タグ値、circleに対して、animate を起こし、最後に function() { ..}その中で、最後に、function() { ..} する、のように、function() { ..}がどんどん入れ子になっていく所が初めてぱっとコードを見た瞬間は物凄く複雑に感じた。