subsclife
様々な家具・家電を月額でレンタルできます。
レンタル期間が終了した場合はその商品を購入することもでき、様々な家具家電を試し置きしてみる、といった利用方法ができます。
いいなぁ。
利用にはクレジットカード必須です。
デビットカードやプリベイトカードでは利用できません。
いいなぁ。
Rentio
家電メインですが、特にカメラ関連のアイテムが多い印象です。
イベントの時に必要になった!と言うときに活躍してくれるかもしれません。
いいなぁ。
様々な家具・家電を月額でレンタルできます。
レンタル期間が終了した場合はその商品を購入することもでき、様々な家具家電を試し置きしてみる、といった利用方法ができます。
いいなぁ。
利用にはクレジットカード必須です。
デビットカードやプリベイトカードでは利用できません。
いいなぁ。
家電メインですが、特にカメラ関連のアイテムが多い印象です。
イベントの時に必要になった!と言うときに活躍してくれるかもしれません。
いいなぁ。
前回までに、FF14でのベンチマークの計測結果を載せましたが、世の中には様々なゲームがそれぞれベンチマークソフトを提供していて、ゲーム毎に動作できるかどうかを確認できます。
まぁ、ゲーム毎に必要とされているスペックが違うと言うわけですね。
重たいゲームもあれば、軽いゲームもあるということです。
ということで、いくつかゲームをピックアップして、ベンチマークソフトを動かしてみました。
ちなみに、前回FF14のベンチマーク結果はこちら。


紹介ページでの説明では、おそらく最もスペックを必要とするゲームらしい。
少なくともハイスペックのグラボを組み込まないと無理って言うことですね。


たぶん、FF15>FF14>PSO2>DQ10で重たいゲームになっているようです。
後々、グラボを増設してその前後で結果がどうなるか見て見たいので、これはとりあえず参考値ということで。
・・・DQ10やってみようかな。
暇だし。
これは衝撃的。
MONSTER PASSというアイテムで、店舗毎に定額で様々なサービスを受けられるらしい。
サブスクリプションの略。
毎月一定金額を支払うことで、様々なサービスを受けられる料金体制のこと。
例えば、最近話題になった嵐の楽曲も、各種音楽配信サービスで聞けるようになりました。
こういったサービスは、月額料金で好きなだけ音楽を聴くことができます。
他にも、動画なんてのもありますね。NetflixやHuluなどもそうです。
我々が使用しているOffice365やYouTuberがよく利用しているAdobe製品もサブスクで利用できます。
それは、使いたいときに使いたいだけ使える、というのが最大のメリットでしょう。
カラオケみたいに利用時間を気にする必要はありません。
解約も自由です。
違約金なんて発生しません。
解約し忘れがち。
数ヶ月間一度も利用しないまま料金だけ支払っているサービスはありませんか?
そう言ったものはすぐに解約しましょう。
大丈夫、必要になったらまた契約すれば良いのです。
主に牛角や温野菜などを手がける企業が始めたサービスです。
店舗毎に月額料金とサービスが異なるようです。
魅力的なのが月額1628円で毎日90分飲み放題ができちゃう。
これはやばくない?
北海道の居酒屋「炎」での計算だったら2~3日で元が取れちゃう。
これはのんべぇにはたまらん。
これは注意。
牛角のサブスクだからといって、牛角全店舗に適用されるわけじゃありません。
店舗毎に料金を支払わなければなりません。
たとえば、牛角なら、319円の品物2品以上、という縛りがあるようです。
支払う前に条件を確認しましょう。
今のところ、サービスは首都圏中心のようです。
はやく地方都市に拡大すれば良いのに。
例えば、毎日牛角の(牛角ばっかりだな。他にもお店はあるからね!)ご飯毎日食べたい、というケースならばお得かもしれません。
サブスクの結論は結局、こういうことだと思う。
自分のライフスタイルと照らし合わせてお得かどうかを勘定すれば良いと思うよ。
前回使った鹿肉の余りを使いました。
お肉に塩とコショウで下味を付けて、
全面を約1分間焼いて、アルミホイルに包み、1時間放置します。
ソースはウスターソース、ケチャップ、赤ワイン、バターを火にかけて煮沸させます。
1時間後、スライスすればできあがり。
ちょうど良く火が通って柔らかくて美味しかったです。
LaravelにAuth機能(要はログイン機能)を実装します。
Laravelって便利なもので、デフォルトで簡単に実装できる機能があるんですよ。
まず、データベースなんですが、Laravel初期像体で、すでにmigrateの記述が出来上がっているので、migrateするだけでデータベースの準備はOKです。
ログインページですが、以下のコマンドを実行します。
$ php artisan make:auth
これだけで実装完了です。
Laravelを起動してブラウザからアクセスしてみましょう。

右上にRegisterとLoginのリンクがありますので、まずはRegisterでユーザー登録を行います。

名前、メールアドレス、パスワードを入力してボタン押下。

ログインした状態です。
一回ログアウトして、ログインページへ行ってみましょう。

ログインページです。
ユーザー登録した内容を入力すると、先程のログイン後のページが表示されるはずです。
本当は、パスワードを忘れたときのためにパスワードリセット機能もあるのですが、メールでリセットするため、SMTPの設定がないと動作しません。
なので、この機能は後々削除する予定。
Laravelからmysqlにアクセスできるところまでやりました。
$ sudo apt-get install mysql-server
$ sudo mysql_secure_installation
基本的にyを選択すれば良い。
$ sudo mysql -u root -p
mysql> create database <データベース名>;
mysql> create user <ユーザー名> identified by '<パスワード>';
mysql> grant all on . to <ユーザー名>;
database.phpの設定を変更。
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', '<データベース名>'),
'username' => env('DB_USERNAME', '<ユーザー名>'),
'password' => env('DB_PASSWORD', '<パスワード>'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
$ php artisan migrate
エラーが出た。
could not find driver
PHPに、データベースにアクセスするPDOがない、ということなので、mysqlにアクセスするモジュールを追加。
$ sudo apt-get install php7.2-mysql
これでmigrateが成功すればOK。
$ php artisan make:migration create_test_table
CreateTestTableクラスが出来上がるので、以下のように書き換える。
public function up()
{
Schema::create('test', function (Blueprint $table) {
$table->increments('id');
$table->text('text');
$table->timestamps();
});
}
$ php artisan migrate
$ php artisan tinker
>>> DB::table('test')->get();
DB::table('test')->insert(['test' => 'insert'])
DB::table('test')->get();
データが表示されれればOK。
オイラのLinux PCにLaravel5.5をインストールしました。
使用ディストリビューションはUbuntu18.04です。
$ sudo apt-get install composer
$ composer global require "laravel/installer"
$ composer create-project --prefer-dist laravel/laravel <プロジェクト名> "5.5.*"
実行すると
You can also run php --ini inside terminal to see which files are used by PHP in CLI mode.
というエラーが出たので、PHPのモジュールを追加。
$ sudo apt-get install php7.2-mbstring $ sudo apt-get install php7.2-xml
Laravelの実行
$ php artisan serve
を実行した状態で、ブラウザから
http://localhost:8000
にアクセスする。

この画面が表示されればOK。
これをやらないとダメらしい。
$ chmod 777 storage/ $ chmod 777 bootstrap/cache/
Tech commitの課題で、面白そうなテーマだったので、挑戦してみました。
https://github.com/takishita2nd/battle_rpg
using System;
namespace battle_rpg
{
public static class Common
{
public static bool roleJudge(int rate)
{
bool judge = false;
Random r = new Random();
int value = r.Next(0, 100);
if(value < rate) {
judge = true;
}
return judge;
}
}
}
これは乱数を使って、命中やクリティカル判定などの確率判定を行うメソッドです。
引数に確率(%)を受け取り、乱数を0〜100の範囲で発生させて、その値が確率以下ならばtrueを返します。
using System;
namespace battle_rpg
{
public class Charactor
{
private const String Statusformat = "{0}:HP{1} 攻撃力{2}";
private const String AttackFormat = "{0}の攻撃!{1}に{2}のダメージ";
private const String CriticalAttackFormat = "{0}の攻撃!クリティカルヒット!{1}に{2}のダメージ";
private const String EvasionFormat = "{0}の攻撃!{1}は攻撃をかわした";
public string Name {get;}
public int Hp {get; set;}
public int Attack {get;}
public int evasionRate { get;}
public int criticalRate { get;}
public Charactor(string _name, int _hp, int _attack)
{
this.Name = _name;
this.Hp = _hp;
this.Attack = _attack;
this.evasionRate = 5;
this.criticalRate = 5;
}
/**
* ターゲットを攻撃
* <param> _target 攻撃対象
* <return> 与えたダメージ
*/
public String doAttack(Charactor _target)
{
String message = String.Empty;
if(isHit(_target)) {
int damage = this.Attack;
if(isCritical()) {
damage = (int)(damage * 1.5);
message = String.Format(CriticalAttackFormat, this.Name, _target.Name, damage);
} else {
message = String.Format(AttackFormat, this.Name, _target.Name, damage);
}
_target.Hp -= damage;
} else {
message = String.Format(EvasionFormat, this.Name, _target.Name);
}
return message;
}
/**
* 命中判定
* <param> _target 攻撃対象
* <return> true:命中
*/
private bool isHit(Charactor _target)
{
bool hit = true;
if(Common.roleJudge(_target.evasionRate)) {
hit = false;
}
return hit;
}
/**
* クリティカル判定
* <return> true:クリティカル
*/
private bool isCritical()
{
bool critical = false;
if(Common.roleJudge(this.criticalRate)) {
critical = true;
}
return critical;
}
/**
* 死亡判定
* <return> true:死亡
*/
public bool isDie()
{
bool die = false;
if(this.Hp <= 0) {
die = true;
}
return die;
}
public String showStatus()
{
return String.Format(Statusformat, this.Name, this.Hp, this.Attack);
}
}
}
勇者や魔王を扱うクラスです。
このクラスの中でHPや攻撃力などを保持します。
メインはdoAttack()メソッド。この中で命中判定やクリティカル判定をおこない、攻撃対象(引数)のHPを減らしていきます。
using System;
namespace battle_rpg
{
public class Battle
{
private Charactor yusha;
private Charactor maou;
private const String DieFormat = "{0}は倒れた。";
public Battle()
{
yusha = new Charactor("勇者", 300, 15);
maou = new Charactor("魔王", 400, 9);
}
public void execute()
{
bool nowBattle = true;
while(nowBattle) {
// HP表示
Console.WriteLine(yusha.showStatus());
Console.WriteLine(maou.showStatus());
Console.WriteLine();
// 勇者の攻撃
Console.WriteLine(yusha.doAttack(maou));
// 魔王死亡判定
if(maou.isDie()) {
Console.WriteLine();
Console.WriteLine(DieFormat, maou.Name);
nowBattle = false;
Console.WriteLine("世界に平和が訪れた。");
}
if(nowBattle == false) {
return;
}
// 魔王の攻撃
Console.WriteLine(maou.doAttack(yusha));
// 勇者死亡判定
if(yusha.isDie()) {
Console.WriteLine();
Console.WriteLine(DieFormat, yusha.Name);
nowBattle = false;
Console.WriteLine("世界は征服された。");
}
Console.WriteLine();
}
}
}
}
実際にバトルを行うクラスです。
コンストラクタで勇者と魔王のステータスを設定、execute()でどちらかが負けるまでループを行います。
using System;
namespace battle_rpg
{
class Program
{
static void Main(string[] args)
{
Battle battle = new Battle();
battle.execute();
}
}
}
メイン関数。Battleクラスをインスタンス化してexecute()を実行しているだけです。
とりあえず、こんな感じで要求されている処理はできました。
カスタマイズすれば色々と拡張できそうですね。

前々から感じてはいました。
配線が汚い。
特に問題なのは、電源ケーブルがPCIスロットの上を通っているので、PCIを装着するときに物理的に干渉するんじゃないかということ。
YouTubeの自作PCの動画を見ていると、電源ケーブルをマザーの裏側に通す、と言うことをやっていたので、オイラも実際にやってみようと思う。

電源から出ているケーブルを背面に持っていき、

ここから出す。
この周りごっちゃと見えるのは、ここにマザーの電源ピンがあるため。
ここにさらに各ドライブへの電源と、ケースファンの電源が伸びているので、仕方ありません。

背面のファンのケーブルもちょっと長くて、ファンに当たってしまいそうだったので、ケースに付いてきた結束バンドでまとめました。
全体を見るとこんな感じ。

CPUの電源ケーブル。。。
だいぶスッキリしましたが、CPUの電源ケーブルがまだ邪魔ですね。
あと、ケースファンの電源もブランブランしているのが気になります。
なにかうまい方法は無いでしょうか・・・