ワイヤレスマウス
マウス2つ買った。安い割にどちらも快適で困る。
- BUFFALO BSMLW05N / ¥1,580 / セルスタ・R / isbn:4950190131519
- PMQ-001 / ¥799 / あきばお〜6号店 / isbn:4528483047757
PMQ-001は説明書が全くなく電池の入れ方がわからなかったが、以下に載っていたので分解しなくて済んだ。
http://store.shopping.yahoo.co.jp/akibaoo/4528483047757.html
サムネイル画像作成
Windowsの力を借りればいろんな種類のファイルのサムネイル画像を簡単に作ることができるのね。Officeとかソフトが入ってないと作れないと思うけど…。
あと、これも入れてます。
http://code.msdn.microsoft.com/WindowsAPICodePack
using System; using System.IO; using System.Drawing; using System.Drawing.Imaging; using Microsoft.WindowsAPICodePack.Shell; namespace MkThumbs { class MkThumbs { static void Main(string[] args) { string dir = args.Length < 1 ? "." : args[0]; foreach (string file in Directory.GetFiles(dir)) { string fullPath = Path.GetFullPath(file); using (ShellObject shObj = ShellObject.FromParsingName(fullPath)) { Bitmap bmp = shObj.Thumbnail.MediumBitmap; bmp.MakeTransparent(Color.Black); bmp.Save(fullPath + ".png", ImageFormat.Png); } } } } }
Googleブック検索を埋め込んでみた
via Inside Google Books: New Features on Google Books
Googleブック検索にいろいろ機能が追加されたみたい。こりゃすごい。
thanks, iframe → Google Gadget コンバータ
adosql.js
データベースに ADO で接続して SQL を実行できるコンソールスクリプトを作った。通常はデータベース付属のツールがインストールされていると思うので必要ないと思われます。
Microsoft Access にはこんな感じで接続する。接続文字列変えればいろんなデータベースに接続できる、きっと。
C:\Temp\db>cscript //nologo adosql.js -c "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=user.mdb" ? select ...
行頭「!」入力は、eval してその結果を表示する。
? !1 + 2 3
行頭「$」入力は、コマンド実行。
? $cmd /c dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:37 <DIR> . 2009/06/15 17:37 <DIR> .. 2009/06/15 16:58 5,499 adosql.js 1 個のファイル 5,499 バイト 2 個のディレクトリ 6,996,881,408 バイトの空き領域
「quit」で終了。
? quit
おまけ機能で Microsoft ODBC Desktop Database Drivers を簡単に使えるようにしてある。
引数にフォルダを指定した場合、そのフォルダのテキストファイルがテーブルとなる。
C:\Temp\db>cscript //nologo adosql.js .
この場合、テーブルがカレントフォルダの tbl1.csv ファイルとして作成される。
? create table tbl1.csv (name varchar, age integer) ? $cmd /c dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:43 <DIR> . 2009/06/15 17:43 <DIR> .. 2009/06/15 16:58 5,499 adosql.js 2009/06/15 17:43 115 schema.ini 2009/06/15 17:43 14 tbl1.csv 3 個のファイル 5,628 バイト 2 個のディレクトリ 6,996,881,408 バイトの空き領域
普通に SQL を発行できる。
? insert into tbl1.csv values('Taro', 28) ? select * from tbl1.csv #>name,age 1>Taro,28
作成された tbl1.csv はこんなんなっている。普通の CSV ファイル。
? $cmd /c type tbl1.csv "name","age" "Taro",28
なんか schema.ini ファイルも作成されるが基本気にしない。
? $cmd /c type schema.ini [tbl1.csv] ColNameHeader=True CharacterSet=932 Format=CSVDelimited Col1=name Char Width 255 Col2=age Integer
schema.ini がなくてもそれなりに動作するので、既存の CSV ファイルも操作できるよ。
? $cmd /c echo f1,f2 > tbl9.csv ? $cmd /c echo boo, 256 >> tbl9.csv ? $cmd /c echo foo, 128 >> tbl9.csv ? select * from tbl9.csv where f1 = 'boo' #>f1,f2 1>boo,256 ? quit C:\Temp\db>
引数に xls ファイルを指定した場合、そのファイルがデータベースになる感じ。
C:\Temp\db>cscript //nologo adosql.js db.xls ? $cmd /c dir db.xls ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:53 9,216 db.xls 1 個のファイル 9,216 バイト 0 個のディレクトリ 7,117,938,688 バイトの空き領域 ? create table tbl2 (name varchar, age integer) ? insert into tbl2 values('Jiro', 24) ? select * from tbl2 #>name,age 1>Jiro,24 ? update tbl2 set age = 25 where name = 'Jiro' ? select * from tbl2 #>name,age 1>Jiro,25
引数には mdb ファイルも指定できる。
C:\Temp\db>cscript //nologo adosql.js db3.mdb C:\Temp\db\adosql.js(40, 5) Microsoft OLE DB Provider for ODBC Drivers: [Microso ft][ODBC Microsoft Access Driver] ファイル '(不明)' が見つかりませんでした。
けど、ドライバは xls ファイルとは違い自動で mdb ファイルを作成してくれない。
なので、AdoDbUtil オブジェクトに createMdb() を定義してあるのでこれを使う。
C:\Temp\db>cscript //nologo adosql.js . ? !AdoDbUtil [object Object] ? !AdoDbUtil.createMdb('db3.mdb') ? $cmd /c dir db3.mdb ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:55 65,536 db3.mdb 1 個のファイル 65,536 バイト 0 個のディレクトリ 6,996,807,680 バイトの空き領域 ? exit C:\Temp\db>cscript //nologo adosql.js db3.mdb ? create table tbl3 (name varchar, age integer) ? insert into tbl3 values('Taro', 28) ? insert into tbl3 values('Jiro', 25) ? insert into tbl3 values('Sabu', 21) ? delete from tbl3 ? $cmd /c dir db3.mdb ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:58 77,824 db3.mdb 1 個のファイル 77,824 バイト 0 個のディレクトリ 6,996,791,296 バイトの空き領域 ? quit
ついでに mdb を圧縮する compactMdb() も定義してある。
C:\Temp\db>cscript //nologo adosql.js . ? !AdoDbUtil.compactMdb('db3.mdb') ? $cmd /c dir db3.mdb ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:59 73,728 db3.mdb 1 個のファイル 73,728 バイト 0 個のディレクトリ 6,996,795,392 バイトの空き領域 ? quit
JDK6 で追加になったと思われるクラス一覧
ほんとは 7 のを知りたかったんだけど、まだ実装途中っぽいので 6 で。結構知らないのあるなー。
1.6: - java.awt.Desktop - java.awt.GridBagLayoutInfo - java.awt.LinearGradientPaint - java.awt.MultipleGradientPaint - java.awt.RadialGradientPaint - java.awt.SplashScreen - java.awt.SystemTray - java.awt.TrayIcon - java.awt.Component.BaselineResizeBehavior - java.awt.Desktop.Action - java.awt.Dialog.ModalExclusionType - java.awt.Dialog.ModalityType - java.awt.MultipleGradientPaint.ColorSpaceType - java.awt.MultipleGradientPaint.CycleMethod - java.awt.TrayIcon.MessageType - java.awt.font.LayoutPath - java.awt.geom.Path2D - java.awt.geom.Path2D.Double - java.awt.geom.Path2D.Float - java.beans.ConstructorProperties - java.io.Console - java.io.IOError - java.lang.management.LockInfo - java.lang.management.MonitorInfo - java.net.CookiePolicy - java.net.CookieStore - java.net.CookieManager - java.net.HttpCookie - java.net.IDN - java.net.InterfaceAddress - java.security.Policy.Parameters - java.security.PolicySpi - java.security.URIParameter - java.sql.NClob - java.sql.RowId - java.sql.SQLXML - java.sql.Wrapper - java.sql.ClientInfoStatus - java.sql.RowIdLifetime - java.sql.SQLClientInfoException - java.sql.SQLDataException - java.sql.SQLFeatureNotSupportedException - java.sql.SQLIntegrityConstraintViolationException - java.sql.SQLInvalidAuthorizationSpecException - java.sql.SQLNonTransientConnectionException - java.sql.SQLNonTransientException - java.sql.SQLRecoverableException - java.sql.SQLSyntaxErrorException - java.sql.SQLTimeoutException - java.sql.SQLTransactionRollbackException - java.sql.SQLTransientConnectionException - java.sql.SQLTransientException - java.text.Normalizer - java.text.Normalizer.Form - java.text.spi.BreakIteratorProvider - java.text.spi.CollatorProvider - java.text.spi.DateFormatProvider - java.text.spi.DateFormatSymbolsProvider - java.text.spi.DecimalFormatSymbolsProvider - java.text.spi.NumberFormatProvider - java.util.Deque - java.util.NavigableMap - java.util.NavigableSet - java.util.AbstractMap.SimpleEntry - java.util.AbstractMap.SimpleImmutableEntry - java.util.ArrayDeque - java.util.ResourceBundle.Control - java.util.ServiceLoader - java.util.ServiceConfigurationError - java.util.concurrent.BlockingDeque - java.util.concurrent.ConcurrentNavigableMap - java.util.concurrent.RunnableFuture - java.util.concurrent.RunnableScheduledFuture - java.util.concurrent.ConcurrentSkipListMap - java.util.concurrent.ConcurrentSkipListSet - java.util.concurrent.LinkedBlockingDeque - java.util.concurrent.locks.AbstractOwnableSynchronizer - java.util.concurrent.locks.AbstractQueuedLongSynchronizer - java.util.spi.CurrencyNameProvider - java.util.spi.LocaleNameProvider - java.util.spi.LocaleServiceProvider - java.util.spi.TimeZoneNameProvider - java.util.zip.DeflaterInputStream - java.util.zip.InflaterOutputStream - java.util.zip.ZipError - javax.activation.CommandObject - javax.activation.DataContentHandler - javax.activation.DataContentHandlerFactory - javax.activation.DataSource - javax.activation.ActivationDataFlavor - javax.activation.CommandInfo - javax.activation.CommandMap - javax.activation.DataHandler - javax.activation.FileDataSource - javax.activation.FileTypeMap - javax.activation.MailcapCommandMap - javax.activation.MimeType - javax.activation.MimeTypeParameterList - javax.activation.MimetypesFileTypeMap - javax.activation.URLDataSource - javax.activation.MimeTypeParseException - javax.activation.UnsupportedDataTypeException - javax.annotation.processing.Completion - javax.annotation.processing.Filer - javax.annotation.processing.Messager - javax.annotation.processing.ProcessingEnvironment - javax.annotation.processing.Processor - javax.annotation.processing.RoundEnvironment - javax.annotation.processing.AbstractProcessor - javax.annotation.processing.Completions - javax.annotation.processing.FilerException - javax.annotation.processing.SupportedAnnotationTypes - javax.annotation.processing.SupportedOptions - javax.annotation.processing.SupportedSourceVersion - javax.lang.model.SourceVersion - javax.lang.model.element.AnnotationMirror - javax.lang.model.element.AnnotationValue - javax.lang.model.element.AnnotationValueVisitor - javax.lang.model.element.Element - javax.lang.model.element.ElementVisitor - javax.lang.model.element.ExecutableElement - javax.lang.model.element.Name - javax.lang.model.element.PackageElement - javax.lang.model.element.TypeElement - javax.lang.model.element.TypeParameterElement - javax.lang.model.element.VariableElement - javax.lang.model.element.ElementKind - javax.lang.model.element.Modifier - javax.lang.model.element.NestingKind - javax.lang.model.element.UnknownAnnotationValueException - javax.lang.model.element.UnknownElementException - javax.lang.model.type.ArrayType - javax.lang.model.type.DeclaredType - javax.lang.model.type.ErrorType - javax.lang.model.type.ExecutableType - javax.lang.model.type.NoType - javax.lang.model.type.NullType - javax.lang.model.type.PrimitiveType - javax.lang.model.type.ReferenceType - javax.lang.model.type.TypeMirror - javax.lang.model.type.TypeVariable - javax.lang.model.type.TypeVisitor - javax.lang.model.type.WildcardType - javax.lang.model.type.TypeKind - javax.lang.model.type.MirroredTypeException - javax.lang.model.type.MirroredTypesException - javax.lang.model.type.UnknownTypeException - javax.lang.model.util.Elements - javax.lang.model.util.Types - javax.lang.model.util.AbstractAnnotationValueVisitor6 - javax.lang.model.util.AbstractElementVisitor6 - javax.lang.model.util.AbstractTypeVisitor6 - javax.lang.model.util.ElementFilter - javax.lang.model.util.ElementKindVisitor6 - javax.lang.model.util.ElementScanner6 - javax.lang.model.util.SimpleAnnotationValueVisitor6 - javax.lang.model.util.SimpleElementVisitor6 - javax.lang.model.util.SimpleTypeVisitor6 - javax.lang.model.util.TypeKindVisitor6 - javax.management.DescriptorRead - javax.management.ImmutableDescriptor - javax.management.JMX - javax.management.StandardEmitterMBean - javax.management.DescriptorKey - javax.management.MXBean - javax.management.loading.MLetContent - javax.management.openmbean.CompositeDataView - javax.management.openmbean.CompositeDataInvocationHandler - javax.management.remote.JMXAddressable - javax.net.ssl.SSLParameters - javax.script.Bindings - javax.script.Compilable - javax.script.Invocable - javax.script.ScriptContext - javax.script.ScriptEngine - javax.script.ScriptEngineFactory - javax.script.AbstractScriptEngine - javax.script.CompiledScript - javax.script.ScriptEngineManager - javax.script.SimpleBindings - javax.script.SimpleScriptContext - javax.script.ScriptException - javax.security.auth.login.Configuration.Parameters - javax.security.auth.login.ConfigurationSpi - javax.sql.StatementEventListener - javax.sql.StatementEvent - javax.swing.DefaultRowSorter - javax.swing.DefaultRowSorter.ModelWrapper - javax.swing.GroupLayout - javax.swing.JList.DropLocation - javax.swing.JTable.DropLocation - javax.swing.JTree.DropLocation - javax.swing.LayoutStyle - javax.swing.RowFilter - javax.swing.RowFilter.Entry - javax.swing.RowSorter - javax.swing.RowSorter.SortKey - javax.swing.SwingWorker - javax.swing.TransferHandler.DropLocation - javax.swing.TransferHandler.TransferSupport - javax.swing.DropMode - javax.swing.GroupLayout.Alignment - javax.swing.LayoutStyle.ComponentPlacement - javax.swing.RowFilter.ComparisonType - javax.swing.SortOrder - javax.swing.SwingWorker.StateValue - javax.swing.event.RowSorterListener - javax.swing.event.RowSorterEvent - javax.swing.event.RowSorterEvent.Type - javax.swing.filechooser.FileNameExtensionFilter - javax.swing.table.TableRowSorter - javax.swing.table.TableStringConverter - javax.swing.text.JTextComponent.DropLocation - javax.tools.Diagnostic - javax.tools.DiagnosticListener - javax.tools.FileObject - javax.tools.JavaCompiler - javax.tools.JavaFileManager - javax.tools.JavaFileObject - javax.tools.OptionChecker - javax.tools.StandardJavaFileManager - javax.tools.Tool - javax.tools.DiagnosticCollector - javax.tools.ForwardingFileObject - javax.tools.ForwardingJavaFileManager - javax.tools.ForwardingJavaFileObject - javax.tools.SimpleJavaFileObject - javax.tools.ToolProvider - javax.tools.StandardLocation - javax.xml.crypto.AlgorithmMethod - javax.xml.crypto.Data - javax.xml.crypto.KeySelectorResult - javax.xml.crypto.NodeSetData - javax.xml.crypto.URIDereferencer - javax.xml.crypto.URIReference - javax.xml.crypto.XMLCryptoContext - javax.xml.crypto.XMLStructure - javax.xml.crypto.KeySelector - javax.xml.crypto.OctetStreamData - javax.xml.crypto.KeySelectorException - javax.xml.crypto.MarshalException - javax.xml.crypto.NoSuchMechanismException - javax.xml.crypto.URIReferenceException - javax.xml.crypto.dom.DOMURIReference - javax.xml.crypto.dom.DOMCryptoContext - javax.xml.crypto.dom.DOMStructure - javax.xml.crypto.dsig.CanonicalizationMethod - javax.xml.crypto.dsig.DigestMethod - javax.xml.crypto.dsig.Manifest - javax.xml.crypto.dsig.Reference - javax.xml.crypto.dsig.SignatureMethod - javax.xml.crypto.dsig.SignatureProperties - javax.xml.crypto.dsig.SignatureProperty - javax.xml.crypto.dsig.SignedInfo - javax.xml.crypto.dsig.Transform - javax.xml.crypto.dsig.XMLObject - javax.xml.crypto.dsig.XMLSignature - javax.xml.crypto.dsig.XMLSignContext - javax.xml.crypto.dsig.XMLValidateContext - javax.xml.crypto.dsig.TransformService - javax.xml.crypto.dsig.XMLSignatureFactory - javax.xml.crypto.dsig.TransformException - javax.xml.crypto.dsig.XMLSignatureException - javax.xml.crypto.dsig.dom.DOMSignContext - javax.xml.crypto.dsig.dom.DOMValidateContext - javax.xml.crypto.dsig.keyinfo.KeyInfo - javax.xml.crypto.dsig.keyinfo.KeyName - javax.xml.crypto.dsig.keyinfo.KeyValue - javax.xml.crypto.dsig.keyinfo.PGPData - javax.xml.crypto.dsig.keyinfo.RetrievalMethod - javax.xml.crypto.dsig.keyinfo.X509Data - javax.xml.crypto.dsig.keyinfo.X509IssuerSerial - javax.xml.crypto.dsig.keyinfo.KeyInfoFactory - javax.xml.crypto.dsig.spec.C14NMethodParameterSpec - javax.xml.crypto.dsig.spec.DigestMethodParameterSpec - javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec - javax.xml.crypto.dsig.spec.TransformParameterSpec - javax.xml.crypto.dsig.spec.ExcC14NParameterSpec - javax.xml.crypto.dsig.spec.HMACParameterSpec - javax.xml.crypto.dsig.spec.XPathFilter2ParameterSpec - javax.xml.crypto.dsig.spec.XPathFilterParameterSpec - javax.xml.crypto.dsig.spec.XPathType - javax.xml.crypto.dsig.spec.XSLTTransformParameterSpec - javax.xml.stream.EventFilter - javax.xml.stream.Location - javax.xml.stream.StreamFilter - javax.xml.stream.XMLEventReader - javax.xml.stream.XMLEventWriter - javax.xml.stream.XMLReporter - javax.xml.stream.XMLResolver - javax.xml.stream.XMLStreamConstants - javax.xml.stream.XMLStreamReader - javax.xml.stream.XMLStreamWriter - javax.xml.stream.XMLEventFactory - javax.xml.stream.XMLInputFactory - javax.xml.stream.XMLOutputFactory - javax.xml.stream.XMLStreamException - javax.xml.stream.FactoryConfigurationError - javax.xml.stream.events.Attribute - javax.xml.stream.events.Characters - javax.xml.stream.events.Comment - javax.xml.stream.events.DTD - javax.xml.stream.events.EndDocument - javax.xml.stream.events.EndElement - javax.xml.stream.events.EntityDeclaration - javax.xml.stream.events.EntityReference - javax.xml.stream.events.Namespace - javax.xml.stream.events.NotationDeclaration - javax.xml.stream.events.ProcessingInstruction - javax.xml.stream.events.StartDocument - javax.xml.stream.events.StartElement - javax.xml.stream.events.XMLEvent - javax.xml.stream.util.XMLEventAllocator - javax.xml.stream.util.XMLEventConsumer - javax.xml.stream.util.EventReaderDelegate - javax.xml.stream.util.StreamReaderDelegate - javax.xml.transform.stax.StAXResult - javax.xml.transform.stax.StAXSource
http://download.java.net/jdk7/binaries/ からげとした JavaDocs から適当に生成しているので正しいかわかりません。
#!/usr/bin/perl use strict; use warnings; use URI; use URI::file; use Web::Scraper; use YAML; my $result = scraper { process '//p/font[@class="FrameItemFont"]/a[@target="packageFrame"]', 'packages[]' => ['@href', sub { scraper { process '//font[@class="FrameItemFont"]/a', 'classes[]' => ['@href', sub { scraper { process '//meta[@name="keywords"]', 'name' => ['@content', sub { s/\s.+// }]; process '//body/p/dl[dt/strong[text()="Since:"]]/dd[1]', 'version' => 'text'; }->scrape($_); }]; }->scrape($_); }]; }->scrape(URI->new('overview-frame.html')->abs(URI::file->cwd)); my $classes = { }; foreach my $package (@{$result->{packages}}) { foreach my $class (@{$package->{classes}}) { my $version = defined $class->{version} ? $class->{version} : '???'; $classes->{$version} = [ ] unless defined $classes->{$version}; push @{$classes->{$version}}, $class->{name}; } } print Dump $classes;
JScript で DateAdd()
計算する。
ijsc> new Date(new Date().getTime() + 3 * 24 * 60 * 60 * 1000) Thu Mar 26 22:07:13 UTC+0900 2009
VBScript 使う。
ijsc> var sc = new ActiveXObject('ScriptControl') ijsc> sc.Language = 'VBScript' VBScript ijsc> sc.AddCode('Function AddDays(days, date):AddDays=DateAdd("d", days, date):End Function') ijsc> new Date(sc.Run('AddDays', 3, new Date().getVarDate())) Thu Mar 26 22:07:40 UTC+0900 2009
.NET 使う。
ijsc> new Date(new ActiveXObject('System.Globalization.JapaneseCalendar').AddDays(new Date().getVarDate(), 3)) Thu Mar 26 22:07:45 UTC+0900 2009
バグ?
あとで調べる、きっと。Windows Vista + Strawberry Perl な環境。
D:\temp>cat zzz.pl use ExtUtils::MakeMaker; WriteMakefile( 'NAME' => 'Foo::Bar' ); D:\temp>perl zzz.pl Writing Makefile for Foo::Bar D:\temp>grep -n @ARGV Makefile 210:ECHO = $(ABSPERLRUN) -l -e "print qq{{@ARGV}" -- 211:ECHO_N = $(ABSPERLRUN) -e "print qq{{@ARGV}" -- 214:MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e "install({{@ARGV}, '$(VERBINST)', 0, '$(UNINST)');" -- 787: $(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e "pm_to_blib({{@ARGV}, '$(INST_LIB)\auto', '$(PM_FILTER)')" -- \ D:\temp>
とりあえず、{{@ARGV} を {@ARGV} にすれば動く。