星組Guys&Dolls

ん~、いつもあんまり人がいないところに、ウジャウジャ人がいるって思ったらカミノモトの即売会だった。
ネットでチェックしたら午後の部は貸切だった模様。

ということで、宝塚版ガイズ&ドールズ(再々演)である。

Guys&Dolls
Guys&Dolls

実は、前トップ・2番手がいまいち好きになれず、星組敬遠中であったのだが、演目と新トップに惹かれてチケットをとってしまった。
柚希さんは、本当にすごい人であるのは間違いないとは思うのだが、あの声と、ちょっとクドい踊りにどうも見に行く気になれなかったのだ。2番手もアレだし。
で、アレな2番手さんは、2番手さんのままで、それはそれで微妙というか、もうこの人がトップになっちゃうんだろうなぁ・・・と思ってたから、ファンのことを考えるとやっぱりちょっとね、とは思う。6年待ってこれかい!みたいなのは否めないな。

まぁとりあえず、それなりに実力のある人を上に持ってきて、甘ったれてた根性をたたきのめすのにはいい猶予期間ではないの?っておまえ何様!なことを書きつつ、うまくなって欲しいと願うばかりなのである。
今トップの早霧さんや朝夏さんも下手だけど、2番手になってからはマシになったのだから、6年も2番手やって今のままでは・・・。
(いや、期待してるんだ。舞台を盛り上げてくれる人なので。ただ、品がないというか、勢い任せみたいな・・・あぁ、なんか長所がまったく出てこない。)

さて、公演の話に入ろう。トップお披露目ということもあってか、B席まで完全に埋まってた。
自分はいつも土曜に観劇するんだけれど、B席はパラパラとしか人がいなくて、こんな光景は初めて見たので少々ビックリした。
私といえばS席とは名ばかりの2階席だが、とりあえず1列目なので何とか救われた。銀橋もちゃんと見れるぞ。

星組というと、自分の中では歌が下手な人が多いイメージだったのだが、全然そんなことはなかった。
アンサンブルとか非常にきれいだったし、歌が下手なイメージの人もそれなりに歌えていたのでホッとしたところだ。
トリオの真ん中のデブった人は歌がうまかったな。名前をちゃんと覚えてないが、こういう人が脇でしっかり舞台を支えてくれてるとホッとする。
トップコンビも安定感があってよかった。
北翔さんはいつも帽子のかぶり方とかっこつけ方が一緒なので、パターンを増やして場面ごとに変えた方がいいと思う。いつも同じで正直飽きる。(あんだけアドリブできるのになぁ・・・)
相手役の妃海さんのしっかりした感がよかったな。酔っ払ったところでもうちょっと色気が出るとよいなぁ・・・
んで、礼真琴。かわいかったな。霧矢大夢のアデレイドが爆弾的だったので、見応え感は控えめなんだけど、カワイイ感は断然高い。
(でも、どうして男役にやらせるのかね。なんのための娘役なのかな。)
そういや、クシャミするの場面で、客席でクシャミした人がいて、「なんて絶妙なタイミングで!」と客席で話題になってた。
芝居にかぶってなくて、確かにグッドタイミングだったよ。
紅さんは相変わらずだけど、まぁ何とかなってたよ。でももっと存在感があっていい役だとは思うんで、頑張ってくれ。

あとはそうだなぁ、壱城さんもよかったな。ビッグ・ジュールのあやし方がよかった。
これも余談だが、十輝・壱城・七海のお3方は、サンセット大通り見に行ったときに客席に居てはった。
チケットとってからだいぶん経ってからの公演だったので、そんなんあるんか!って思ったのだが、公演後に安蘭・夢咲トークショーがある日で、小林前?理事長も来てて、まぁヅカ度高い公演だった。(もちろん、安蘭さんが出てて面白くないわけはないトークショーだった。)

ということで、思いのほかよかったので、次回の公演を期待したい。
1本ものでなく、ショー付きのやつね。ってまたチケット取るの大変なんだろうな。ライトな観劇者って、友の会とか入ってるわけでもないので取りにくいんだよね。かといって、会に入るほど観にも行かないわけだし。

PostgreSQL覚書 主キーの設定・解除

主キーの設定と解除のSQL。

ALTER TABLE {TABLE} ADD CONSTRAINT {KEY} PRIMARY KEY ({COLUMNS});
ALTER TABLE {TABLE} DROP CONSTRAINT {KEY};

{TABLE}:テーブル名
{KEY}:主キー名
{COLUMNS}:列名(複数の場合はカンマで区切って指定)

PostgreSQL覚書 動的な日付計算

これは一般的な1か月後

SELECT current_timestamp + interval  '1months'

動的に算出する場合の例

SELECT current_timestamp + CAST(a.add_months || 'months' AS interval)
FROM table_a as a

CASTを簡単に書くと

SELECT current_timestamp + (a.add_months || 'months')::interval
FROM table_a as a

という感じ。

3Dデータを作ってみる

会社で3Dプリンター(約10万)を買った。
で、3Dプリンターの試し打ちの最中なのだが、結構やれることが限られているように思われる。
(安もんだからかな)

まず、設定値の調整が半端なく大変。(安もんだからかな)
1色使いだから、結局塗装ツールがいる。
んで、造形物をきれいにするためのやすりも必要。

ってなことで、いろいろ苦労は絶えないのだが、まずはデータを作らねば。

ってことでAutodeskのお世話になる。
http://www.123dapp.com/

Autodeskの製品を使うのは、たしかコンピュータ学校でCADの授業で使って以来ぐらいなので、かれころ10年、15年ぶりか。
しかし、無料アプリがいっぱいあって、うれしい限り。

はじめは、「Tinkercad」っていうWebブラウザ上で動くアプリを使っていたのだけれど、図形の組み合わせでしか作れないようなので、「Autodesk 123D Design」というアプリを使って、ちょこまか作ってみる。

大変だけど、意外に楽しい。
もう、進捗しづらくなったオンラインゲームなんかそっちのけで、やっていたのだが、
ふとした拍子にアプリが強制終了、とか、
保存してもMyProjectsに保存されていません。とか、
まぁ、いろいろあった。

で、何か欲しいカバーとかないかなぁ・・・と考えてたら、あったよ!
MP3プレイヤーのカバー。
早速、3Dデータをエンヤコラ、どっこいせ!と作ってみたので、プリンターで早く出してみたいところ。

Excel覚書 dqyファイルの記述

dqyファイルは便利だ。
わざわざ、PhpAdminやらManagerやら開けずにSQL文を実行して、データが確認できる。

自分がよく使うPostgreSQLとSQLServerのクエリファイルの書き方メモ。

PostgreSQL

XLODBC
1
Driver=PostgreSQL Unicode;Server={IPアドレス等};Port={PortNo};Database={DB名};Uid={UserID};Pwd={Password};
SELECT TOP 100 * FROM batch_log ORDER BY create_date desc

SQLServer

XLODBC
1
Driver=SQL Server;Server={IPアドレス等};Uid={UserID};Pwd={Password};Database={DB名};Connect Timeout=15;
SELECT * FROM batch_log ORDER BY create_date desc LIMIT 1;

SELECT文は改行すると動作しないときがあるので注意

Ruby覚書 Install

さてさて、redmineの勉強でもしてみるか・・・と思ったら、Ruby On Railsが必要とのこと。
早速入れてみる。
作業手順を簡単に説明してくれるサイトが見つからず、途中嫌になったが、探し方がまずかっただけだった。
手順は、
1) RubyInstallerでRubyをインストール
2) DevKitsを入れる
  DevKitのinitとinstallでbundlerが入る
3) gemでrailsをインストール

なんだ、簡単だったんだ。

1)では環境変数PATHにインストール先のbinが設定されること
2)は、コマンドプロンプトで、DevKitsファイルの展開先に「cd /d」して、
「ruby dk.rb init」
「ruby dk.rb install」
インストールしてbundlerが入ったら、
3)そのままコマンドプロンプトで、「gem install rails –no-ri –no-rdoc」を実行

とりあえず今日はここまで。

クーラー解禁日

去年は6月中に、ごめんなさい!みたいな感じでクーラーの電源をつけたのだが、今年は、雨が多くて、7/11に。
暑いのはいいんだが、湿度が70%では、ちと寝苦しい。
で、心臓もバクバクとまではいかないけれど、心拍上がりすぎ状態で寝れん!ってなことで、つけることにした。
一応、ジェット噴射の洗浄をして電源ONして、ドライで稼働したんだが、湿度かわらんやん・・・

で、クーラーつけっぱなしで寝たら、ちょっと寒かった。
まだつけっぱなしには早い時期なのか。

SQLServer覚書 カンマ区切り文字列→行データ

カンマ区切りのデータを縦に並べるプロシージャを作ってみた。


CREATE PROCEDURE csvToRows
    @csv VARCHAR(MAX)
AS
BEGIN

    DECLARE @exit_flg       TINYINT       = 0
    DECLARE @i              INT           = 1
    DECLARE @imax           INT
    DECLARE @buf            VARCHAR(MAX)
        
    BEGIN TRY
        -- はじめにNULLや空白を回避
        IF RTRIM(LTRIM(ISNULL(@csv,'')))='' 
        BEGIN
            RAISERROR (N'NULLはダメ!', 18, 1)
        END

        CREATE TABLE #w_temp (
            buf            VARCHAR(MAX)
        )
        
        SET @buf = @csv
        WHILE @exit_flg = 0
        BEGIN
            SET @buf = SUBSTRING(@buf, @i  , LEN(@buf))
            SET @imax = CHARINDEX(',', @buf)
            IF @imax = 0
            BEGIN
                INSERT INTO #w_temp
                SELECT SUBSTRING(@buf, 1, LEN(@buf)) 
                SET @exit_flg = 1
            END
            ELSE
            BEGIN
                INSERT INTO #w_temp
                SELECT SUBSTRING(@buf, 1, @imax - 1) 
                SET @i = @imax + 1
            END
        END
        SELECT 'OK' AS result, NULL AS err_msg, buf FROM #w_temp

    END TRY
    BEGIN CATCH
        
        SELECT 'NG' AS result, ERROR_MESSAGE() AS err_msg
        
    END CATCH
END

jQuery覚書 Datetimepicker

日付と時刻両方設定できるJavaScriptのカレンダーを探していたところ

DateTimePicker

なるものを発見。jQueryのPlug-inとのこと。

早速ダウンロードして、サンプルを参考に設定していく。
いとも簡単に、日付と時刻が設定できた。分間隔もOptionで設定できる。

で、これって日付設定もできるんだよねぇ・・・(要は時刻設定は要らない!の場合)
って「timpicker:false」にするとできたことはできたんだけど、日付をクリックしてもカレンダーが消えてくれないのね。

困ったわぁ~と昼下がりに物思いにふける主婦の体(テイ)で、細かく説明を読んでみる。
すると、日付を選択したときのイベントみたいなものがあるではないか!

よし!
「onSelectDate」で、カレンダーを閉じる処理を追加しちゃえ!

ということで、以下のような設定で、うまいこと日付選択時もカレンダーが消えてくれましたとさ。

// HTML側は <input type="textbox" id="kaishibi" value /> 
$('#kaishibi').datetimepicker({
	dayOfWeekStart : 0 ,
	lang:'ja' ,
	value:'' ,
	format:'Y/m/d',
	formatDate:'Y/m/d',
	timepicker: false ,
	onSelectDate:function(ct,$i){
		$('#kaishibi').datetimepicker('hide')
	},
});

SQLServer覚書 RAISERROR

「SQLSeverの2014ぐらいでないとTHROWが使えない」ってことで、RAISERRORでエラーを発生させてCATCH句に強制的に移動するように。

したはずなんだけど、いかないのは何故?

って、原因は重要度に設定する値にあった。

重要度=1~10の場合、CATCH句へ飛ばない。

RAISERROR (N'エラーメッセージ', 10, 1);

重要度=11~18の場合、CATCH句へ飛び、18までなら普通のユーザでも指定できる。

RAISERROR (N'エラーメッセージ', 18, 1);

重要度=19~の場合、sysadminとか権限のあるユーザでないと、そもそも設定できない。

RAISERROR (N'エラーメッセージ', 19, 1);

ということで、11~18の値を設定することで、無事CATCH句に飛びましたとさ!

ExcelVBA覚書 Formからの情報連携

フォーム上で何のボタンを押されたのかを呼出元に返したいときとか、Public変数を利用していたのだが、面白いやり方というのをインターネットで見つけた。

FormのTagプロパティを使うのだが、「なるほど、これは便利!」と思えたので、メモしておく。

'呼出元プロシージャ(または関数)の記載例
Load HogeForm
HogeForm.Show
If HogeForm.Tag = "1" Then
    '(終了ボタン押下時の処理を記載)
Else
    '(中止ボタン押下時の処理を記載)
End If
Unload HogeForm
'呼出先(HogeForm)の記載例

'終了ボタン押下
Private Sub ExitButton_Click() 
    HogeForm.Tag = "1" 
    HogeForm.Hide
End Sub

'中止ボタン押下
Private Sub CancelButton_Click() 
    HogeForm.Tag = "0" 
    HogeForm.Hide
End Sub

使うときは、念のためフォームのInitializeプロシージャでTagプロパティを空欄にしておくといいと思った。

@PagesへFTP接続(FFFTP利用)

実はFTPサーバが変わってからFFFTPで接続できてなかったのだが、やっとこさ理由がわかった。
前はパッシブモードをONにしなければならなかったのだが、今はOFFにしなければならなくなった。
で、無事にアクセスできた・・・
って、何ヶ月かっかっとんねん!
(Web版の簡易FTPでやれてたんだから、まぁよいんだけど)

ExcelVBA覚書 セルにコメントをつける

セルにコメント(ふきだし)をつけるやり方。

Dim rng As Range
Dim msg As String
Dim clear_flg As Boolean

'選択中のセルにコメントを追加していく
Set rng = ActiveCell
msg = "あいうえお"
clear_flg = False         'コメントを刷新するときはTrueに変える

On Error Resume Next
If Not rng.Comment Is Nothing Then
    If clear_flg Then
        rng.Comment.Text  msg        '刷新
    Else
        rng.Comment.Text rng.Comment.Text() & vbNewLine
                         & msg       '追記
    End If
    Exit Sub
End If

'新しいコメントを追加する
With rng.AddComment(msg)
    .Shape.TextFrame.Characters.Font.ColorIndex = 2 'フォントは白
    .Shape.TextFrame.Characters.Font.Size = 9
    .Shape.TextFrame.AutoSize = True
    .Shape.Fill.ForeColor.RGB = RGB(0, 0, 0)         '背景は黒
    .Visible = True
End With

clear_flg=Trueならば、コメントは置き換わるが、Falseならば改行して追記していく。
なので、コメントは自動サイズ設定(AutoSize=True)にしておく。

ExcelVBA覚書 正規表現

私が苦手なものの1つ「正規表現」
いつまでも逃げられないので、がんばってみた。

まずは整数

'整数(上限が5桁 -99999~99999はOK)
Dim rng As Range           '対象セル
Dim res As Boolean         '結果

Set rng = ActiveCell       '選択しているセルをチェックする
Set reg = CreateObject("VBScript.RegExp")
With reg
     .IgnoreCase = True             '大文字小文字は関係ない
     .Global = True                 '全体をチェック
     .Pattern = "^[-]?[0-9]{1,5}$"
     If .Test(rng.Value) Then
          res = True
          Exit Function
     End If
End With

次は実数
こいつがややこしくて、整数のときと実数のときとで分けてやらないといけない
.Pattern = “^[-]?[0-9]{1,3}[.]?[0-9]{0,2}$”
だけにすると整数4桁、5桁の数値もOKになってしまった。

'実数(上限が5桁 -999.99~999.99はOK)
Dim rng As Range           '対象セル
Dim res As Boolean         '結果

Set rng = ActiveCell      
Set reg = CreateObject("VBScript.RegExp")
With reg
     .IgnoreCase = True   
     .Global = True       
     '整数の場合のチェック
     .Pattern = "^[-]?[0-9]{1,3}$"
     If .Test(rng.Value) Then
          res = True
          Exit Function
     End If
     '実数の場合のチェック
     .Pattern = "^[-]?[0-9]{1,3}[.]{1,1}[0-9]{0,2}$"
     If .Test(rng.Value) Then
          res= True
          Exit Function
     End If    
End With

そして、英数字のみ

'英数字のみ(上限が5桁で、半角のみ、大文字小文字OK)
Dim rng As Range           '対象セル
Dim res As Boolean         '結果

Set rng = ActiveCell      
Set reg = CreateObject("VBScript.RegExp")
With reg
     .IgnoreCase = True   
     .Global = True       
     .Pattern = "^[a-z0-9]{0,5}$"
     If .Test(rng.Value) Then
          res = True
          Exit Function
     End If     
End With

ExcelVBA覚書 名前定義を削除する

Excelで数式やマクロを使うとき便利だからと名前を定義する人がいるが、本当にやめてほしい「悪習」だと私は思う。
なぜかって、シートのコピーするたびにグチグチ名前重複してもいいか聞いてきて、「もう好きにしろよ!」って思っても、ずぅ~っとすべての名前について聞いてくるのが、まぁ性質の悪いこと、悪いこと!

そういうことがわかっていれば、簡単に名前定義は使わないと思うのだが、まぁ使ってますな・・・
で、削除しちゃえ!

※ 2021/03/03 ブック内の名前定義を削除させるロジック追加


Sub DeleteNamesExcludePrintX()
    
    Dim ws As Worksheet
    Dim nm As Name

    ' シート内の定義(Printから始まる名前定義は印刷設定なので除外)
    For Each ws In ThisWorkbook.Worksheets
        For Each nm In ws.Names
            Debug.Print nm.NameLocal & ": " & nm.Name
            If nm.Name Like "*Print_*" Then
            
            Else
                nm.Delete
            End If
        Next
    Next
    
    ' ブック内の定義
    For Each nm In ThisWorkbook.Names
            Debug.Print "** " & nm.NameLocal & ": " & nm.Name
            nm.Delete
    Next

End Sub


削除するのはいいんだけど、印刷設定まで消すとまずいので、「Print_」から始まる名前は消さないでおく。
(印刷範囲と印刷タイトルが該当する)

ただし、マクロとか数式とかで使ってたらエライコトになるのでご注意を。

HTML5プロフェッショナル認定資格 Level1

という資格がある。
Level1があるということはLevel2もある。
しかし、Level3は今のところない。

で、Lv1とLv2の認証票を2つくっつけると丁度図柄がそろうので、Lv1を受けようと思ったならば、それはLv2も受けなきゃという話になる。
というか、両方ともとらないと、HTML5+CSS3+JavaScriptという、Web開発者としてのスキルとしてはいささかアピールする意味がないのである。

と、奮い立たせてLevel2の試験準備に入ろうとしている。
(まだ、足は踏み入れていないが、とりあえず教科書は買った)

・・・・・・・・・・・・・・・・+・・・・・・・・・・+・・・・・・・・・・・・・・・・・

ということで、Lv1を受けてきて、まぁ合格したのだ!!

いや、まぁ今まで受けてきた簡単な試験の中でも、簡単なほうなんだろうね・・・とタカをくくっていた私が間違いでござったことでござる。

75点とかそのへんだったな・・・合格ラインが70点で。

しょっぱなから、
「こんな話知らんぞ!」
(って、一応本には載ってたんだけど星1個だったから、すっ飛ばしたんだよね、確か)

というような問題ばっかり出て、もう見返したところでわからんもんはわからんし!とプチっと終了させたんだよね。

合格って見たときはほっとしたけど、あまりに出来が悪くって、これじゃLv2なんてどうなんのよ?
だって、Lv1でこんなの見てもしょうがないっていわれている教本のLv2バージョンしかテキストがないんだよ!!

って、愚痴を言っているとたぶんまともな、いやまともに近いテキストが出てきてくれると信じて勉強し始めよう。

ExcelVBA覚書 どのボタンを押した?

シート上にある複数のボタンから1つのサブプロシージャを起動するときなんぞに、どのボタンを押したのかわかればよいなぁ~と調べたら、意外と簡単にできるらしかった。

[ A ] [ B ] [ C ]

って3つのボタンがあって、それぞれ名前(ShapeオブジェクトのName)を「A」「B」「C」とつけておく。
(図形 1とか、ボタン 1とかの名前を変えてやるのだ。もちろん、そのままでもいいけど。)

で、これらのボタン全部 にマクロ登録して、AbcButton_Click() を実行させるとすると、

Sub AbcButton_Click () 
    Dim buf As String
    buf = Application.Caller
    Select Case buf
    Case "A"
        Msgbox "Aが押された!"
    Case "B"
        Msgbox "Bを押しましたね"
    Case "C"
        Msgbox "Cなんですか?"
    End Select
End Sub

という感じで、Application.Callerがボタンの名称を教えてくれるので、そこから分岐させる処理を記述すればよい。

ん~、もっと早く知っとけばよかった。
できないだろうという思い込みはよくない。実によくない!