Processing3 Javaで動かしてみる

Processingで作成したpdeファイルをJavaにしてみようと思ったが、うまくいかないので、基本的なところから少しずつ試していく。

Processing3を入れて、JRE1.8をいれて、Eclipse上でごねごね。
ネットで調べたとおり、setupのところにsizeメソッドを入れたら怒られて、しょうがないからsettingsメソッドをつくってそっちに入れたら、なんか足りん!と怒られて、こんな感じにしたら、とりあえず斜めに線は引けた。

package test;

import processing.core.PApplet;

public class Test extends PApplet {

	public void settings() {
		size(600, 600, JAVA2D);
	}
	public void setup() {
		background(200, 50, 60);
		smooth();
		strokeWeight(5);
	}

	public void draw() {
		line(0, 0, width, height);
	}

	public static void main(String _args[]) {
		PApplet.main(new String[] { test.Test.class.getName() });
	}
}

先は長そうだ。

確定申告完了!

日曜日に確定申告に行ってきた。
今回はいつもの医療費控除の他に株の配当の申告もしておこうと思ったのだが、初めてのことだったのでどこにどう入力すればよいのかわからず、結局今回もヘルプ付きの申請書作成コーナーで入力。

1年に1回のことなんで、ほんと、忘れるわ~~~と、情けないところだが、作成コーナーは前年よりだいぶんスムーズに行くようになっていたので、待ち時間もかなり短縮されていた。
(もう、みんな電子化するのね)

「配当まで申告するんですね?申告すると後で修正は無理ですよ?」とかいわれたから、配当とか売買利益とかを入れると納税額が大きくなるんだろうなぁ、と思いつつ、でも「きっちり納税しまっす!」と申告してしまった。
(ヘルプの皆さん、ありがとう。あなた方いないと、私は申告書もろくに書けませんでした。)

お国のために、勤労と納税は義務ですよ、はい。

SQLServer覚書 8桁数値を日付表示に

さて、最近くだらないことをまじめに書いているので、久しぶりに技術的なことを軽くメモ書きしておこう。

8桁数値を日付(yyyy/mm/dd)表示にする方法

SELECT CONVERT(varchar,CONVERT(datetime, CONVERT(varchar,20160223), 112),111)

1つ目(内側から)は文字列に変換、2つ目のCONVERTではDATETIME型に変換するので、出力としては「2016/02/23 0:00:00」というように日付と時間で出力される。
これを「yyyy/mm/dd」形式の文字列で出力させるために3つ目(一番外側)のCONVERTを用意。

これとは逆に日付を8桁数値に変える場合は、データを「yyyymmdd」の文字列で出力した後、INT(またはNUMERIC)型に変えてしまえばよい。

SELECT CONVERT(int,CONVERT(varchar, '2016-2-14', 112))

よろしいですか?

あなたの店の前はあなたの店ではありません。
あなたの店の前はあなたの店の待合室ではないし、喫煙室でもありません。
あなたの店の前はあなたの駐輪場ではありませんし、ましてや駐車場ではありません。

あなたの家の前はあなたたちの駐車場ではありません。
あなたの家の前はあなたたち家族の遊び場ではありません。

道は唾や煙を吐くところではありません。
道はゴミを捨てるところでもありません。

どうして自分の子供の前で吸わないたばこを赤の他人の前で吸うのでしょう?
どうして道路で喫煙して、他人の服や肺をいとも易々と汚すのでしょう?
どうしてゴミを放置したり、ポイ捨てしたりするのでしょう?
それらをきれいにするのはいったい誰なのでしょう?

あなたはペットを子供のようにかわいがりますが、その「子供」は人の家の前で糞尿をしています。
あなたの子供が「人」であるなら、そのようなことは許されるでしょうか?
片付けるからいいではないか?そういう問題ではありません。

これらはすべて意識の問題です。

道路は公共の場所です。
他人に迷惑をかける行為を故意にやる必要はありません。
家でやれることは家でやればよいのです。

家の中で唾を吐き、ポイ捨てすればよいのです。
家の中で煙を吐き、外に出さなければよいのです。
家の中で糞をして、トイレに流せばよいのです。

そう、他の人は関係ありません。

Excel印刷範囲指定+ウインドウ枠固定→チカチカ

印刷範囲指定をしてウィンドウ枠を固定すると、アクティブセルのある領域以外の図形がちらついて見える事象。
Excel2010でしか起きないらしい当該事象だが、さてどうしようかと考えると、結局は印刷範囲指定をやめる結論に至った。
解決作的には根治してもらわなければならないのだが、MSさんが重い腰をあげないので、
自分で腰を上げるとするなら、例えば、印刷ボタンを作って、ボタンを押したときだけ印刷範囲指定→印刷→印刷範囲クリアすればよいのかなぁと考えた。
でも、厳密に印刷設定を行う必要性がないのであれば、印刷の拡大率を設定しておくだけでも何とかなるような気もする。

ExcelVBA覚書 Shellとかリモート実行とか

忘れる前にメモっとく。
VBAからコマンド実行を非同期で行う時に使うShell関数。
第2引数にvbMinimizedNoFocusを設定すると、コマンドプロンプトは非表示になって、裏側で走る仕組みにできるそうな。

Dim cmd_buf As String
Dim res     As Double

cmd_buf = "cmd /c sqlcmd -S {DB-Source} -U {DB-UserId} -P {DB-UserPw} -d {DB-Name} " _
         & " -Q ""EXEC {プロシージャ名} {*}, '{*}' """ 
res = Shell(cmd_buf, vbMinimizedNoFocus)

{}書きは環境に合わせて変更
{*}はストアドの引数で、文字列の場合はシングルクォーテーションで囲む。

Shellの戻り値はタスクIDで、「0」がかえってきたら動いていないということらしい。
非同期なので勝手に動いて、勝手に終わる。

終わったらウィンドウをアクティブにするとかすると、終わったことがわかるらしい。

If res > 0 Then Call AppActivate(res)

と、こんな感じかね。
ふむふむ、しかしだね、裏側で勝手に動いているわけで、下手にPCシャットダウンしちゃうと、処理が途中で終わっちゃう!ってところが怖い。

で、次。
リモート環境にあるバッチファイルを実行する方法。

'server:リモートサーバ(user_id/user_pwでログイン)
'exe_name:実行ファイル, exe_position:実行ファイルのパス
Public Function ExecuteRemoteExe(server As String, user_id As String, user_pw As String _
                                , exe_name As String, exe_position As String) As Boolean

    Const AUTHENTICATION_LEVEL_PKT_PRIVACY = 6
    
    Dim obj_locator As Object
    Dim obj_server  As Object
    Dim obj_process As Object
    Dim res As Long
    Dim pid As Long
    
    On Error GoTo ErrExecute
    
    Set obj_locator = CreateObject("WbemScripting.SWbemLocator")
    Set obj_server = obj_locator.ConnectServer(server, "root\cimv2", user_id, user_pw)
    obj_server.Security_.authenticationLevel = AUTHENTICATION_LEVEL_PKT_PRIVACY
    
    Set obj_process = server.get("Win32_Process")
    res = obj_process.Create(exe_position, Null, Null, pid)

    Select Case res
        Case 0
            ExecuteRemoteExe = True
        Case 2
            Msgbox "アクセスできませんでした。"
        Case 9
            Msgbox "パスが正しくありません。" 
        Case 21
            Msgbox "パラメータが正しくありません。"
        Case Else
            Msgbox "バッチを実行できませんでした。"  
    End Select
        
ErrExecute:
    
    Set obj_process = Nothing
    Set obj_server = Nothing
    Set obj_locator = Nothing
    
End Function

これでリモートのバッチファイルを実行することができる。
できるんだけど、これもこっち側のPCを切ってしまうと、バッチも終わってしまう・・・
なんとかならんか。

ExcelVBA覚書 Resize

モノを整理するのにモノを買う・・・
という、断捨離しているはずなのにモノを増やす、愚かしいことをやってしまった。

いや、何にせよ、今のままじゃイカン!と、虚無感たっぷりに自分に活を入れつつ。

ExcelのRangeオブジェクトのメソッドにあるResize。起点セルと行列数を指定して範囲指定するのに使っているようだ。
こんなメソッドがあるとは全く知らなかったが、ネットサーフィンしてたらたまたま見つけたので試してみる。

参照サイト:Range,Cells」と「Resize」のセル範囲指定を比べてみる

パターン1:ごくごく一般的な範囲指定

With ThisWorkbook.Worksheets(1)
    .Range("C2:E4").Select
End With

パターン2:一般的なはずな範囲指定

With ThisWorkbook.Worksheets(1)
    .Range(.Cells(2, 3), .Cells(4, 5)).Select
End With

パターン3:「Resize使って同じことしてみるよ」な範囲指定

With ThisWorkbook.Worksheets(1)
    .Cells(2,3).Resize(3,3).Select
End With

パターン4:「Offset使って同じことしてみるよ」な範囲指定

With ThisWorkbook.Worksheets(1)
    .Range(.Cells(2,3),.Cells(2,3).Offset(3,3)).Select
End With

パターン1から4まで、すべて同じ範囲が指定される。(つまり、セルC2~E4)
なるほど、少なくともパターン4よりは、パターン3の方がきれいだ。
パターン2と3、どちらを使うかは、周辺のロジック次第。

なお、参照サイトには「Rangeが参照しているシートがアクティブになっていないとエラーになる」と書いてあるが、実はどのメソッドでも同じ。Selectメソッド自体、アクティブシート上にでないと動かないので、ResizeやOffsetとは関係がないと思う。

最近のダメな私

最近の私は本当にダメダメだ。
なんてったって、仕事をする意欲がない。
寒いから外にも出たくない。家事もしたくない。
とりあえず、起きて、食べて、遊んで、寝る、ってなルーティーンをできるだけの財力が欲しい・・・

・・・以下、個人保護のため音声は変えております。・・・

SMAP解散騒動
 なんで謝罪するのか意味不明。
 お騒がせさせたのはメディアで、騒いでるのはマスコミとファンでしょ。
 解散しない方がいいのもよくわからん。
 他人の人生に口を挟む理由もよくわからん。
 という、わからんことばかり。
 社会ってこういうものかしら。

ゲスさん不倫
 何がゲスなのかわからん。
 そもそも、好きになってしまったらどうにもならんのです。
 不倫から始まってうまくいってる夫婦って結構いるし。
 それをゲス呼ばわりできる人って限られてる。
 でも、男の方はやっぱりゲスかな。ゲスというよりアホってかんじだけど。
 次にゲスってるのは男の嫁だと思う。
 旦那が不倫してる思いの丈なんて、週刊誌にしゃべるか?
 普通そんなことしないでしょ。夫婦のことは夫婦で決着つけてね。
 え、そう、そうよ。私には関係のない話。


 去年持ってる株を全部売った。
 年初から日経平均が値下がりしたといっても、私が売ったときよりはまだ高い。
 というか、そもそも株価の変動激しすぎ。
 一律20%とかでなく、買ってから売るまでの期間によって税率を変えてみてはどうだろ。
 投資してほしいというわりに、NISAも中途半端だし、
 低金利でお金預けてもたいした利息も付かんし、
 今後マイナンバーで管理されるようになれば、結局タンス預金で落ち着いちゃうよ。

所詮外野は適当だわ。

 

PostgreSQL覚書 DBLINK設定方法

昔やったのに忘れてしもーた・・・
と、Webで調べたDBLINK。

「CREATE EXTENSION DBLINK;とやったら使えるよ!」みたいなサイトがあったからやってみたら、postgreさんに「なんじゃい!」って怒られたので、過去のドキュメントを引っ張り出してきた。

「そもそも、モジュールあらへんやん、あんた」みたいな話なので、
コマンドプロンプトを立ち上げて、

cd /d C:\Program Files\PostgreSQL\9.0
bin\psql -U {USER_ID} -d {DBNAME} < share\contrib\dblink.sql でPWを入れてDBLINKを使えるようにすると、関数としてDBLINKが使えるようになった。

PostgreSQL覚書 年間日別レコードを作る

1年分の日付データを作りたい。もちろん一括で。
できないものかと探すと、あった。

SELECT arr.i AS date1
 FROM
 generate_series(
   cast('2016-1-1' as timestamp)
 , cast('2016-1-1' as timestamp) +  '12 months' + '-1days'
 , '1days'
 ) as arr(i)

Series Generating Functions(集合を返す関数)・・・

よくわかりヘンが、generate_seriesの1つめの引数をスタートとして、2つ目の引数まで1データずつレコードを作成してくれる便利なもの。
1,2の引数がINT型であれば、3つ目の引数はなく、+1しながらレコードが作られる。
1,2の引数がTIMESTAMP型であれば、3つ目の引数にインターバル設定をして、インターバル設定分プラスしながらレコードが作られる。(上の例だと1日ずつ)

参考URL:Postgresqlでカレンダーを使わずに日付を列挙する方法(generate_series)

ExcelVBA覚書 シート保護

シートを保護する、解除するというのは、

Worksheets(“Sheet1”).Protect
Worksheets(“Sheet1”).Unprotect

という、メンバー(サブプロシージャ)でできるのだが、Protectするときの引数に、「UserInterfaceOnly」というのがあり、これをTrueにしておけば、シート保護の解除をしなくても、マクロでシート上のデータを変えられるそうな。

Worksheets("Sheet1").Protect UserInterfaceOnly:=True

なので、いままでわざわざシート保護を解除して処理をしていた自分が情けなくなった。
(何年VBA使ってんだよ!と自分を責めてみる。)

まだまだ知らないことがあるなぁ。

この引数を指定しない場合は、ちゃんと保護解除をしてから触ること。

ExcelVBA覚書 IsMissing関数

Optionalで指定した引数は省略可能だが、設定されて呼び出されているかどうかを確認する関数がIsMissingだそう。
しかしながら、この変数の型がVarient型のときにしか機能しないというお粗末もの。

Private Sub Test (Optional a As Varient)
    If Not IsMissing(a) Then
        '設定されているとき
    Else 
        '設定されていないときのロジック
    End If
End Sub

下のようにLong型にすると、a=0と判断されてしまうので×。

Private Sub Test (Optional a As Long)
    If Not IsMissing(a) Then
        '全部こちらに入ってしまう
    Else 
        'こっちに来ない
    End If
End Sub

ということで、省略時の初期値を設定しておき、条件分岐をする。

Private Sub Test (Optional a As Long = -1)
    If a>0 Then
        '省略されていないとき
    Else 
        '省略されたとき
    End If
End Sub

辞める人、留まる人

年末や年度末になると、退職する人がいて、
「あぁ、仕事ができる人って、辞めていくよなぁ・・・」
みたいに思ってしまう。
なんだか、置いてけぼりを喰っているように感じるのは何故なんだ。

ただ、会社の人が辞めていくのを何人もみたのだが、正直、辞めるときのお作法ってのを知らなさすぎるなぁと思う。
前居た会社だと、アルバイトでも社員でも、転勤やら退職するときは、みんな菓子折ひとつ持ってきて、部署の人みんなに挨拶がてら配っていた。
それが当たり前だとも思ってた。

この会社に来てから、そういうことやる人があまりいないのに、正直ビックリした。
うちの会社は派遣会社みたいなものなので、社員がいろんなところに散らばっている。100人中、身近にいるのは10人ぐらいなもんだ。
だけどだ。
それでも、身近にいるひとにだけでもさ、菓子折一つもって挨拶してまわったらどうよ?
「お世話になりました」ってさ。
それが礼儀じゃないのか?

まぁ、年上の人間がそういう風に辞めていく姿を見ていないと、若い人には伝わらんのかな・・・
常識の範疇だと思ってたけど。
(学生時代、バイト辞めるときでもそれぐらいのことはしたけどな)

と、なんだか古狸か、お局様みたいな感じになってしまったが、そういう意味でまともな「大人」がいない会社だなぁ、と改めて感じてしまった今日この頃。
そして、私はそんな会社に留まっている人なんだけど、さぁどうしましょう。

ExcelVBA覚書 ハイパーリンク

指定したURLを開く。(イベント用)

' url : リンク先
Private Sub GotoLink(url As String)
    On Error Resume Next
    ThisWorkbook.FollowHyperlink Address:=url
End Sub

セルに指定したURLのハイパーリンクを設定する。

' rng  : 設定セル , description : 表示文言, url : リンク先
Private Sub SetHyperlink(rng As Range, description As String, url As String)
    On Error Resume Next
    rng.Hyperlinks.Add Anchor:=rng , Address:="", SubAddress:=url, TextToDisplay:=.description
End Sub

ハイパーリンクを削除する。

' rng  : 設定セル 
Private Sub DeleteHyperlink(rng As Range)
    On Error Resume Next
    rng.Hyperlinks.Delete
End Sub

在庫処分の日

さてもさても、去年の年末より断捨離中。

年末に使っていないストーブや電化製品を売ったけど、トータルで1000円ぐらいにしかならず凹む。
しかし、年始早々に別のものを持って行ったら、「この間持ってきていただいた品がもう売れました!」ってな報告を受けて、まぁ、誰かが使ってくれるのならいいか・・・と思った次第。
(で、いくらで売ったんだよ!と思いながらも聞きそびれた。)

で、連休を利用して、梅田まで衣料品とPCを売りに行った。
梅田に売りに行ったらチョットは高額になるのでは?とか期待した衣料品は結局お金にならず、ほぼほぼただの布扱い。(でも、JUMBLE STOREで1枚10円にはなったので、捨てるよりマシ。本当に布扱いだとグラムいくらになるんだよね。交通費入れたら捨てた方が・・・とか思ってしまう。)
しかし、一緒に持って行った布製の鞄は、1000円近くになったのでヨシとしよう。(捨てなくてよかった。)

次にPC。
いつものところ(Sofmap)に売りに行く。
会社の同僚がMacbook Airが4万円近くで売れたというので、期待大で持って行くと、5万以上になってくれた。もう1つのWindowsノートは2万円台で売れたので、財布はホクホクになった。
相変わらず、Macは値崩れしないので買い換えしやすいなぁと思う。

Macbook Air 1.8GHz Core-i7 11.6inch Memory4GB HDD256GB 買取価格53,000円
(ちなみにキーボードは海外向けのもので、2年ぐらい前に8万ぐらいで購入したはず)

Java覚書 月加算・月末

月末を出すときは、加算前の日を1日にしておいて、加算後-1日するのが自分の常套手段。
(どの言語でも大体このロジックは使えるし)

import java.util.Calendar;

public class Main {
    public static void main(String[] args) throws Exception {

        // 指定日からnヶ月後の月末を出力
        int y = 2012;
        int m = 12;
        int d = 14;
        int n = 2;
        
        Calendar cal = Calendar.getInstance();

        cal .set(y,m - 1, d);
        dispDate(calendar);
    
        cal .set(y,m - 1, 1);
        cal .add(Calendar.MONTH, n + 1);
        cal .add(Calendar.DATE, -1);
        dispDate(cal);
    }

  private static void dispDate(Calendar cal ){
    int year = cal .get(Calendar.YEAR);
    int month = cal .get(Calendar.MONTH) + 1;
    int day = cal .get(Calendar.DATE);

    StringBuffer sb = new StringBuffer();
    sb.append(year + "年" + month + "月" + day + "日");
    
    System.out.println(new String(sb));

    }
}

謹賀新年

さて、正月早々いきなりステーキに行ってきた。
いきなり贅沢だが、まぁ自分を発奮させるためには、これぐらい必要かな。

ヘレステーキ200g。ちょっと足りないかなとも思ったが、あとのことも考えて一応セーブ。

今日の第一目標は、「STARWARS」を観ること。
1日なので、映画が1100円で観られる。ということで、映画館でネットで買ったチケットを取って、ジュースを買ってシアターへ入る。
映画の宣伝が15分あって長いのに正月早々ちょっとイラッとしつつ、さっそくエピソード7スタート。

ネタバレになるので内容は書けないけれど、もうなんといっても、
「映画を観た!!」
って感じにさせてくれた映画だった。映像も音楽も圧倒的。それに昔から見ている人たちを裏切らない感じ。
いやぁ、映画ってやっぱりいいですね、って久しぶりに思った。

ちびむすカレンダー

2016年のカレンダーが欲しい・・・
2015年のカレンダーは実はExcelマクロでひょいっと作ったのだけど、そのマクロはHDDが潰れたのと同時に消えてしまった。
もう、マクロを作る気力が今はない・・・
と思ってたら、ちょうどいいサイトがあるではないか!

ちびむすカレンダー

助かります、マジ。

在庫処分+在庫を増やす日

さて、何年かに1度の在庫処分日。
1年使っていないNINTENDO DSのソフトを売り、使わなくなったPCを売り、そして、今後使いそうもないスマートデバイスを売りに行った。

まぁ、ほとんど値のつかないようなものばかりだったが、
iPod touch 5th グレー32GB は13,500円になった。
その他、チョコチョコと稼いで、結果は2万円強になった。

よかった、よかった。

で、次は在庫を増やす?番だ。
とりあえずは阪神百貨店に行ってみる。
今日は何のイベントをやっているのかと8階に上ったらワインだった。
ちょこちょこっと試飲したが、ワインを買う人たちの凄さに驚きつつ、この渋みを味わえない自分に改めてガックシ。
自分にはまだ早いなぁ・・・、というより一生わからんな。

「そうだ、私は日本人なのだ」と、茶筒を見に行く。
今年の春に角館でいろいろ見たのだが、どうもいまいちだったのだが、今回はそんなことは言っていられない。
最近粉茶を買ってしまい、粉茶をいれておくところが必要になったのだ。

で、結局角館で作られた桜皮の茶筒(8000円ぐらい)を買った。
なかなかいい買い物だ。
匙のいいのがなかったのだが、LUCUAのルピシアにちょうど桜皮の茶匙があったので購入。
聞くと11/3まで紅茶の日のフェアで、お茶は10%OFFとのこと。
ついでに、何パックか紅茶を買って帰るとする。

と、無印良品があるので、追加で欲しかったコロコロを買い、阪神百貨店の地下でから揚げを買い、あれこれ買って帰ってきた。

今年やるのは、あとは本と服と家電かな、と洗濯機を回す。
服の整理は早くやりたいな。

Windows IE8ダウンロード元

念のためにメモ。

Microsoft Internet Explorer 8 をインストールする方法

Windows XP
http://download.microsoft.com/download/0/5/7/05716044-2806-40DA-8332-D3ED79BC8F68/IE8-WindowsXP-x86-JPN.exe
Windows Vista
http://download.microsoft.com/download/A/1/B/A1B7D65F-9473-4EB6-A845-68FC5CE4ADDA/IE8-WindowsVista-x86-JPN.exe
Windows Vista (64 bit 版)
http://download.microsoft.com/download/2/2/F/22F4B780-44AF-4265-A3AD-F77865BDD40B/IE8-WindowsVista-x64-JPN.exe