ラベル 技術情報 の投稿を表示しています。 すべての投稿を表示
ラベル 技術情報 の投稿を表示しています。 すべての投稿を表示

2011年8月9日火曜日

【java】JDialogのsetModal(boolean)とshow()

JDialogのsetModal(boolean)とshow()の関係。
setModal(true)の後にshow()するとJDialog呼び元の画面が触れなくなる、だけではなく
処理もshow()のところで停止する。

逆にsetModal(false)の後にshow()すると呼び元の画面は触れるし、呼び元の処理もそのまま進む。

まあ、当たり前なのかもしれないけど。

Modal=true
⇒呼び元触れない
処理止まる。

Modal=false
⇒呼び元触れる
処理進む。

Modal=falseの時はスレッドが別になるみたい。
ここら辺はいじる時は、一応意識しておいた方が良さそう。

2011年7月5日火曜日

素因数分解

プロジェクトオイラーの第5問解く前に素因数分解しないといけなさそうなので、とりあえず素因数分解の処理だけ書いてみました。

1~10の整数の素因数分解した結果リストを表示

【ソース】
object soinsubunkai{


 def main(args:Array[String]) :Unit = { 
  println((1 to 10).toList.map(getSoinsu(_)))
 }


 def soinsu(lst:List[Int],moto:Int,waru:Int):List[Int] = 
  if(moto>waru) {if (moto%waru==0) soinsu(lst:+waru,moto/waru,waru) 
  else soinsu(lst,moto,waru+1)} else {lst:+waru}


 def getSoinsu(num:Int):List[Int] = 
  if(num>1) soinsu(List(),num,2) else (List())
}




【処理結果】

List(List(), List(2), List(3), List(2, 2), List(5), List(2, 3), List(7), List(2, 2, 2), List(3, 3), List(2, 5))

F#という関数型言語

F#という関数型言語が2009年くらいに発表されたらしいです。

プラットフォームは.NetでC#経験者向けらしい。

http://msdn.microsoft.com/ja-jp/library/dd233154.aspx


.Net Frameworkの強力なライブラリを呼び出すことが可能です!!
関数型に興味のある人はやってみてはいかがでしょうか。

自分は絶対に触らないけど…

CodeZineのある記事


C#たんと学ぶ/わりと硬派なソフトウェア開発講座


http://codezine.jp/article/detail/5696

キャラのやり取りが何というか、ネタが痛いというか、狙いすぎというか、JOJO過ぎるというか…

ねらーかよと言いたくなるような内容でした。

2011年6月26日日曜日

オイラープロジェクトを解く~Project Euler Problem4 数字の回文?

クリアーo(´д`)o
You are the 87527th person to have solved this problem.

ミスりまくった。問題良く読もう・・・
にしても、なれればループより書くの早いね!

【前提】
Scalaで解く!

【問題】
素因数分解の問題

【解法】
本当は、x*(100 to 999)をフィルターした結果のmaxをリストにして再度maxにしたかったけど、
空っぽのListにはmaxなどのメソッドは使えないらしく、エラーになる。
まあ、ループしてるわけではないのであまり処理速度は変わらない気がするけど・・・

object  euler4 {


//全部展開するのは無駄すぎるので没にしたソース
// def main(args:Array[String]) :Unit 
//  println((100 to 999).toList.map(x=>(100 to 999).toList.map(y=>x*y)).flatten.filter(x=>checkKaisu(x)).max)
// def chekDigit(lst:List[Char]) :List[Char] = 
//   if(lst.length > 1 && lst.head==lst.last) chekDigit(lst.init.tail) else lst
// def checkKaisu(num:Long) :Boolean =
//      if(chekDigit(num.toString.toCharArray.toList).length < 2) true else false


def main(args:Array[String]) :Unit =
   println((100 to 999).toList.map(x=>(100 to 999).toList.map(y=>x*y).filter(z=>checkKaisu(z))).flatten.max )
def chekDigit(lst:List[Char]) :List[Char] = 
   if(lst.length > 1 && lst.head==lst.last) chekDigit(lst.init.tail) else lst
def checkKaisu(num:Long) :Boolean= 
  if(chekDigit(num.toString.toCharArray.toList).length < 2) true else false
}

2011年6月14日火曜日

Eclipseでandroidを久しぶりに開発するときのエラー

久しぶりにandroidをeclipseで開発しようとすると、エラーで以下のようなメッセージが表示される。
Error generating final archive: Debug Certificate expired on 10/12/22 0:30


【対処法】※Vistaの場合
1.C:\Users\xxxx\.android配下にある"debug.keystore"を削除する。
2.プロジェクトのクリーンを行う。

まっっっったく意味が分からんかった・・・

2011年6月10日金曜日

オイラープロジェクトを解く~Project Euler Problem3 素因数分解

クリアーo(´д`)o
You are the 92046th person to have solved this problem.

一発で解けた・・・良かった。
でも、もっと綺麗にかけないものか・・・

【前提】
Scalaで解く!

【問題】
素因数分解の問題
http://projecteuler.net/index.php?section=problems&id=3

【解法】

object  euler3 {
def main(args:Array[String]) :Unit = println(warikire(600851475143L,2))


//割り切れるかどうか繰り返し判定していく関数
def warikire(i:Long,k:Long):Long={
if(i>k) { 
if (i%k==0) 
{
println(k)
warikire(i/k,k)
} else {
warikire(i,k+1)
}
}
else k
}
}

2011年6月9日木曜日

オイラープロジェクトを解く~Project Euler Problem2

クリアーo(´д`)o
You are the 確認し損ねた…th person to have solved this problem.

【前提】
Scalaで解く!

【問題】
http://projecteuler.net/index.php?section=problems&id=2

【解法】

object euler2 {
  def main(args : Array[String]) : Unit =
  {
   println(fibonacci(4000000).map(x=>if(gusu(x)) x else 0).sum)
  }
  def fibonacci(max:Int) :List[Int]= {
   addNext(List(1,2),max)
  }
  /**
   * リストにリストの最後から2番目と最後の数値を足した値を返す。
   */
  def addNext(lst : List[Int],max :Int) :List[Int] =
    if((lst.init.last + lst.last) < max) {addNext(lst :+ (lst.init.last + lst.last),max)} else {lst}
 
  def gusu(i:Int)=i/2==i.toDouble/2
 
}

2011年6月3日金曜日

フィボナッチ数の偶数番目の項の合計値を求める。

Project Euler Problem1 の問題を読み間違えてしまった・・・
もったいないのでメモ



Scalaでフィボナッチ数の偶数番目の項の合計値を求める。
※ほんとは偶数の項の合計を求める・・・o(´д`)o




object euler_2 {
  def main(args : Array[String]) : Unit = 
  {
 println(fibonacciNew(4000000))


 println(fibonacciNew(4000000).sum)
  }
  def fibonacciNew(max:Int):List[Int] = addNextNext(List(2),1,max)
  /**
   * リストに一個飛ばしでフィボナッチ数を追加する。
   */
    def addNextNext(lst : List[Int],before :Int,max :Int) :List[Int] = 
    if((lst.last * 2 + before) < max) {addNextNext(lst :+ (lst.last * 2 + before),lst.last + before ,max)} 
    else {lst}
    
}

フィボナッチ数の求め方

Scalaでフィボナッチ数を求める

object fibonacci{
  def main(args : Array[String]) : Unit = 
  {
 println(fibonacci(100))
  }
  def fibonacci(max:Int) :List[Int]= {
 addNext(List(1,2),max)
  }
  /**
   * リストにリストの最後から2番目と最後の数値を足した値を返す。
   */
  def addNext(lst : List[Int],max :Int) :List[Int] = 
    if((lst.init.last + lst.last) < max) {addNext(lst :+ (lst.init.last + lst.last),max)} 
    else {lst}
}

2011年5月29日日曜日

EclipseでScala

NetBeansのプラグインがどうしても上手くインストールできなかったので結局Eclipseでやることに。

1.プラグインは以下のパスからダウンロード
http://www.scala-ide.org/

2.オレンジ色のボタンをクリックするとプラグインダウンロード用のサイトパスがクリップボードに
保存される。
あとは、Eclipseのプラグインインストールサイトに追加すればOK

と思ったけど、またエラー・・・

当分、Scalaはテキストで開発します・・・

と、思ったけど最新が2.9Beta版やったので、一個前の安定版をダウンロードしてみることに。

http://download.scala-ide.org/update-1.0.0-milestones-2.8.1.final


そしたら上手くいきました。
とりあえず、eclipseでやっとこう。

NetBeansのインストールとScalaプラグイン

結局このやり方は上手くいきませんでした・・・
Scala CoreプラグインをインストールしようとしたらRats Parser(org-netbeans-libs-xtc-1.15.nbm)のバージョンが1.4だからだめというメッセージが表示されてインストールできない。
インストールしているのは1.5なんですけど。
というわけで調査中

----------------------------------------------------------------------------------
よく考えたらNetBeans使ったことなかった。
Scalaプラグインの精度がEclipseよりいいらしいのでインストールしてみた。
※Scalaの開発環境構築は以下の記事参照
http://baseballandse.blogspot.com/2011/05/scala.html

1.NetBeansの本家サイトからダウンロード
http://netbeans.org/index.html

2.インストーラを実行する。
















3.ライセンス条項、JUnitのインストール共にチェックを付けて実行





















4.IDEのインストールパスと、インストール済みのJDKのパスを確認
















5.インストール開始!
















6.NetBeansをインストールしたら、Scalaのプラグインをダウンロードして解凍する。
http://sourceforge.net/projects/erlybird/files/nb-scala/6.7v1/

7.ダウンロードしたファイルを選んでインストールする。

















プラグインの追加をクリックする。




インストールボタンをクリックする。

以上。

2011年5月24日火曜日

””とwindowsコマンドライン

&(アンパサンド)とwindowsコマンドラインの所で、「&」がパスに入ったせいで誤動作が起こったという事案を載せましたが、こちらもそれにからんだ内容です。

実は、パスを””で囲んでいれば、間に「&」が入っていても単なる文字列として扱われるため前記事のような自称は起きません。

今回使用したバッチでも””を使用していましたが、その使い方が間違っていたことが実は根本的な原因です。

一部を記載します。

↓の場合、カレントフォルダパスが「×××\aaa&bbbの場合」、「×××\aaa」が作成され、その配下にファイルがコピーされます。
---------------------------------------------------
1 SET MOTO1_DIR="H:\MCWEL_COM\MCWEL000\dsp\affair"
2 SET SAKI1_DIR=%~dp0dsp\affair
3 MkDir %SAKI1_DIR%
4 XCOPY "%MOTO1_DIR%" "%SAKI1_DIR%" /S /E /q
---------------------------------------------------

ちなみに、2行目と3行目の間に、ECHO SAKI1_DIR を入れると、ちゃんと「×××\aaa&bbb」が表示されます。
ですが、3,4行目で引数として使われる場合、””がうまく働かないようで、上記のような現象が起こります。

うまくいくパターンはこちらです。みなさまご注意を。
---------------------------------------------------
1 SET MOTO1_DIR="H:\MCWEL_COM\MCWEL000\dsp\affair"
2 SET SAKI1_DIR="%~dp0dsp\affair"
3 MkDir %SAKI1_DIR%
4 XCOPY "%MOTO1_DIR%" %SAKI1_DIR% /S /E /q
---------------------------------------------------

ちなみに、一度やってしまいましたが↓はうまくいきません。
---------------------------------------------------
1 SET MOTO1_DIR="H:\MCWEL_COM\MCWEL000\dsp\affair"
2 SET SAKI1_DIR="%~dp0dsp\affair"
3 MkDir %SAKI1_DIR%
4 XCOPY "%MOTO1_DIR%" "%SAKI1_DIR%" /S /E /q
---------------------------------------------------

理由は、まぬけすぎて恥ずかしくて大きな声では言えません(*ノДノ)

&(アンパサンド)とwindowsコマンドライン

これまで複数のバージョンのPKG適用する場合、出荷資産を入れるフォルダを「000_L08-L10一括」のように「連番+バージョン+"-"+バージョン+"一括"」という名前で作成していました。

が、今回久しぶりに2バージョンの適用だったため、「-」ではなくて「&」だなと思い、
「41_HOPL01&L02一括」と命名しました。

が、一発目の適用で資産退避用のバッチが変な動き(記載と違うパスにコピー)をする・・・(汗)

調査した結果、コピー先が"××\○○\41_HOPL01&L02一括"ではなく、"××\○○\41_HOPL01"になっていました。

原因は、パスが「&」によってぶった切られていたことでした。
Linux系列のコマンドでは"&"は文字列ではなく、コマンドラインの区切りを意味する文字として判定されるようです。

資産持ち帰り用バッチファイルなどで「%~dp0」(コマンドファイルのカレントディレクトリ取得)を使用しているため、バッチ自体は変わらなくても、親フォルダが変わることでこの現象が発生しました。

windowsコマンドでは使ってはいけない恐ろしい文字達がたくさんいますが、こいつは一番強烈ですのでご注意を。
なんせ、普通に動きますからね。見落とす可能性ありです。
検証漏れ(汗)というか、そんな危険な文字は使わないようにしましょう。

ちなみに、ソースの根本的な間違いは””の使い方のミスです。
””でちゃんと囲めばいいじゃんと思った方、ナイスです(・∀・)

2011年5月18日水曜日

windowsコマンド(バッチ)で階層構造の分析を行う

簡単な階層構造をもったファイルを分析して、必要な行を抽出する方法。
普通のプログラムであれば、FORをまわしながら1階層目の文字が見つかったら、2階層目の文字をチェックするという処理にすると思いますが、windowsコマンドではFORを階層化すると遅延環境変数のせいで記載方法が色々めんどくさい。
というわけで、ファイルを解析して必要な部分を切り出し、その中を検索するという方法で該当行を抽出する。
【お題】
以下のようなファイルから、X階層でかつ"a"を含んだ行を抽出する。

【ファイル内容】

Y
abc
def
X
ade
bfg
Z
aef
vhj
【コマンドファイル】

以下のコマンドは
1.Xが何行目に出てくるか調べる。
2.Xまでの行を省いた結果をテキストに出力する。
3.出力したテキストからaが含まれている行を抽出する。
という流れで処理を行っています
--------------------------------------------------------
@ECHO OFF
setlocal enabledelayedexpansion
findstr /N "X" C:\Users\hogehoge\Desktop\test.txt>out.txt
pause
FOR /F "delims=: " %%I IN (out.txt) DO (
SET GYO=%%I
)
ECHO %GYO%行目
pause
FOR /F "skip=%GYO%" %%I IN (C:\Users\n0155\Desktop\test.txt) DO (
ECHO %%I>>out2.txt
)

TYPE out2.txt|FIND "a"
endlocal
pause
--------------------------------------------------------


【出力結果】
ade
aef
この結果をテキストに出力して1行目を取得すればOK。
aの行が複数ある場合は、別で

2011年5月15日日曜日

コマンド(バッチ)ファイルの出力結果を絞る

Windowsコマンドで実行した結果を簡単に加工する方法。
指定した文字の含まれた行を抽出します。
ログファイルの分析とかでよく使うかな。

(コマンド) |FIND "文字列"


【使用例】
○DIRでディレクトリだけ出力したい場合
(コマンド)
DIR |FIND "<DIR>"
(結果)
2011/05/14 00:22 <DIR> Desktop
2010/12/30 14:55 <DIR> Documents
2011/05/07 13:02 <DIR> Downloads
2010/07/15 06:42 <DIR> Favorites




○DIRでディレクトリだけ出力したい場合
(コマンド)
DIR |FIND "<DIR>"
(結果)
2011/05/14 00:22 <DIR> Desktop
2010/12/30 14:55 <DIR> Documents
2011/05/07 13:02 <DIR> Downloads
2010/07/15 06:42 <DIR> Favorites




○テキストファイルの必要な行だけ表示
(コマンド)
TYPE sample.txt |FIND "エラー"
(結果)
○○エラー
△△エラー
□□エラー


応用で、FIND /Vにすると見付かった行数が出るので、
TYPE sample.txt |FIND /V "エラー"で上の例だと「3」が表示されます。

2011年5月11日水曜日

富士通製帳票定義体作成ソフトNETCOBOL

ひょんなことからNetCobolというソフトを使って富士通製のFORMという帳票定義体を編集することになりました。

で、この帳票定義体は、出力項目の一覧(レコード定義)と、帳票の定義(レイアウト)を別で管理しています。
この両データにずれがあるとエラーになってしまうという悲しい仕様なのですが、
帳票の定義に項目を追加した場合に、レコード定義にもその項目を追加する方法がなかなか難しい。

調べたところ以下のサイトにQAが載っていました。

http://software.fujitsu.com/jp/cobol/technical/trouble_answer/abnormal0016.html

【簡単な説明】
レコード定義編集画面で[オプション]-[基本レコードを生成]を実行すると、レイアウトにあってレコード定義にない項目が自動的に一覧に追加される。(同期をとるってこと…?)
ちなみに、レイアウトになくてレコード定義にない項目は自分で削除する必要があります。([編集]メニューから)

また使うかどうかはわからないけど、確実に忘れるな…

2011年5月6日金曜日

Scala 素数判定と√

√nはmath.sqrt(n)とのこと。
これを利用して、素数かどうか判定する関数を作成する。

素数=2以上√n以下の整数で割り切れない自然数(のはず)なので、

割り切れるかどうかを判別する関数を作成。
⇒2以上√nのリストを上記関数でチェックする。
⇒割り切れる数がなければ素数。

-----------------------------------------

//割り切れるかどうか判定する関数
def warikire(i:Int,k:Int)=i/k==i.toDouble/k.toDouble

//素数判定関数
def sosu(i:Int)=(2 to math.sqrt(i).toInt).exists(warikire(i,_))==false

sosu(10)
Boolean = false
sosu(13)
Boolean = true
-----------------------------------------
(a to b)でa以上b以下の整数のリストを取得できる。
このリストに対して、warikire関数を満たすメンバーが存在するかどうかチェックする。
存在しない場合、existsの結果がfalseで帰ってくるので、false==falseとなった場合に、
sosu関数の結果としてtrueを返す。

てな仕組み。

関数型言語、かなり面白い・・・

Scalaで偶数判定

偶数かどうかを判定する関数

-----------------------------------------
(定義)
def gusu(i:Int)=i/2==i.toDouble/2


(使用例)
gusu(4)
res1: Boolean = true


gusu(4)
res2: Boolean = false

-----------------------------------------