読者です 読者をやめる 読者になる 読者になる

PeaceJetのブログ

金融系の社内エンジニアをやりながら、マーケティングやプランナーなども

【Atom】AtomでAtom-Runnerを実行するときの不具合?

自分はPython3のソースコードAtom-Runner上で実行しているのですが、
ツリービューでプロジェクトフォルダを表示している場合の不具合?に気が付きましたので書きます。

たとえば、何らかのファイルを出力する場合を仮定します。

'''
time.txtをカレントディレクトリに出力したい。
doit()で実行。
'''
with open(r'time.txt', 'w') as f:
    f.write(doit())
    print("execute")

このとき、左側のツリービューでプロジェクトフォルダを設定している場合、なぜかツリービューのトップにあるディレクトリにtime.txtが出力されてしまいます。

なので、業務的なものを設定しておくと思わぬバグを生むので注意が必要です。

'''
たとえば、以下のようなプログラムを実行すると確認できます。
'''
import os
print(os.getcwd())

iOS10不具合にイライラ(# * ш *);

未だにアップデート後の不具合が続いているので、列挙してみたいと思います。

  • カメラが起動しない。
  • 意図しないタイミングで、通知領域の表示件数が減っている。

カメラが起動しないことが多々あるので、サポートに掛け合ってみようかと思っているところです。

タイミングを逃したくないのに、カメラ起動したら真っ暗闇。
再起動しないと治らないので、毎回、Siriに喋んなと言ってから再起動。

ほんとに最悪です。

話は変わりますが、Linuxが起動しなくなった…。
ブートローダーを削除しないといけない。
めんどい…。

【Python3】tkinterについて

Tkinterがno name moduleに…

Python3では、import Tkinterするとエラーになりますが、これはPython2でのパッケージ名だからだそうです。

import Tkinter
import tkMessageBox
'''
no name module Tkinter
no name module tkMessageBox
'''

モジュール名も変更されている

直下のモジュールも、いくつか変更されていますのでまとめてみます。

変更前(Python2) 変更後(Python3)
Tkinter tkinter
tkMessageBox tkinter.messagebox
tkColorChooser tkinter.colorchooser
tkFileDialog tkinter.filedialog
tkCommonDialog tkinter.commondialog
tkSimpleDialog tkinter.simpledialog
tkFont tkinter.font
Tkdnd tkinter.dnd
ScrolledText tkinter.scrolledtext
Tix tkinter.tix
ttk tkinter.ttk

変更前はバラバラに存在していましたが、変更後はtkinterクラス内部にまとめられているようです。

Python3のあれこれ

こんにちは!

最近、Raspberry Pi 3 Model Bを購入して遊んでいるPeaceJetです。
ただ、Linuxを触ったことがないので勉強しながらです(・_・;)

これまで、Windowsしか使ってこなくて、途中でMacBookとか買ってみたんですけど。
肌に合わなくて、売っちゃったりして。

でも、今更ながら少し後悔している部分もあります。
持っていれば、Unix勉強できたかなぁなんて。

ただ、一筋の光が見えたのはBash on Ubuntu for Windows10

なにやら、カチカチやっております。

最近、Python3をやっていて気がついた部分がありましたので、メモを・・・。

pythonにはswich文が存在しない

def func1():
    print("exec 1")
def func2():
    print("exec 2")

# Method 1
for case in [1,2]:
     if case == 1:
         func1()
     elif case == 2:
         func2()

# Method 2
for case in [1,2]:
    { 1: func1, 2: func2 }[case]()

if文の条件式は、Bool型へ変換される

たとえば、「0(ゼロ)」や空リストなど無に相当するものが評価されるとFalseが返されます。

if '':
    print('今日は雪です')

if 1:
    print('今日はユキです')

>>> 今日はユキです

一文で書くことが出来るのも魅力

# [評価が正当な場合の値] if [条件] else [評価が不当な場合]

10 if True else 0

>>> 10

for e in [1,2]: print(e)

...
1
2
>>>

#lambda

>>>c = lambda e : print("hello " + e)
>>>c('world')
hello world
>>>

イテレーションなど

# インデックスつきで、要素を得ることが出来ます。

for i, elem in enumerate(['a','b','c']):
    print('%s: %s' %(i, elem))

0: a
1: b
2: c

# list1,list2を同時にループ

list1 = [1, 2, 3]
list2 = [4, 5, 6]
for (a, b) in zip(list1, list2): print(a, b)
1 4
2 5

# イテレーター
# リストの要素を出し切ったら、例外が発生する。
users = iter(['Alice','Bob','Carol'])
try:
    while True:
        print(next(users))
except StopIteration:
    print('例外が発生しました。')

# トリッキーなやつ
a = (print(x) for x in range(5))
b = lambda *c: print("finished")
b(*a)
...
1
2
3
4
finished

P.S.
RaspberryPiは結構、魅力的なんですよね。

「何かできそう! だけど、どう活用しようかな?」

これを解決することが、今の課題です。

ビジネスの場では時間が大切ですから「ハッキリ見えてから使おう」なんですが、趣味ですからね。

もっと、知識があって出来る人と交流とかしたら楽しいのかも。

【Outlook VBA】メールをマクロから送る方法

こんちゃっすぅ!

今回は、Outlook VBAについて、解説しますよ!

Outlookでマクロを組めるという人は、結構な方が知っていることと思いますが、余り詳しく書いている方がいない印象です。

ちょこちょこ出していければと思っています。

Private Sub MailSend()

    Dim OL As Outlook.Application
    Dim ML As Outlook.MailItem
    Set OL = CreateObject("Outlook.Application")
    Set ML = OL.CreateItem(olMailItem)

    With ML
        
      .To = "example@example.ppp.com" 'Toアドレス
      .CC = ""  'CC
      .BCC = ""  'BCC
      .SendUsingAccount = Session.Accounts("text@test.aaa.com") ' アカウント指定
      .Subject = "経営計画について" '件名
      .Importance = olImportanceHigh  '重要度(高)
      .Attachments.Add "C:\document\text1.txt"  '添付ファイル 1
      'Attachments.Add "C:\document\text2.txt"  '添付ファイル 2
      .Body = "この文言はテストで送っています。" & VBCrLf & "よろしくお願いいたします。" '本文
      .Send 'メール送信
    
    End With

    Set ML = Nothing
    Set OL = Nothing

End Sub

これを上手く使えば、自動配信メールなどを組み立てることも容易ですね。

引数を取って、アカウントを変えながら送信したり・・・。

ExcelOutlookの組み合わせで、一斉送信メールなども可能になりますね。

JQueryでチェックボックスの要素を配列で取得し、存在確認まで

JQueryチェックボックスの要素を配列で取得・存在確認

こんにちは、PeaceJetです。

今回は、JQueryチェックボックスの要素を配列で取得し、存在確認までやりたいと思います。

まず、以下のようにinput要素があるとします。

<input type="checkbox" class="check" value="JavaScript"><label>JavaScript</label>
<input type="checkbox" class="check" value="JAVA"><label>JAVA</label>
<input type="checkbox" class="check" value="Ubuntu"><label>Ubuntu</label>

要素を配列で返す関数を用意する

次に、チェックボックスの要素を配列で返すような関数を用意します。

$MyArray = $('[class="check"]:checked').map(function(){ return $(this).val(); }).get();

「indexOf」を使います。

「indexOF」メソッドは、ある特定の要素が配列の何番目で登場するかを捜索するものです。

存在確認だけであれば、以下のように使用することが出来ます。

if ($MyArray.indexOf('JavaScript') >= 0 ) {
    console.log('JavaScriptは存在します');
}

indexOfを使わない方法も・・・

今回は、indexOfを使わない方法を記載します。

for(var i = 0, len = $MyArray.length; i < len; i++){
	if(i in $MyArray && $MyArray[i] === 'JavaScript'){
		console.log('JavaScriptは存在します');
		break;
	}
}

画面中央に「処理中」という案内板を出す方法【エクセル VBA】

こんにちは、PeaceJetです。

今回は、画面中央に「処理中です」という案内を出す方法をご紹介します。

意外と難しいのかなぁ~と思う方も多いかと思いますが、意外と簡単ですのでお試しあれ。

ユーザーフォームの準備

今回はユーザーフォームを使用して、「ただいま、処理中です・・・」という案内板を作成します。

作成例

f:id:PeaceJet:20161005183811j:plain

パーツを作成し終えたら、ユーザーフォームに以下のように記述します。

f:id:PeaceJet:20161005184055j:plain

Private Sub UserForm_Initialize()
  With UserForm1
    .StartUpPosition = 0
    .Top = Application.UsableHeight / 2 '(1)
    .Left = Application.UsableWidth / 2 - 172.5 '(2)
  End With
End Sub
ユーザーフォームの「横幅」を入力する

(1)と(2)は画面サイズを計算しています。
(2)の「172.5」部分をユーザーフォームの横幅(ピクセル単位)に変更して下さい。

こうすることで、フォームが画面中央に表示されるようになります。

微調整が必要な場合は――

debug.print Top & Chr(10) & Chr(13) & Left

などで、確認しながらやってみるのもいいでしょう。

標準モジュールの準備

次に、標準モジュールからウインドウを呼び出してあげます。

Sub Example()

'(3)
With UserForm1
    .Show vbModeless
    .Repaint
End With

'(4)
Rem ここに処理を記述してください。

'(5)
Unload UserForm1

End Sub

上記を詳述すると、以下のようになります。

  • (3)で、案内板を呼び出します。
  • (4)で、処理を行う。
  • (5)で、案内板を消します。

P.S.

最近、ExcelVBAのことばかりなのですがjavaScriptPHPもやっていたりします。

てか、書きたいことは、この他にも沢山ありましてですね・・・。

特に、旅行TIPSなどを書いていきたいのであります。

次は、必ず載せるぞ! Only技術ブログにはさせないからなぁぁ!