セクション2: Lightsailの立ち上げ

4. AWSアカウントの作成

5. 日常用ユーザーの作成

6. Lightsailの立ち上げ

7. キーボード表示対応表

8. Laravelのインストール( clone )

9. Webサーバーの設定
セクション3: MariaDBデータベースの立ち上げ

10. WindowsGUIツールでMariaDBに接続

11. MacGUIツールでMariaDBに接続

12. アプリ用データベースとユーザーの作成
13. アプリケーションからDBマイグレーションを行う
セクション4: 独自ドメイン
14. AWS上で独自ドメインを取得
15. 独自ドメインインスタンスIPアドレスを紐付ける
16. https化
セクション5: データベースの自動バックアップ
17. AmazonS3の準備
18. MariaDBのバックアップファイルを手動でS3に保存
19. CRONを使ってバックアップを自動化
20. 補足)バックアップが0kbになってしまう時の対処方法
21. バックアップファイルからデータベースを復元
22. Lightsailのアラート機能で警告を送る

Sub Sample1()
Dim fileList As Collection
Set fileList = New Collection

Dim buf As String, out As String, cnt As Long
Const inputPath As String = "C:\work\"
Const outPath As String = "C:\out\"
buf = Dir(inputPath & "*")

' ファイルリスト取得
Do While buf <> ""
cnt = cnt + 1
fileList.Add inputPath & buf
buf = Dir()
Loop

' ファイル一覧を実行
Dim vItem As Variant
For Each vItem In fileList
Dim TargetBook As Workbook, i As Long, FoundCell As Range
Dim TargetSheet As Worksheet
Dim maxrow As Long
Dim maxcol As Long

Dim startrow '// 先頭行
Dim startcol '// 最終行
Dim j '// ループカウンタ

Set TargetBook = Workbooks.Open(vItem)
Set TargetSheet = TargetBook.Sheets(1)

TargetBook.Activate

With TargetSheet.UsedRange
maxrow = .Rows(.Rows.Count).Row
maxcol = .Columns(.Columns.Count).Column
End With

'// 先頭、最終の行と列を取得
startrow = 5
startcol = 1
Dim kaigyoLength As Long
Const addRowsHeight As String = 20
Dim iRow
Dim addRow

'// 行ループ
For i = startrow To maxrow
iRow = 0
addRow = 0

'// 列ループ
For j = startcol To maxcol
' 結合セル
If TargetSheet.Cells(i, j).MergeCells And Len(TargetSheet.Cells(i, j)) > kaigyoLength Then
With TargetSheet.Cells(i, j).MergeArea

If iRow = 0 Or TargetSheet.Range(TargetSheet.Cells(i, j)).MergeArea.Rows.Count > iRow Then
iRow = TargetSheet.Cells(i, j).MergeArea.Rows.Count
End If


addRow = addRowsHeight
End With
Else
If Len(TargetSheet.Cells(i, j).Value) > kaigyoLength Then
addRow = addRowsHeight
End If
End If
Next

If addRow > 0 Then
TargetSheet.Cells(TargetSheet.Cells(i, j).Row + iRow, j).Rows.Height = addRow
End If


Next

TargetBook.Close
Next vItem
End Sub

リメンバー・ミーを今さら観ました。

二日連続で観て二日連続で泣きました。

www.disney.co.jp

GWはスキルアップのために勉強しようと決めていて、息抜きのために観たのですが、必ず最後に涙腺持ってかれますね。。。

観て、楽しかった!で終わってしまうと自分のためにならないと思い、あらすじを自分でも考えてみました。


代々音楽嫌いの家で育った、ミュージシャン志望の少年ミゲルは、
死者の日と呼ばれるお祭りの最中、有名ミュージシャンのお墓に祀られていたギターを盗んでしまいます。
ミゲルが盗んだギターを弾いてみると、死人になる呪いを受けてしまいました。
生身の人間に触れなくなり、他の死人が見えるようになってしまったのです。
呪いを解くにはご先祖様の許しが必要ですが、ご先祖様に「許しが欲しければ二度と音楽をやらないこと誓いなさい」といわれてしまいます。
承知できないミゲルは、ミュージシャンだったひいひいおじいちゃんを探しに行くのですが。。。。

。。あらすじを考えるのは難しいですね。
何を伝えればいいのか。
どうすれば魅力的と感じてもらえるのか。

1時間くらい考えてしまいました。何かコツがあるのでしょうか。

社会人5年目がこっそり教える、本当に使えるビジネスツールたち

目次

はじめに

こんにちは、oguriです。
今日は、社会人1年目になったら一番最初に教えておいて欲しかった、
ビジネスで利用するのにお勧めするツールを紹介します。

ビジネスツール一覧

シューズ

[テクシーリュクス] ビジネスシューズ

私は入社当初、「ビジネスシューズは何としても革靴!歩くときに、コツコツとかかとを鳴らしながら歩くのがカッコいい!」
と思っていました。
でも歩いていると想像以上につかれる。雨が続くとすぐにカビる。蒸れる。

といった感じで、2,3足革靴を利用しましたが、革靴は断念し、新しい靴をネットで探し、評価が高かったこちらの商品を購入しました。

まず履き心地がスニーカーチック。履きやすい。そして手入れがかなり楽。クリーム等もほぼ塗らなくていい。
雨も防水設計だからしみてこないし、カビも生えにくい。
。。。うん、これコスパ最強。
ってことで、ずっとこれを使ってます。
今はいている革靴がダメになったら、是非次はテクシーリュクスのビジネスシューズを検討してみてください。

靴下

store.workman.co.jp

以前、靴下はスーツを売っているところで適当に購入していました。
ただ、実際に履いていて、夕方ぐらいになると、なんだか靴下の締め付けがキツい。
一日中座っている自分のようなシステムエンジニアは、どうしてもだんだんと足がむくんできて、夕方になると締め付けがきつくなってきます。

このままでは絶対に足に良くないと考え、ビジネスで使えて、ゆるく履ける靴下を探した結果がワークマンの靴下でした。
実際に履いてみると、夕方に靴下の締め付けを感じることが皆無(!)になり、靴下をめくった時の靴下跡がほぼなくなりました。
緩すぎて脱げてくるのではないかと心配される方もいるかもしれませんが、全く脱げる心配はありませんのでご安心ください。
今の靴下を履いていて靴下跡がきついと感じていたり、穴が開いたら購入を検討してみてください。
あと、靴下はできるだけ同じものを購入したほうがいいです。穴が開いたときに他の靴下で補てんできます。

ワイシャツ

ワイシャツは普通、洗濯するとすぐシワになります。
社会人になりたての頃は、ワイシャツを毎日、または毎週アイロンするのが普通だと思っていました。
でも、アイシャツに出会ってからは、アイロンする必要が全くなくなりました。
ドライ運転の洗濯機にネットの中に入れたシャツを放り込み、ハンガーにかけて、終わり。
次の日にはそのまま着ていけます。

その他

ここからは、私もまだ「これだ!」と思える商品に出会えてないツールを紹介します。
参考程度に見てもらえればと思います。

スーツ

今まで買ったことがあるのが、
www.suit-select.com
スーツ・ビジネススーツ・紳士服のP.S.FA【公式通販】
などです。

スーツセレクトは歩いている姿はカッコいいですが、
座ると膝がキツかったりして、長時間座って作業する人はあまり向かないかもしれないです。

時計

私的にはスカーゲンをおすすめしておきます。
腕周りの小さい人に特におすすめです。

めがね

システムエンジニアなど、長時間仕事でパソコンを利用する人はブルーライトカットメガネをすると、めちゃ楽です。
ただ、メガネ自体の重さでメガネ跡ができたり、メガネ自体が鬱陶しく感じたりする人にはお勧めできません。

可能なら、ブルーライトカットを防止できる液晶保護フィルムを貼ったり、画面の明るさを落としたり等、
他の手立てを考えたほうがいいかもしれません。

おわりに

長々と書いてしまいましたが以上です。
新人の頃はとにかく安いものに目が行きがちですが、安いものをつくるには、何かを削る必要があります。
削られたものが許容できない場合、ある程度お金を払ってでも、良い商品を買えばいいと思います。
より良い仕事をする環境づくりの一環、投資だと思ってください。

皆さんのビジネスライフがより快適に、より効率的に送れるようになることを願っております。

また、こんないいものがあるよ!などがあればどんどん共有していきましょう。

ソース整形2

  • 目的:

ソースコードのインデントを変更し、見やすくする。

  • 実現方法:

ソースファイルのデータを一行ずつ取得し、
中かっこの有無でインデントを進めるか判断するようにした。

  • 成果物:
using System;
using System.IO;
using System.Linq;
using EnvDTE; //Add Reference to EnvDTE,EnvDTE80
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string data = "";
            StringBuilder result = new StringBuilder();
            List<string> indexIncreaseData = new List<string> { "{", "if" };
            List<string> indexDecreaseData = new List<string> { "}"};
            int indentCount = 0;

            StreamReader sr = new StreamReader(@"C:\test\src.txt");
            while (!sr.EndOfStream)
            {
                data = sr.ReadLine();

                // 先頭の空白を除去
                data = Regex.Replace(data, "^ +", "");

                if (data.Split(new char[] { ' ' }).Where(n => indexDecreaseData.Contains(n)).Count() == 0)
                {
                    data = new String(' ', (indentCount * 4)) + data;
                }

                if (data.Split(new char[] { ' ' }).Where(n => indexIncreaseData.Contains(n)).Count() > 0)
                {
                    // indent proceed
                    indentCount++;
                }

                if (data.Split(new char[] { ' ' }).Where(n => indexDecreaseData.Contains(n)).Count() > 0)
                {
                    // indent back
                    data = new String(' ', (--indentCount * 4)) + data;
                }

                result.AppendLine(data);
            }

            StreamWriter sw = new StreamWriter(@"C:\test\src1.cs");

            sw.Write(result.ToString());

            sw.Close();

        }
    }
}
  • ナレッジ:
  1. using EnvDTE; //Add Reference to EnvDTE,EnvDTE80

 DTE:"Development Tools Extensibility" の略語
 →Visual Studioコアオートメーションのオブジェクトとメンバを含むアセンブリラップCOMライブラリです。
  →Visual Studioからアクティブなウインドウやアプリケーションを制御可能。

  1. COM:Component Object Modelの略語

 →特定のプログラミングに依存せず利用できる、バイナリコード単位のインターフェース。
 

  1. List indexIncreaseData = new List { "{", "if" };

 Listの初期化でいつも間違える。new Listの後に()は不要。

  1. 同じ文字列を指定回数繰り返した文字の作成方法

  一文字の場合:new String('a', 10)
 複数文字の場合:(new string('a', 10)).Replace("a", "hoge");

  • お世話になったサイト:
  1. DTEの意味

ttps://stackoverflow.com/questions/17239760/what-is-the-visual-studio-dte
ttps://docs.microsoft.com/en-us/dotnet/api/envdte.document?view=visualstudiosdk-2017

  1. 正規表現による置換

ttps://dobon.net/vb/dotnet/string/replace.html

  1. 同じ文字列を指定回数繰り返した文字の作成方法

ttps://dobon.net/vb/dotnet/string/repeat.html

ソース整形

using System;
using System.IO;
using EnvDTE; //Add Reference to EnvDTE,EnvDTE80

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            EnvDTE.Solution soln = System.Activator.CreateInstance(
                Type.GetTypeFromProgID("VisualStudio.Solution.14.0")) as EnvDTE.Solution;
            soln.DTE.MainWindow.Visible = true;
            FormatFile(@"C:\test\src.cs", soln);
            //Set ProgID of your VS
            //Visual Studio 2008 -> 10.0
            //Visual Studio 2010 -> 11.0
            //Visual Studio 2013 -> 12.0
            //Visual Studio 2015 -> 14.0
            //var files = Directory.GetFiles(@"C:\test", "*src.cs", SearchOption.AllDirectories).ToList();
            //files.ForEach(file => {
            //    FormatFile(file, soln);
            //    Console.WriteLine($"format {file}"); //C#6.0
            //});
        }

        static void FormatFile(string file, EnvDTE.Solution soln)
        {
            soln.DTE.ItemOperations.OpenFile(file);
            TextSelection selection = soln.DTE.ActiveDocument.Selection as TextSelection;
            selection.SelectAll();
            selection.SmartFormat();
            soln.DTE.ActiveDocument.Save();
            soln.DTE.ActiveWindow.Close();
        }
    }
}