DbDateTimePicker

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-23 (火) 14:12:17 | 最終更新:2019-06-10 (月) 10:59:18


@IT:DateTimePickerコントロールでDBNullを扱うには?[C#、VB](2008-01-31)

MSDN:DateTimePicker コントロール (Windows フォーム)
MSDN:DateTimePicker クラス

【環境】
Visual C#: 15.5.4(2017)
経緯
デフォルトの DateTimePicker

DateTimePicker を使いたい。
だけど、null のときに日付が入ってしまうと
空欄にしておきたいユーザが、誤入力をしてしまう。
むぅ。

設計の問題?

Google 先生に聞いてみると、色々とあるみたいだけど
ほとんどの情報が古い。。。

何で改善されないんだろう。
どこかにも書いてあったけど、DateTime 型を利用するのに
null は普通に使うと思うんだけどな~。

私の設計が悪いのかしらね。

記事

それでも、DateTimePicker が null を許容できないことは
当時?みなさんが試行錯誤されたようで、下記のような記事を見つけた。
codeguru:Yet Another Nullable DateTimePicker Control(2005-04-25)
CodeZine:Nullを許容するDateTimePickerコントロール(2005-05-13、日本語訳記事)

null に対応してくれる DateTimePicker

現時点では、よい方針を思いつかないので
DbDateTimePicker を使ってみた。

@IT:DateTimePickerコントロールでDBNullを扱うには?[C#、VB](2008-01-31)
おおお、奇しくも後1週間で10周年w

作成

カスタム コントロールを追加 して
自動生成ソースに、参考サイトのソースを、ちみっと調整してコピペ。


public partial class DbDateTimePicker : DateTimePicker
{
    public DbDateTimePicker()
    {
        InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);
    }

    [Bindable(true), Browsable(false)]
    public new object Value
    {
        get
        {
            if (base.Checked)
                return base.Value;
            else
                return DBNull.Value;
        }
        set
        {
            try
            {
                if (Convert.IsDBNull(value))
                {
                    base.Checked = false;
                }
                else
                {
                    base.Value = Convert.ToDateTime(value);
                    base.Checked = true;
                }
            }
            catch (Exception ex)
            {
                base.Value = Convert.ToDateTime(value);
                base.Checked = true;
            }
        }
    }
}
配置

アプリ側にコントロールを追加 して
フォーム上へ配置。
dbdtpDate

コントロールのプロパティから
ShowCheckBox を True

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-23 (火) 14:12:17 | 最終更新:2019-06-10 (月) 10:59:18

EntityFramwork -> 外部キー

Posted by muchag | C# |
初回投稿:2018-01-22 (月) 20:15:17 | 最終更新:2018-01-26 (金) 12:20:09

【環境】
Visual C#: 15.5.4(2017)
単一
自動

php フレームワークみたいに、
命名規則を守って記述すれば
自動で外部キー設定をしてもらえる。


public class Municipality
{
    [Key]
    [MaxLength(6)]
    public string Code { get; set; }

    [MaxLength(5)]
    public string PrefectureCode { get; set; }

    public Prefecture Prefecture { get; set; } // 追加分
}

こちらは、参考サイトのものを一部頂戴してきたソース。

手動

命名規則からハズレた場合には
手動で外部キーを設定してやる。


public class Municipality
{
    [Key]
    [MaxLength(6)]
    public string Code { get; set; }

    [MaxLength(5)]
    public string PCD { get; set; } // これを変更

    [ForeignKey("PCD")]
    public Prefecture Prefecture { get; set; } // ナビゲーションプロパティ
}

こちらも参考サイトのものを一部頂戴。

Eager-loding, Lazy-loading

おそらく、この先で Eager-loding, Lazy-loading の勉強をする必要があると思う。

複合キー

外部キー
参考スライドの通り


[Key]
[Column(Order=1)]
public string Value1 { get; set; }

[Key]
[Column(Order=2)]
public string Value2 { get; set; }

としたところ、Add-Migration で、下記エラーが出た。

Entity type ‘HogeEntity’ has composite primary key defined with data annotations. To set composite primary key, use fluent API.

そこで、参考サイトのように、Entity でのキー設定をやめ
DbContext 側で設定したところ、設定できた。


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity()
        .HasKey(paidHoliday => new { HogeEntity.Value1, HogeEntity.Value2 });
}
参考サイト

Qiita:[EntityFrameworkCore]CodeFirstでテーブルに複合主キーを付ける(2017-08-31)
→参考スライドの [Column(Order=1)] では設定できなかったので、大変助かりました

利用

上記のように設定しておけば、Join しなくても
オブジェクトチェーンで取得可能。
Municipality.Code
Municipality.Prefecture.Code

参考サイト

インクリメンタルなカイハツにっき
実践 Entity Framework ~ 外部キーを設定する(2015-07-28)
実践 Entity Framework ~ ForeignKey 属性(2015-08-03)

Posted by muchag | C# |
初回投稿:2018-01-22 (月) 20:15:17 | 最終更新:2018-01-26 (金) 12:20:09

EntityFramwork -> 実践

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-21 (日) 20:14:57 | 最終更新:2018-01-25 (木) 22:58:45

お試し で大分理解できたので
実際に挑戦!

【環境】
Visual C#: 15.5.4(2017)
プロジェクト作成

お試し との変更点は
メインをフォームアプリにしたこと。

参照設定

フォームアプリプロジェクトへ、NuGet パッケージ管理から、下記をインストール。

  • SQLitePCLRaw.bundle_e_sqlite3
  • SQLitePCLRaw.bundle_sqlcipher
  • SQLitePCLRaw.bundle_green
スタートアッププロジェクト

上記3つのプロジェクトについて、何をするかによって
スタートアッププロジェクトを切り替えないければならない。

  • フォームプロジェクト
    • フォームアプリを動かすときは、これがスタートアッププロジェクト
  • ビジネスロジックプロジェクト
    • マイグレーションをするときは、これがスタートアッププロジェクト
  • ビジネスロジックテストプロジェクト
    • テストをするときは、これがスタートアッププロジェクト
初回マイグレーション
エラー1

Add-Migration Initial
More than one DbContext was found. Specify which one to use. Use the '-Context' parameter for PowerShell commands and the '--context' parameter for dotnet commands.
原因

DbContext クラスが複数あったため。

解決

対象 DbContext クラスを指定してコマンド実行。


Add-Migration Initial -Context MyAppSystem.EmployeeModel
To undo this action, use Remove-Migration.
Update-Database -Context MyAppSystem.EmployeeModel
Applying migration '20180121111141_Initial'.
Done.
エラー2

Add-Migration Initial -Context MyAppSystem.EmployeeModel
Could not load assembly 'MyApp'. Ensure it is referenced by the startup project 'MyAppSystem'.
原因

パッケージ マネージャー コンソール上部にある
「既定のプロジェクト」が、MyApp になっていた。

解決

「既定のプロジェクト」を、MyAppSystem に変更。

フォームイベント

今回は、フォームロード時に走らせる処理として Main_Load メソッドとした。
Main の部分は、フォームクラス名を入れるのが通例らしい。

フォームプロパティのイベント一覧(雷マーク)において
Load => Main_Load
と設定するだけ。

射影

Entity の中から、特定のプロパティを取得する=表示カラムを絞る。
このことを「射影」というらしい。


var arrayEmployees = db.Employees
    .Select(record => new {
        record.EmployeeCode,
        Name = record.FamilyName + " " + record.FirstName
    })
    .ToArray();
  • record へ新しい配列をセットするよ~
  • 配列のプロパティは、record.EmployeeCode と Name だよ~
  • record.EmployeeCode はそのままでいいけど、Name は、record の FamilyName と FirstName を半角スペースで連結して戻してね~

という風に、計算や加工も含めて自由に取得できる。

record

この部分の表記方法を勉強中。

LINQ の考え方としては「配列の要素」を指していると思う。

foreach (var value in array) の value に当たる感じ?

今回は、DB から抽出したレコード群が要素なので
record としてみたけど、何でもよさそう。

Count()

データの個数。


db.Employees.Count()
カラム名指定

上記例に合わせると、こうなる。


dgvEmployees.Columns[nameof(Employee.EmployeeCode)].HeaderText = "従業員コード";
dgvEmployees.Columns[nameof(Name)].HeaderText = "氏名";

ここで面白いのが
Employee.EmployeeCode を EmployeeCode とするとエラー。
record.EmployeeCode としてもエラー。
Name は、何も付けなくてもエラーにならないどころか、想定通りに動く。

まだまだ意味がわかっていない。

参考サイト

Qiita:Entity Framework6で単純なデータ表示フォームを作成(2015-09-08)
→DataGridView へのデータの登録の仕方。DataGridView のカラム名の変更の仕方

Keibalight プログラミングを淡々と:【LINQ】要素の個数を取得するには(Count集計演算子)(2011-07-19)
→LINQ による、データ個数の数え方

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-21 (日) 20:14:57 | 最終更新:2018-01-25 (木) 22:58:45

GitFlow for Visual Studio 2017

Posted by muchag | Git,Library & PlugIn & AddIn,Visual Studio |
初回投稿:2018-01-21 (日) 18:49:35 | 最終更新:2018-01-21 (日) 19:00:16

Visual Studio に GitFlow を導入するための機能拡張。

マーケットプレイス:GitFlow for Visual Studio 2017

【環境】
Visual C#: Community 2017
導入

上記ページから、.vsix ファイルを DL して開けば、
インストール作業が始まる。

その前に VS を閉じておくとスムーズ。

インストール後、チーム エクスプローラーのメニューに
「GitFlow」が追加される。

初期設定

「GitFlow」へ移動して [Initialize] [OK]

運用

「GitFlow」へ移動
[Start Feature] [Start Release] [Start Hotfix] [Other]

作成
[Start Feature] Feature 名を入力
[Create Feature]
その他
[Finish Feature] [Finish Release] [Finish Hotfix]
Posted by muchag | Git,Library & PlugIn & AddIn,Visual Studio |
初回投稿:2018-01-21 (日) 18:49:35 | 最終更新:2018-01-21 (日) 19:00:16

EntityFramwork -> お試し

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-20 (土) 15:57:34 | 最終更新:2018-01-25 (木) 22:58:33

今ひとつピンとこないので
勉強のため、テストプロジェクトを作成。

【環境】
Visual C#: 15.5.4(2017)
経緯

EntityFramework なるものを見つけて
ぜひ挑戦したいと思った。

ただ、慣れない VS 環境であることもあり
なかなかピンとこない。

そこで、参考サイトをそのまま実践してみることにした。

SlideShare:「Entity Framework Coreを使ってみる」 公開用(2017-03-07)

プロジェクト作成
Model プロジェクト
[ファイル]-[新規作成]-[プロジェクト] 「新しいプロジェクト」
左ペイン [インストール済み]-[Visual C#]-[Windows クラシック デスクトップ] 右ペイン [クラス ライブラリ(.NET Framework)] 名前:KptBoardSystem
場所:任意
ソリューション名:「名前」から自動入力
[ソリューションのディレクトリを作成] にチェック
[新しい Git リポジトリの作成] にチェックなし
[OK]
参照設定

プロジェクトコンテキストメニューから [NuGet パッケージの管理] Microsoft.EntityframeworkCore で検索
Microsoft.EntityframeworkCore.Sqlite 2.0.1
Microsoft.EntityframeworkCore.Tools 2.0.1

テストプロジェクト

ソリューションのコンテキストメニューから [追加]-[新しいプロジェクト] 後は前述同様に KptBoardSystemTest プロジェクトを作成。

参照設定

前述同様に、下記を設定。
Microsoft.EntityframeworkCore 2.0.1
xunit 2.3.1
xunit.runner.visualstudio 2.3.1
Moq 4.8.1

初回マイグレーション
クラス作成

P.12 User
P.13 KptBoardModel

コマンド

Enable-Migrations
Enable-Migrations is obsolete. Use Add-Migration to start using Migrations.
Add-Migration setp00
To undo this action, use Remove-Migration.
  1. マイグレーションを可能にする
  2. マイグレーションを追加する
ファイル生成

こんな感じで2ファイルが自動生成された。


KptBoardSystem
┗ Migrations
  ┣ 20180120074120_setp00.cs
  ┗ KptBoardModelModelSnapshot.cs
データベース生成
コマンド

Update-Database
Applying migration '20180120074120_setp00'.
Done.

参考サイト P.15 のように処理がズラズラ並ぶのではなく
とても簡素なリアクションでしたw

ファイルの場所

参考サイトには「ソリューション直下に「kpt.db」が作成される」とあったけど
実際には、ソリューションの2つ上に作成された。

後述の試行錯誤に見られた、テストとの階層の差分があるということは
コマンドを打つ際に、階層を設定するべきなのではないかと思うけど
現在は手法不明。

パス変更

そこで、

KptBoardModel.cs

のパスを下記のように変更したところ、ソリューション直下に作成された。


- var connectionString = new SqliteConnectionStringBuilder { DataSource = "../../../kpt.db" }.ToString();
+ var connectionString = new SqliteConnectionStringBuilder { DataSource = "../kpt.db" }.ToString();

この件には、大きな落とし穴が。。。
詳細は、後述の「試行錯誤」コーナーにて。

注意

コマンドを打つ際に、パッケージ マネージャー コンソールにおいて
「既定のプロジェクト」で何を選択しているかでファイル出力場所が変わる。

“kpt.db” というパスの場合は
プロジェクト直下へ生成されるので
KptBoardSystem を選択していれば、

KptBoardSystem/KptBoardSystem/kpt.db

KptBoardSystemTest を選択していれば、

KptBoardSystem/KptBoardSystemTest/kpt.db

となる。

KptBoardSystem/KptBoardSystem/kpt.db

この場合、テストではファイルが見つからないエラーになってしまうので
「既定のプロジェクト」は注意。

配置

後述の如く、コマンドと実行でファイルパスの意味合いが変わるので
コマンドで生成された DB ファイルを手動で配置換えをした。

テストと本番で DB を分けることも考え
ソリューション直下ではなく、プロジェクト直下としてみる。

つまり、最終的な配置とファイルパスの指定は下記の通り。

KptBoardSystem/KptBoardSystemTest/kpt.db

var connectionString = new SqliteConnectionStringBuilder { DataSource = "../../kpt.db" }.ToString();
注意

このようなやり方にすることで
コマンドを打つ度に
ファイルの移動が必要。

テスト
参照設定

P.18
KptBoardSystemTest プロジェクト内「参照」のコンテキストメニュー [参照の追加] 「参照マネージャー」
左ペイン [プロジェクト]-[ソリューション] 中央ペイン [KptBoardSystem] にチェック
[OK]

クラス作成

P.19 KptBoardModelTest


using Xunit;

namespace KptBoardSystem.Test
{
    public class KptBoardModelTest
    {
        [Fact]
        public void TestInsertUser()
        {
            using (var db = new KptBoardModel())
            {
                var user = new User
                {
                    Name = "User01"
                };
                db.Add(user);

                db.SaveChanges();
            }
        }
    }
}
テスト エクスプローラー
[テスト]-[ウィンドウ]-[テスト エクスプローラー] で、開くことができる。

実施
[テスト]-[実行]-[全てのテスト] または、テスト エクスプローラーにて、対象テストを選択した上で
[テスト]-[実行]-[選択したテスト] で、テストを開始。

P.38
例外

私の記述ミスのせいで、


var kptBoard = db.KptBoards.Where(b => b.Problem.Contains("続ける")).First();

こちらが空になってしまった。

その際、下記のエラーが出た。

[2018/01/21 12:28:10 Error] [xUnit.net 00:00:01.7574752] KptBoardを修正する [FAIL] [2018/01/21 12:28:10 Informational] [xUnit.net 00:00:01.7585683] System.InvalidOperationException : シーケンスに要素が含まれていません
テストのデバッグ
[テスト]-[デバッグ] から、テストのデバッグをできる。

まだ使い方はよくわからない。

LINQ

P.34 では、u が括弧書きだったのに
今回は括弧がつかない理由がわからない。


var user02 = db.Users.Where((u) => u.Name == "User02").Include("KptBoards").First();

var kptBoard = db.KptBoards.Where(b => b.Problem.Contains("続ける")).First();

LINQ を勉強すべし。

試行錯誤
テスト実施1
エラー

テスト初回実行時、下記のエラーが出た。

[2018/01/20 17:48:52 Error] [xUnit.net 00:00:01.4263057] KptBoardSystem.Test.KptBoardModelTest.TestInsertUser [FAIL] [2018/01/20 17:48:52 Informational] [xUnit.net 00:00:01.4272062] System.Exception : You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().
原因

Google 先生に質問したところ、どうやら下記パッケージが不足していることらしい。

解決

テストプロジェクトへインストール。


Install-Package SQLitePCLRaw.bundle_e_sqlite3 -Version 1.1.9
Install-Package SQLitePCLRaw.bundle_sqlcipher -Version 1.1.9
Install-Package SQLitePCL.bundle_green -Version 0.9.3

NuGet パッケージ管理からインストールしても OK だと思う。

参考サイト

stackoverflow:Cannot run SQLite.net PCL in ASP.NET MVC(2017-02-09)

テスト実施2
エラー

上記エラーが取れてホッとしつつテストを行うと
次は下記エラーが出た。

[2018/01/20 21:48:11 Error] [xUnit.net 00:00:01.5294057] KptBoardSystem.Test.KptBoardModelTest.TestInsertUser [FAIL] [2018/01/20 21:48:11 Informational] [xUnit.net 00:00:01.5303380] Microsoft.EntityFrameworkCore.DbUpdateException : An error occurred while updating the entries. See the inner exception for details.
[2018/01/20 21:48:11 Informational] [xUnit.net 00:00:01.5304014] —- Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: ‘no such table: Users’.

Users テーブルが見つからないってさ。。。

調査
DB

kpt.db の中には、確かに Users テーブルがある。

ファイルパス

上で、DB ファイルへのパスを変えたからかもしれないと思い
パスを戻すと、エラーが出ないときもあるけど、確実ではないし
値は書き込まれない。

DB 接続

そもそも DB 接続に失敗しているのかと思って
ファイルパスを存在しないパスにしてみたら
エラー内容が下記の通り変わったので、接続には成功しているみたい。

[2018/01/20 21:52:21 Error] [xUnit.net 00:00:01.3878517] KptBoardSystem.Test.KptBoardModelTest.TestInsertUser [FAIL] [2018/01/20 21:52:21 Informational] [xUnit.net 00:00:01.3888267] Microsoft.Data.Sqlite.SqliteException : SQLite Error 14: ‘unable to open database file’.
ファイル実体

途方に暮れて、ソリューションディレクトリをあちこち見ていたら
想定外の場所に kpt.db ファイルが!!!

原因

コマンドで作成した kpt.db のファイルパスと
テストコードが参照する kpt.db のファイルパスが
異なることが原因だった。

と言っても、何かがおかしいので
いずれわかる日が来ると信じたい。

ともかく、下記のような検証結果だった。


GrandMother
┣ Mother
┃ ┣ KptBoardSystem
┃ ┃ ┣ KptBoardSystem
┃ ┃ ┣ KptBoardSystemTest
┃ ┃ ┃ ┣ bin
┃ ┃ ┃ ┃ ┣ Debug
┃ ┃ ┃ ┃ ┃ ┗ kpt.db // テスト "kpt.db"
┃ ┃ ┃ ┃ ┣ Release
┃ ┃ ┃ ┃ ┗ kpt.db // テスト "../kpt.db"
┃ ┃ ┃ ┗ kpt.db // コマンド "kpt.db"、テスト "../../kpt.db"
┃ ┃ ┗ kpt.db // コマンド "../kpt.db"、テスト "../../../kpt.db"
┃ ┗ kpt.db // コマンド "../../kpt.db"
┗ kpt.db // コマンド "../../../kpt.db"

つまり
コマンドは、プロジェクトディレクトリがルート。
テスト(実行)は、アセンブリ(.dll)本体のある場所がルート?

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-20 (土) 15:57:34 | 最終更新:2018-01-25 (木) 22:58:33

さくら VPS -> httpd.conf

Posted by muchag | Apache,CentOS,さくらインターネット |
初回投稿:2018-01-18 (木) 21:36:04 | 最終更新:2018-11-04 (日) 19:06:27

【環境】
Apache: 2.4.6
CentOS: 7.4.1708
さくらインターネット:VPS 2G プラン
バックアップ

cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
設定

vim /etc/httpd/conf/httpd.conf
User, Group

User と Group が apache になっていることを確認。


User apache
Group apache
管理者

管理者メールアドレスを設定。
今回はスキップ。


ServerAdmin root@localhost
ServerName, DocumentRoot, Directory

今回はドキュメントルートを変更するために VirtualHost を利用するので変更なし。


#ServerName www.example.com:80
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
VirtualHost

ドキュメントルートを変更するために、VirtualHost を設定。
CakePHP3 用。


<VirtualHost xxx.xxx.xxx.xxx>
    ServerName www.hoge.com
    ServerAlias hoge.com
    DirectoryIndex index.html index.php
    AddDefaultCharset UTF-8
    DocumentRoot /var/www/my_app/webroot
    <Directory "/var/www/my_app/webroot">
      AllowOverride All
      Options FollowSymLinks
    </Directory>
</VirtualHost>
確認

httpd.conf 保存後、文法チェック。


apachectl configtest
Syntax OK
再起動

systemctl restart httpd
CakePHP 確認

上記設定後、hoge.com へブラウザで接続して、CakePHP のデフォルト画面が表示されれば OK。

試行錯誤
NameVirtualHost

Apache 2.4.x では、NameVirtualHost の設定は不要。
設定すると、いらないよ~と言われる。

AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/httpd/conf/httpd.conf:355
FollowSymLinks

参考にさせていただいたサイトの中には、


- Options Indexes FollowSymLinks
+ Options FollowSymLinks -Indexes

このような記述が見受けられたけど

AH00526: Syntax error on line 364 of /etc/httpd/conf/httpd.conf:
Either all Options must start with + or -, or no Option may.

と怒られたので、-Indexes は削除。

Posted by muchag | Apache,CentOS,さくらインターネット |
初回投稿:2018-01-18 (木) 21:36:04 | 最終更新:2018-11-04 (日) 19:06:27

さくら VPS -> Composer

Posted by muchag | CentOS,Library & PlugIn & AddIn,PHP,さくらインターネット |
初回投稿:2018-01-16 (火) 22:41:44 | 最終更新:2018-12-02 (日) 18:05:42

【環境】
Composer: 1.6.2
php: 7.1.13
CentOS: 7.4.1708
さくらインターネット:VPS 2G プラン
インストール

curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...

Composer (version 1.6.2) successfully installed to: /root/composer.phar
Use it: php composer.phar
起動

php composer.phar
Do not run Composer as root/super user! See https://getcomposer.org/root for details
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.6.2 2018-01-05 15:28:41

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi                     Force ANSI output
      --no-ansi                  Disable ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  about                Shows the short information about Composer.
  archive              Creates an archive of this composer package.
  browse               Opens the package's repository URL or homepage in your browser.
  check-platform-reqs  Check that platform requirements are satisfied.
  clear-cache          Clears composer's internal package cache.
  clearcache           Clears composer's internal package cache.
  config               Sets config options.
  create-project       Creates new project from a package into given directory.
  depends              Shows which packages cause the given package to be installed.
  diagnose             Diagnoses the system to identify common errors.
  dump-autoload        Dumps the autoloader.
  dumpautoload         Dumps the autoloader.
  exec                 Executes a vendored binary/script.
  global               Allows running commands in the global composer dir ($COMPOSER_HOME).
  help                 Displays help for a command
  home                 Opens the package's repository URL or homepage in your browser.
  info                 Shows information about packages.
  init                 Creates a basic composer.json file in current directory.
  install              Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
  licenses             Shows information about licenses of dependencies.
  list                 Lists commands
  outdated             Shows a list of installed packages that have updates available, including their latest version.
  prohibits            Shows which packages prevent the given package from being installed.
  remove               Removes a package from the require or require-dev.
  require              Adds required packages to your composer.json and installs them.
  run-script           Runs the scripts defined in composer.json.
  search               Searches for packages.
  self-update          Updates composer.phar to the latest version.
  selfupdate           Updates composer.phar to the latest version.
  show                 Shows information about packages.
  status               Shows a list of locally modified packages.
  suggests             Shows package suggestions.
  update               Upgrades your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  upgrade              Upgrades your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  validate             Validates a composer.json and composer.lock.
  why                  Shows which packages cause the given package to be installed.
  why-not              Shows which packages prevent the given package from being installed.
実行ファイルの移動

mv composer.phar /usr/local/bin/composer

これで、直接 composer で利用できる。

アップデート

念の為、アップデート。


composer self-update
おまけ
インストール時警告

実は上記インストール時に、下記2行目の警告が出ていた。


curl -sS https://getcomposer.org/installer | php
PHP Warning:  Module 'intl' already loaded in Unknown on line 0
All settings correct for using Composer
Downloading...

Composer (version 1.6.2) successfully installed to: /root/composer.phar
Use it: php composer.phar

これは、php.ini で extension=intl.so をコメントアウトすることで消えたけど
CakePHP3 をインストールする際に intl は必要なはずなので、後ほど試す。

起動時警告

実は上記起動時に、下記2行目の警告が出ていた。


php composer.phar
Do not run Composer as root/super user! See https://getcomposer.org/root for details

あら、Composer って、root で利用してはいけないのね~。

実行ファイルを移動させて、一般ユーザに戻って利用したら
上記警告は出なくなった。

ちなみに、インストールを root でしたせいか
実行ファイルを移動しておかないと、php composer.phar では、実行できず


php composer.phar
Could not open input file: composer.phar

このように怒られた。。。

参考サイト

WinRoad徒然草:さくらのVPSサーバーにLaravelのインストール(2015-03-23)

Posted by muchag | CentOS,Library & PlugIn & AddIn,PHP,さくらインターネット |
初回投稿:2018-01-16 (火) 22:41:44 | 最終更新:2018-12-02 (日) 18:05:42

タイムゾーン

Posted by muchag | MySQL |
初回投稿:2017-12-10 (日) 23:47:19 | 最終更新:2019-11-05 (火) 20:09:44

【環境】
MySQL: 5.7.18
-> 8.0.18
経緯

CakePHP3 を利用しているときに、下記エラーが出た。

SQLSTATE[HY000]: General error: 1298 Unknown or incorrect time zone: ‘Asia/Tokyo’

調べてみると、MySQL のタイムゾーン設定がなされていないとのこと。

mysql データベースを見ると、確かに空っぽだった。


select * from mysql.time_zone;
Empty set (0.00 sec)
手順
Linux 環境
コマンド

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root mysql -p
Enter password:
Warning: Unable to load '/usr/share/zoneinfo//iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo//zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo//zone1970.tab' as time zone. Skipping it.
結果

3つ位失敗したみたいだけど、無事にタイムゾーンが mysql データベース time zone name テーブルへ登録された♪


select * from mysql.time_zone;
+--------------+------------------+
| Time_zone_id | Use_leap_seconds |
+--------------+------------------+
|            1 | N                |
|            2 | N                |
|            3 | N                |

            __ snip __

|         1778 | Y                |
|         1779 | Y                |
|         1780 | Y                |
+--------------+------------------+
1780 rows in set (0.00 sec)
Windows 環境
SQL 入手

MySQL Community Downloads Time zone description tables
から、MySQL 5.7+ 用の timezone_2019c_posix_sql.zip を DL。

SQL 実行

上記ファイルを解凍して出てきたファイルを、C ドライブ直下へ配置して実行。


mysql -u root -p mysql < c:\timezone_posix.sql
確認
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

を更新してから


show variables like '%time_zone';
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| system_time_zone |            |
| time_zone        | Asia/Tokyo |
+------------------+------------+
2 rows in set, 1 warning (0.01 sec)
参考サイト

有限会社 エス技研:MySQLのタイムゾーン(mysql_tzinfo_to_sql)の設定方法・XAMPP環境の解説も(2017-06-16)
→Linux 環境について、参考にさせていただきました

Pentec:MariaDB (MySQL) のタイムゾーン、タイムゾーンテーブルを設定する
→Windows 環境について、参考にさせていただきました

Posted by muchag | MySQL |
初回投稿:2017-12-10 (日) 23:47:19 | 最終更新:2019-11-05 (火) 20:09:44

VBoxManage

Posted by muchag | VirtualBox,Windows |
初回投稿:2017-12-10 (日) 21:43:10 | 最終更新:2017-12-17 (日) 18:37:38

【環境】
VirtualBox グラフィカルユーザーインターフェース: 5.1.24 r117012 (Qt5.6.2)
Windows: 10 Pro
list

Windows コマンドプロンプトより
VirtualBox の現在の設定や情報を取得できる。

vms

登録されている仮想マシン一覧。


"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" list vms
"VirtualMachineName1" {d8c214b5-df18-4cdf-9208-dd7b99fe1778}
"VirtualMachineName2" {48b8dabe-26af-450c-b549-21e226695f4b}
参考サイト

VirtualBox Mania:VBoxManage listコマンド

Posted by muchag | VirtualBox,Windows |
初回投稿:2017-12-10 (日) 21:43:10 | 最終更新:2017-12-17 (日) 18:37:38

インストール

Posted by muchag | phpMyAdmin |
初回投稿:2017-12-10 (日) 11:39:12 | 最終更新:2019-11-23 (土) 21:17:58

いつも大変お世話になっている phpMyAdmin。
この度、初めてインストール作業を行うことになりました。

公式:Bringing MySQL to the web

【環境】
phpMyAdmin: 4.7.6
DL

上記公式サイト右上の [Douwload 4.7.6] をクリックすると DL できる。

2017-12-10 現在
phpMyAdmin-4.7.6-all-languages.zip

ダウンロードページ

または、ダウンロードページ から、詳細な選択をすることも可能。

配置

DL した .zip ファイルを解凍して、任意のディレクトリへ配置。

今回は、アプリケーションディレクトリ直下へ配置した。

また、ディレクトリ名が長いので
phpMyAdmin-4.7.6-all-languages → pma とリネームした。

ログイン

Cookie を有効にしておかないと、ログインできない。

設定

必須ではない。

設定ファイルの配置
/pma/config.sample.inc.php

をコピーリネームして

/pma/config.inc.php

を配置。

デフォルト設定
/pma/libraries/config.default.php

これがデフォルトの設定らしい。

パスフレーズ

今回はローカル環境なので、適当に。


$cfg['blowfish_secret'] = 'hoge'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
大問題!

上記設定をしたら、pma 側で下記エラーが出だ。

phpMyAdmin – エラー
設定ファイルのパーミッションが正しくありません。誰でも書き込み可能になっています!

現在の VirtualBox を利用した仮想環境においては
config.inc.php に、パーミッションを設定できないので
こうなるらしい。

config.inc.php を削除しました。。。

ここまで

その他の config.inc.php については
ko-iya528:phpMyAdminのインストール(2017-10-26)

テーマ

phpMyAdmin は、テーマの概念があり
テーマを変更することで外観を変更することができる。

意義

テスト環境と本番環境において
取り違えによる大事故を起こさないためにも
テーマは設定しておこうね!

策定

色々とあるのかもしれないけど
公式:Themes
で、配布しているので、こちらから頂戴する。

今回は、4.7.6 なので、4.7 の中から選択。

4種類ある中から、Metro 2.6 にした。

DL

metro-2.6.zip というリンクから DL。

配置

DL してきた .zip ファイルを解凍して
出てきた metro ディレクトリをそのまま

/pma/themes

へ配置。

設定
pma

ホームページ
「外観の設定」
Theme:[metro] を選択

Metro のテーマ
/metro/layout.inc.php

にて、Metro テーマのテーマを選択できる。(ややこしいw)


/* Theme color scheme
 * Values: "teal", "redmond", "blueeyes", "mono", "win"
 * Set this value for the desired color scheme
 */

$scheme                                     = "win";
カスタマイズ
/metro/layout.inc.php

に、色設定があるので、そちらをカスタマイズ。
テーマカラー


case "win":

    $GLOBALS['cfg']['NaviColor']                = '#EEEEEE';
    $GLOBALS['cfg']['NaviBackground']           = '#377796';	// ページ上部ナビゲーションバーの背景色
    $GLOBALS['cfg']['NaviBackgroundLight']      = '#428EB4';
    $GLOBALS['cfg']['NaviPointerColor']         = '#333333';
    $GLOBALS['cfg']['NaviPointerBackground']    = '#377796';
    $GLOBALS['cfg']['NaviDatabaseNameColor']    = '#333333';
    $GLOBALS['cfg']['NaviHoverBackground']      = '#428EB4';
    $GLOBALS['cfg']['MainColor']                = '#444444';
    $GLOBALS['cfg']['MainBackground']           = '#FFFFFF';
    $GLOBALS['cfg']['BrowsePointerColor']       = '#377796';
    $GLOBALS['cfg']['BrowseMarkerColor']        = '#000000';
    $GLOBALS['cfg']['BrowseWarningColor']       = '#D44A26';
    $GLOBALS['cfg']['BrowseSuccessColor']       = '#01A31C';
    $GLOBALS['cfg']['BrowseGrayColor']          = '#CCCCCC';
    $GLOBALS['cfg']['BrowseMarkerBackground']   = '#EEEEEE';
    $GLOBALS['cfg']['BorderColor']              = '#DDDDDD';
    $GLOBALS['cfg']['ButtonColor']              = '#FFFFFF';
    $GLOBALS['cfg']['ButtonBackground']         = '#377796';
    $GLOBALS['cfg']['ButtonHover']              = '#428EB4';
    $GLOBALS['cfg']['ThBackground']             = '#F7F7F7';
    $GLOBALS['cfg']['ThDisabledBackground']     = '#F3F3F3';
    $GLOBALS['cfg']['ThColor']                  = '#666666';
    $GLOBALS['cfg']['ThPointerColor']           = '#000000';
    $GLOBALS['cfg']['BgOne']                    = '#F7F7F7';
    $GLOBALS['cfg']['BgTwo']                    = '#FFFFFF';
    $GLOBALS['cfg']['BlueHeader']               = '#3A7EAD';	// 注意書きなどの背景色
    break;
Posted by muchag | phpMyAdmin |
初回投稿:2017-12-10 (日) 11:39:12 | 最終更新:2019-11-23 (土) 21:17:58
« 前ページへ次ページへ »