
とりあえず、縦に並べて、ぴったり収まるように細工してみた。
ちょっと右とのバランスおかしいけど、まぁいいでしょう。
当面の目標はステータス画面の表示まで頑張ってみようと思います。
(そういえば、C++にはListクラスが無いんだっけ?)

Builderパターンのコード例です。
package org.example.builder;
public abstract class Builder {
public abstract void buildPart1(Product product);
public abstract void buildPart2(Product product);
}
package org.example.builder;
public class ConcreteBuilder extends Builder {
private Product product;
@Override
public void buildPart1(Product product) {
}
@Override
public void buildPart2(Product product) {
}
public Product getResult(){
return product;
}
}
package org.example.builder;
public class Director {
private Builder builder;
public Director(Builder builder)
{
super();
this.builder = builder;
}
public void construct(Product product)
{
builder.buildPart1(product);
builder.buildPart2(product);;
}
}
package org.example.builder;
public class Main {
public static void main(String[] args)
{
Product product = new Product();
ConcreteBuilder concreteBuilder = new ConcreteBuilder();
Director director = new Director(concreteBuilder);
director.construct(product);
Product result = concreteBuilder.getResult();
}
}
処理に必要なデータを段階的に渡していき、最後に処理結果を取得するパターンです。
LaravelのSQLビルダがそれに近いですね。
Builderインターフェースを定義し、それをConcreteBuilderとして実装します。
DirectorのコンストラクタにConcreteBuilderを渡し、以後、Directorのconstructメソッドで必要なパラメータをBuilderに渡します。
結果はgetResultで取得します。
Nifmoから楽天モバイルにスマホの回線を切り替えました。
Pixel4aにはeSIMが内蔵されているので、すんなり切り替えができると思っていましたが、
そうではなかった。
まず、NifmoにMNP転出届を出して(Webから手続きできる)、届け出番号を取得する必要がある。
これに時間がかかるのは仕方が無いとして、
そのあと、楽天モバイル側に届け出番号と本人確認書類(今回は運転免許証表裏の画像)を提出し、本人確認完了後、郵送でeSIM設定用QRコードの付いた回線設定資料(上の写真)が送られてくる。
ここで2日かかった。
次に、My楽天アプリで回線開通処理を行うのですが、
これを実行すると、Nifmoの回線が不通となり、楽天モバイル側の回線が開通するまで待たなければならない。
このような説明がありますが、
嘘ついてんじゃねぇぞ。
実際は2時間経っても開通がおわらず、焼肉に行って帰ってきたら開通できるようになっていました(ステータスが変わってました)
これを確認するまで6時間かかってました。
まぁ、ここまで行けばマニュアル通りに設定を進めて、見事に開通できました。
一応、スピードテストをやってみる。
こないだギガぞうの件のときに計ったのがこんな感じだったので
やはり自前回線は違うね。
楽天モバイルは札幌市内が圏内ですが、まだ郊外の部分がパートナー回線(au)を使っているので、まだまだ不自由することがありますが、
まぁ、今のところ札幌市外に出る用事はないので良いでしょう。
今後もエリアが拡大されることを願ってます。
うまくスクショが取れなかった・・・
public function searchKeyword($keyword, $user)
{
$result = [];
$records1 = EatingTemplateItem::where('item', 'like', "%$keyword%")->get();
$records2 = $user->EatingHistoryItems()->where('item', 'like', "%$keyword%")->get();
if(count($records1) + count($records2) >= 10 )
{
return [];
}
foreach($records1 as $record)
{
$result[] = $record->item;
}
foreach($records2 as $record)
{
$result[] = $record->item;
}
return $result;
}
public function search(Request $request)
{
return response()->json([
'keywords' => $this->eatingManagement->searchKeyword($request->contents['item'], Auth::user()),
]);
}
Route::post('api/eating/search', 'Eating\ApiController@search');
<td><input type="search" v-model="contents.item" autocomplete="on" list="keyword" v-on:keydown="onChangeItem"/></td>
<datalist id="keyword">
<option v-for="keyword in keywords" v-bind:value="keyword" />
</datalist>
onChangeItem: function() {
if(this.contents.item!=""){
var self = this;
this.param.contents = this.contents;
axios.post('/api/eating/search', this.param).then(function(response){
self.keywords = [];
response.data.keywords.forEach(keyword => {
self.keywords.push(keyword);
});
}).catch(function(error){
self.error_flg = true;
self.errors = error.response.data.errors;
});
}
}
まだコードは暫定ですが、
とりあえず、入力した文字からデータベースを検索して、入力候補表示までできました。
とりあえず、検索結果だけ。
検索結果から各パラメータを自動入力させるのはまた次回に。
まぁ、おうちで何もしていないよりは、少しでもお金になれば良いかなと思って。
連絡を入れて、詳しいお話を聞いてきました。
あまりお金にはならないらしい。
月1万~2万程度の報酬とのこと。
お小遣い程度ですね。
地図を渡され、配布エリアと配布してはいけないお宅が解るようになっている。
地図自体はお仕事上の機密情報だし、個人情報も含まれているので見せられないのですが、
どこに配れば良いのかが解ります。
配ってはいけないところはクレーム対策としてやっているので、厳守。
あとで車で下見にも連れて行ってもらえるようです。
お仕事開始前とお仕事終了後に電話で報告。
月二回にFAXでお仕事の報告。
これを元に報酬が決まるので。
深夜はお仕事してはいけない。
不審者と思われるのを防ぐのと、ポストの位置とかが解りづらいため、ということです。
早朝や夕方にお仕事されている方が多いようですね。
滑り止めのゴム付き手袋がいいらしい。
というアドバイス。今度買ってきます。
あとは、住人に遭遇したら挨拶するといいですよ、とも言われました。
とにかく怪しまれないようにしないといけないね。
とりあえず、これが、ただ画像置いただけの画面。
これを背景画像の位置に合わせました。
// ステータスウィンドウの配置
auto xpos = (visibleSize.width - sprite->getContentSize().width * scaleRate) / 2.0;
auto windowScale = (sprite->getContentSize().width * scaleRate) / (sprite->getContentSize().width * scaleRate) / 4.0;
auto charaStatusWindow = Sprite::create("btn02_03_s_bl.png");
if (charaStatusWindow == nullptr)
{
problemLoading("'btn02_03_s_bl.png'");
}
else
{
charaStatusWindow->setPosition(Vec2(xpos + origin.x,origin.y));
charaStatusWindow->setAnchorPoint(Vec2(0,0));
//charaStatusWindow->setScale(windowScale);
this->addChild(charaStatusWindow, 1);
}
ただ、これをピッチリ横に並べようとしたけど、スケールの計算がうまくできなくて、今日は諦めました。
縦に並べる???
その方が良いか。
次回やります。
AbstructFactoryパターンのコード例です。
package org.example.abstruct.factory.factory;
public abstract class AbstructProduct1 {
public abstract void method1();
}
package org.example.abstruct.factory.factory;
public abstract class AbstructProduct2 {
public abstract void method2();
}
package org.example.abstruct.factory.factory;
public abstract class AbstructFactory {
public static AbstructFactory getFactory(String className)
{
AbstructFactory factory = null;
try {
factory = (AbstructFactory)Class.forName(className).getDeclaredConstructor().newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return factory;
}
public abstract AbstructProduct1 createAbstructProduct1();
public abstract AbstructProduct2 createAbstructProduct2();
}
package org.example.abstruct.factory.concrete;
import org.example.abstruct.factory.factory.AbstructProduct1;
public class concreteAbstructProduct1 extends AbstructProduct1 {
@Override
public void method1() {
}
}
package org.example.abstruct.factory.concrete;
import org.example.abstruct.factory.factory.AbstructProduct2;
public class concreteAbstructProduct2 extends AbstructProduct2 {
@Override
public void method2() {
}
}
package org.example.abstruct.factory.concrete;
import org.example.abstruct.factory.factory.AbstructFactory;
import org.example.abstruct.factory.factory.AbstructProduct1;
import org.example.abstruct.factory.factory.AbstructProduct2;
public class concreteAbstructFactory extends AbstructFactory {
@Override
public AbstructProduct1 createAbstructProduct1() {
return new concreteAbstructProduct1();
}
@Override
public AbstructProduct2 createAbstructProduct2() {
return new concreteAbstructProduct2();
}
}
Factoryパターンが1Productを作成していたのに対して、AbstructFactoryパターンは複数Productを作成できるようにしたパターンです。
factory作成時にクラス名の文字列からインスタンスを作る、と本に書いてありました。
このやり方はいろいろ応用できるかも。
ちなみに、(AbstructFactory)Class.forName(className).newInstance();と書くのは非推奨となっています。
問題点は、Productを追加した場合、すでに作成している全てのconcreteProductに実装が必要と言うことですね。
ついこないだまで強烈な耳鳴りが一日中していたんですが、
これまでやってきたことと言うと、
それでも耳鳴りがするものだから、別の要因があるんじゃ無いかと。
で、調べてみたら、ビタミンB12が足りていないという情報を見つけまして。
ビタミンB12ってどういう食材に含まれているかというと、
と、言うことなので、
おにぎり用に買ってあった焼き海苔をおつまみ感覚で食べたり、ビタミン系のサプリメントも飲んでみました。
そうすると、その次の日から、耳鳴りが気にならなくなってきました。
ここまで効果が出るのか。
どうやら、40代になると、ビタミンB系が不足して、体調不良を起こす人も多いらしく、
ドラッグストアに行くと、40代向けにビタミンB群を補充するためのサプリメントが売ってありましたし。
でも、ここまで効果がでるとは思わなかったので、
今後は味海苔とか韓国海苔とかも積極的に食べていこうと思います。