両方タッチできる液晶のPC。
触ってみたけど、とてもブラインドタッチできる気がしねー。

両方タッチできる液晶のPC。
触ってみたけど、とてもブラインドタッチできる気がしねー。
The Microsoft Conference 2011で、Lyncが触れたので、後輩2人と遊んできたが、すげー良かった。導入したいよ。
IMとオンライン会議と(IP)電話(ビデオ含む)がうまく融合されているので、Exchange導入されている企業ならメール、会議予約含めて、すごく自然に使えると思う。
ホワイトボード共有、アプリケーション共有、PowerPoint(プレゼンテーション)共有、デスクトップ共有もあるから、設計とかコードレビューにも使えそう。使いどころは分からないけど、リアルタイムの投票システムもあった(笑)。プレゼンしながらインタラクティブに集計するんだろうか。
ビデオ会議も発言している人のカメラが勝手にアクティブになるし、自分は映らないようになってるしと、インテリジェンス。
クライアントは完全にWindows Live Messengerと同じだねー、と後輩と話してた。
MSの話だと、Windows Phoneのアプリも暮れには出るらしい。
ウチの会社もMSの製品で固めてくれないかなぁ。
いつまで古いシステムを使い続ける気だよぉ。
参加してきた。
開発者向けの日じゃないせいか、そんな目新しい情報が無いな。
auのHPからリーク[GIGAZINE]されたけど、秋冬モデル。
ざっと見たけど、WiMAXついていないシャープとNECカシオは論外として、HTCかな〜やっぱ。
京セラの有機LEが心惹かれるんだけど(笑)、そこしか面白い所なさそうだし、日本メーカーはバッテリーが少ないからなぁ。
富士通は日本仕様含めて全部入りって感じそう。
でも、富士通/東芝の端末で良いのに出会ったことが無いので、パスだろうな。
iPhone5?
Mac持ってないし、iTunes入れなきゃいけないし(今度OTA対応するんだっけ?)、oggやflac再生できない機械になんの魅力が・・・。
cProfileを使う。[Python v2.6.2 documentation 27.4.Python プロファイラ]
pythonに引数m(意味はライブラリのスクリプトを実行する)にcProfile渡して、実行したいプログラム名を渡す
python -m cProfile プログラム名
-sでソートが指定できる。timeとかcallとか使える。
python -m cProfile -s time プログラム名
-oでファイルに出力できるとヘルプに書いてあるが、出力しても何に使うのか不明。(プログラムの再利用できるの?)
python -m cProfile -o 出力ファイル名 プログラム名
人が見る分には下記の感じで、リダイレクトした方が良い気がする。
python -m cProfile プログラム名 > 出力ファイル名
水曜日に熱があるなー、節々がいてーと思って、早く帰りたいのに台風で帰れねーと悶えてて、家帰って体温計で熱測ったら38.3度。
きゅー、バタン。
ってわけで、木、金と熱がさっぱり下がらず、ずっと寝込んでた。
ようやく土曜日になって、36度台に下がってきたので、フラフラできるようになった。
しかし、ずっと寝てたせいか、体が固まっちゃってアチコチ痛い(ToT;
中学の友人に誘われ、BBQへ。
前日のプロジェクト打ち上げ飲み会は抑えてたはずなのに、飲み過ぎてたらしく頭と腹が痛かったので、ウコンと胃薬飲んで参加。
午後には大分回復したけど午前はヤバかった。
震災後位から途中参加したプロジェクトの打ち上げ。
同席した人がたまたまお酒好きで、一時間も名前名乗る前に語り合ってしまった。
後半にようやく「お名前は?」状態。
しかもよく飲みに行ってる人の会社の人だった(笑)
PILでは扱えなかった[記事]が、IronPtyhonの.Netライブラリだと普通に扱えたので、更新しておく。
#!/usr/bin/env python # -*- coding: utf-8 -*- # # 引数で指定したフォルダの画像ファイルを # 出力先フォルダに縮小・回転しながらコピーする from __future__ import print_function from __future__ import division import os,sys,glob import shutil import clr clr.AddReferenceByPartialName('System.Drawing') from System.Drawing import * # 出力先フォルダ指定。 TARGET_DIR = 'C:\\Photo' #COWON A3向け #max_size = (800, 480) #PSP向け #max_size = (480, 270) #Ziio向け max_size = (480, 800) #対象拡張子 ext_dic = ['.jpg','.jpeg','.png','.bmp','.tiff'] #強制変換対象フォーマット forceCompressFormat = [Imaging.ImageFormat.Bmp,Imaging.ImageFormat.Tiff] #ファイル名のprefix DEST_PREFIX = 's_' #JPEG品質 JPEG_QUALITY = 75 def makeOutputDirectory(outputDirPath): if os.path.isdir(outputDirPath) == False: os.makedirs(outputDirPath) def isTarget(ext): return True if ext.lower() in ext_dic else False class ProgressBar: def __init__(self,totalNum): self.totalNum = totalNum self.counter = 0 self.chr = u"*" self.width = 40 def addCounter(self,incrementNum): self.counter += incrementNum def show(self): pbar_chrs = self.chr * (self.width * self.counter // self.totalNum) percentage = 100 * self.counter // self.totalNum meter = '\r|{0}{1}| {2}/{3}個 ({4}%)'.format(pbar_chrs,u' ' * (self.width - len(pbar_chrs)),self.counter,self.totalNum, percentage) sys.stdout.write(meter) sys.stdout.flush() def createJpegEncoder(): jpgEncoder = [codec for codec in Imaging.ImageCodecInfo.GetImageEncoders() if codec.FormatID == Imaging.ImageFormat.Jpeg.Guid][0] encParam = Imaging.EncoderParameter(Imaging.Encoder.Quality,JPEG_QUALITY) encParams = Imaging.EncoderParameters(1) encParams.Param[0] = encParam return (jpgEncoder,encParams) def shrinkImage(srcFileName, dstFileName,jpgEncoder): srcImg = Bitmap.FromFile(srcFileName) if srcImg.Width > max_size[0] or srcImg.Height > max_size[1] or (srcImg.RawFormat in forceCompressFormat): # BMP/TIFFの場合、JPEGにする if srcImg.RawFormat in forceCompressFormat: format = Imaging.ImageFormat.Jpeg root,ext = os.path.splitext(dstFileName) dstFileName = root + '.jpg' else: format = srcImg.RawFormat srcWidth = srcImg.Width srcHeight = srcImg.Height if max_size[0] > max_size[1]: #横が長いディスプレイの場合は縦長の画像を回転させた絵を作る if srcImg.Width < srcImg.Height: srcWidth = srcImg.Height srcHeight = srcImg.Width srcImg.RotateFlip(RotateFlipType.Rotate90FlipNone); else: #縦が長いディスプレイの場合は横長の画像を回転させた絵を作る if srcImg.Width > srcImg.Height: srcWidth = srcImg.Height srcHeight = srcImg.Width srcImg.RotateFlip(RotateFlipType.Rotate90FlipNone); # 画面より画像が小さい場合はスケーリングしない if max_size[0] < srcWidth or max_size[1] < srcHeight: scalerate = min(max_size[0]/srcWidth,max_size[1]/srcHeight) destWidth = int(round(scalerate * srcWidth)) destHeight = int(round(scalerate * srcHeight)) else: destWidth = srcWidth destHeight = srcHeight destImg = Bitmap(destWidth,destHeight) grphics = Graphics.FromImage(destImg) grphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic grphics.DrawImage(srcImg,0,0,destWidth,destHeight) if format == Imaging.ImageFormat.Jpeg: destImg.Save(dstFileName,jpgEncoder[0], jpgEncoder[1]) else: destImg.Save(dstFileName,format) destImg.Dispose() else: # 画面に収まらない or BMP/TIFF形式以外の場合は、再圧縮する必要ないので普通のコピーにする shutil.copy(srcFileName,dstFileName) srcImg.Dispose() def copyImageTree(targetList,progress): jpgEncoder = createJpegEncoder() for target in targetList: srcname = target[0] dstname = target[1] try: makeOutputDirectory(os.path.dirname(dstname)) shrinkImage(srcname,dstname,jpgEncoder) progress.addCounter(1) progress.show() except (IOError, os.error), why: print("Cant' copy",srcname,'to',dstname,':',str(why)) def createTargetImagePath( path,targetBaseDirectory ): targetPath = [] names = os.listdir(path) targetDirectory = targetBaseDirectory for name in names: srcname = os.path.join(path, name) try: if os.path.isdir(srcname): targetDirectory = os.path.join(targetBaseDirectory, name) targetPath += createTargetImagePath( srcname,targetDirectory ) else: root, ext = os.path.splitext(srcname) if isTarget(ext) == True: targetPath.append((srcname,os.path.join(targetDirectory,DEST_PREFIX + name))) except (IOError, os.error), why: print("Can't copy",srcname,':',str(why)) return (targetPath) if __name__=='__main__': #引数がおかしい場合 if len(sys.argv) < 2: print('Usage: # Python ',sys.argv[0],' [SouceImageDirectoryPath]...') raw_input() quit() targetPathList = [] for x in range(1,len(sys.argv)): sourcePath = os.path.dirname(sys.argv[x] + '\\') if os.path.isdir(sourcePath) == False: #存在しないPathを指定した場合 print('[',sourcePath,']: Src directory does not exist.') raw_input() quit() elif os.path.isdir(TARGET_DIR) == False: #存在しないPathを指定した場合 print('[',TARGET_DIR,']: Dest directory does not exist.') raw_input() quit() elif sourcePath == TARGET_DIR: #入力先と出力先が同じ場合 print('The input destination is the same as the output destination.') raw_input() quit() else: targetPathList += createTargetImagePath(sourcePath,(TARGET_DIR + '\\' + os.path.basename(sourcePath))) if len(targetPathList) == 0: print('File does not exist.') quit() progress = ProgressBar(len(targetPathList)) copyImageTree(targetPathList,progress)
このプログラム[記事]で、縮小できない画像があり、「decoder tiff_ccitt not available」というエラーをはいていた。
ちょっと調べてみると、TIFFの圧縮形式には以下があり、PILは全部を扱えないようだ。
とりあえずテストした感じ、LZWは扱えそう。
MSからPythonをVSで開発できるようにするプラグインがリリース。
CPythonだけでなくIronPythonとかもできるようだ。
さっそく、会社に入れてみよう。