kaakaa Blog

この世は極楽 空にはとんぼ

Scalaを触ってみた

社内勉強会用にScalaを触って簡単なアプリを作ってみた(未完成)
kaakaa/DotDispClasspath

ScalaはBetterJavaとして触りやすかった印象。
でもちょっとした時に触るなら、GroovyConsoleが付いてるGroovyかなぁ。

ただ、クラスの種類がJavaよりも多いのは、目的にあった使い分けが出来そうで良さ気。
使いドコロ見極めていきたい。

ParallelCollectionが簡単に使えるのは素晴らしい。

TracLightningのMavenリポジトリにアップロードできない

Gradle Maven Pluginを使ってTracLightningMavenリポジトリにJarをアップロードしようとしてみたところ、アップロード先のディレクトリを用意しておかないとエラーとなった。

build.gradle

apply plugin: 'java'
apply plugin: 'maven'

group = 'org.kaakaa.sample'
archivesBaseName = 'homeSample'
version = '1.0'

repositories {
    mavenCentral()
}

uploadArchives {
    repositories.mavenDeployer {
        repository(url: 'http://192.168.3.10/maven/') {
            authentication(userName: 'admin', password: 'admin')
        }
    }
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.5'

    testCompile 'junit:junit:4.11'
}

アップロード先ディレクトリを作っておかないと。

[vagrant@localhost]/vagrant/dev/gradle/mvn_sample% gradle uploadArchives --info
Starting Build
Settings evaluated using settings file '/vagrant/dev/gradle/mvn_sample/settings.gradle'.
Projects loaded. Root project using build file '/vagrant/dev/gradle/mvn_sample/build.gradle'.
Included projects: [root project 'mvn_sample']
Evaluating root project 'mvn_sample' using build file '/vagrant/dev/gradle/mvn_sample/build.gradle'.
All projects evaluated.
Selected primary task 'uploadArchives'
Tasks to be executed: [task ':compileJava', task ':processResources', task ':classes', task ':jar', task ':uploadArchives']
:compileJava (Thread[main,5,main]) started.
:compileJava
Skipping task ':compileJava' as it is up-to-date (took 1.57 secs).
:compileJava UP-TO-DATE
:compileJava (Thread[main,5,main]) completed. Took 1.704 secs.
:processResources (Thread[main,5,main]) started.
:processResources
Skipping task ':processResources' as it has no source files.
:processResources UP-TO-DATE
:processResources (Thread[main,5,main]) completed. Took 0.014 secs.
:classes (Thread[main,5,main]) started.
:classes
Skipping task ':classes' as it has no actions.
:classes UP-TO-DATE
:classes (Thread[main,5,main]) completed. Took 0.007 secs.
:jar (Thread[main,5,main]) started.
:jar
Skipping task ':jar' as it is up-to-date (took 0.206 secs).
:jar UP-TO-DATE
:jar (Thread[main,5,main]) completed. Took 0.25 secs.
:uploadArchives (Thread[main,5,main]) started.
:uploadArchives
Executing task ':uploadArchives' (up-to-date check took 0.004 secs) due to:
  Task has not declared any outputs.
Publishing configuration: configuration ':archives'
Publishing to org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer@52068591
[ant:null] Deploying to http://192.168.3.10/maven/
Uploading: org/kaakaa/sample/homeSample/1.0/homeSample-1.0.jar to repository remote at http://192.168.3.10/maven/
Transferring 1K from remote
[ant:null] An error has occurred while processing the Maven artifact tasks.
 Diagnosis:

Error deploying artifact 'org.kaakaa.sample:homeSample:jar': Error deploying artifact: Authorization failed: Access denied to: http://192.168.3.10/maven/org/kaakaa/sample/homeSample/1.0/homeSample-1.0.jar

:uploadArchives FAILED
:uploadArchives (Thread[main,5,main]) completed. Took 3.328 secs.

FAILURE: Build failed with an exception.

  What went wrong:
Execution failed for task ':uploadArchives'.
> Could not publish configuration 'archives'
   > Error deploying artifact 'org.kaakaa.sample:homeSample:jar': Error deploying artifact: Authorization failed: Access denied to: http://192.168.3.10/maven/org/kaakaa/sample/homeSample/1.0/homeSample-1.0.jar

  Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.

BUILD FAILED

Total time: 14.628 secs
Stopped 0 compiler daemon(s).

アップロード先のディレクトリ(%TRAC_HOME%/maven/org/kaakaa/sample/homeSample/1.0/)を作っておくと。

[vagrant@localhost]/vagrant/dev/gradle/mvn_sample% gradle uploadArchives --info
Starting Build
Settings evaluated using settings file '/vagrant/dev/gradle/mvn_sample/settings.gradle'.
Projects loaded. Root project using build file '/vagrant/dev/gradle/mvn_sample/build.gradle'.
Included projects: [root project 'mvn_sample']
Evaluating root project 'mvn_sample' using build file '/vagrant/dev/gradle/mvn_sample/build.gradle'.
All projects evaluated.
Selected primary task 'uploadArchives'
Tasks to be executed: [task ':compileJava', task ':processResources', task ':classes', task ':jar', task ':uploadArchives']
:compileJava (Thread[main,5,main]) started.
:compileJava
Skipping task ':compileJava' as it is up-to-date (took 1.503 secs).
:compileJava UP-TO-DATE
:compileJava (Thread[main,5,main]) completed. Took 1.643 secs.
:processResources (Thread[main,5,main]) started.
:processResources
Skipping task ':processResources' as it has no source files.
:processResources UP-TO-DATE
:processResources (Thread[main,5,main]) completed. Took 0.01 secs.
:classes (Thread[main,5,main]) started.
:classes
Skipping task ':classes' as it has no actions.
:classes UP-TO-DATE
:classes (Thread[main,5,main]) completed. Took 0.006 secs.
:jar (Thread[main,5,main]) started.
:jar
Skipping task ':jar' as it is up-to-date (took 0.201 secs).
:jar UP-TO-DATE
:jar (Thread[main,5,main]) completed. Took 0.244 secs.
:uploadArchives (Thread[main,5,main]) started.
:uploadArchives
Executing task ':uploadArchives' (up-to-date check took 0.004 secs) due to:
  Task has not declared any outputs.
Publishing configuration: configuration ':archives'
Publishing to org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer@6ebcf6bf
[ant:null] Deploying to http://192.168.3.10/maven/
Uploading: org/kaakaa/sample/homeSample/1.0/homeSample-1.0.jar to repository remote at http://192.168.3.10/maven/
Transferring 1K from remote
Uploaded 1K
[INFO] Retrieving previous metadata from remote
[INFO] repository metadata for: 'artifact org.kaakaa.sample:homeSample' could not be found on repository: remote, so will be created
[INFO] Uploading repository metadata for: 'artifact org.kaakaa.sample:homeSample'
[INFO] Uploading project information for homeSample 1.0
:uploadArchives (Thread[main,5,main]) completed. Took 3.839 secs.

BUILD SUCCESSFUL

Total time: 14.936 secs
Stopped 0 compiler daemon(s).

TracLightning側がディレクトリ作成の許可してないからなのかな?
設定どこだろう。

SVG事始め

SVGについて調べたことまとめ。
Wikiまとめて、動かしてみて、こういうことやりたいな〜程度のまとめ。


動かしたサンプルは下記に。
kaakaa/SVGSample

1年ぶりにアップ。

ルート弾き主体だけどキメが多くて弾いてて楽しい。
歌詞がアレだけど、それも含めて曲として面白いなぁ。
聖飢魔IIはバンドでやる前までは蝋人形の館と閣下のキャラで色物と決めつけて特に聴く気も起きなかったけど、普通に良いバンド。


iMovieがアップデートされてたけど、UIがシンプルになって使いやすくなってた印象だけど、ファイル出力時の選択肢が少なくなったような…。
普通にファイル出力すると最小解像度でも100MB近くいって困った。

iTunesに出力でm4a出力したら30MBちょいになったからなんとかなった。

lazyloadっぽいもの

kaakaa/PPTGallery
シコシコ改修中。

スライドのページが多い時に最初に全ての画像を読み込むと重くなりそうなので、lazyload的なのを適用しようとしてみた。

Lazy Load Plugin for jQuery
前から目をつけていたコレを組み込んで見たけど、スクロールでなくjQueryのtoggleで画像を表示させるのが原因か、スライド表示後にウインドウサイズに合わせてリサイズするのが原因か分からないけど、lazyloadさせるべき画像が表示されなかった。

なので、別の方法を探してると下記のエントリを発見。
Lazy loading of images (jquery) without scrolling | Suman Srinivasan's Code Blog

$("img.lazyload").each(function() {
    $(this).attr("src", $(this).attr("original"));
    $(this).removeAttr("original");
});

単純にimgタグのsrcにダミーの画像を表示させておき、画像表示するイベントが起こった所に上のスクリプトを入れて、srcのダミー画像とoriginalに設定していた本来の画像のURLを入れ替えるだけ。

画像表示後の処理とかは実装してあるので、コレだけで十分そう。

CSSのcontentで埋め込んだ画像について、FirefoxとSafar

PowerPoint資料を画像化して、HTMLとしてスライドショー的に閲覧出来るツール
kaakaa/PPTGallery
で、スライドショーにRabbit的な
機能をつけようとしてるんだけど、どうも上手くいかない。

FireFoxではウサギとカメが表示されるけど、その他のChrome/Safari/IE軒並みダメ。

ウサギとカメに関わる部分のコードは下記。

...
    <div id='track'>
      <div>
        <img id='rabbit' style='display:none' alt='rabbit'>
      </div>
      <div>
        <img id='turtle' style='display:none' alt='turtle'>
      </div>
    </div>
...
#track{
  z-index: 50;
}
#rabbit, #turtle{
  position: fixed;
  top: 93%;
  left: 2%;
}
#rabbit::after{
  content: url("./rabbit.svg");
}
#turtle::after{
  content: url("./turtle.svg");
}

ウサギとカメをスタートさせるボタンを押すと、jsで走りだすように処理してるんだけど、Safari等では領域は確保されているものの画像が表示されない。


FireFox(見難いけど左下の方にいます)

Safari

(altで指定したテキストが走る特異な光景)


ちょろちょろ調べてみると、どうやらコレで上手く行くのはFireFoxのバグらしい。
css - :after pseudo-element working in FF, but not Safari or Chrome - Stack Overflow

インライン要素であるimgタグに::afterで要素を加えると、インライン要素imgの中にブロック要素のdivが入ってなんやらかんやら。

というわけで、#rabbit/#turtleから::afterを取り除いてみる。

#track{
  z-index: 50;
}
#rabbit, #turtle{
  position: fixed;
  top: 93%;
  left: 2%;
}
#rabbit{
  content: url("./rabbit.svg");
}
#turtle{
  content: url("./turtle.svg");
}

すると今度はSafariは表示されるけど、FireFoxが表示されない。


FireFox

Safari


これはFireFoxがimgタグについてCSSのcontentを許容していないという仕様だからっぽい。
html - content url is not working in Firefox - Stack Overflow

解決方法は::before/::afterをつけろと…スタートに逆戻り。


結局は::before/::afterつけても付ける対象がブロック要素なら問題なさそうなので、imgタグをやめてdivタグに変更したらFireFoxでもSafariでも動くようになりました。

...
    <div id='track'>
      <div id='rabbit' style='display:none' alt='rabbit'>
      <div id='turtle' style='display:none' alt='turtle'>
    </div>
...
#track{
  z-index: 50;
}
#rabbit, #turtle{
  position: fixed;
  top: 93%;
  left: 2%;
}
#rabbit::after{
  content: url("./rabbit.svg");
}
#turtle::after{
  content: url("./turtle.svg");
}

明日確認してみるけどIEは他の問題で表示されなさそうだなぁ…。

ぼやき

眠れないので過去のエントリをザラザラ見てた。

昔は結構いろいろ書いてたなぁ〜。
何も分からなかったから、とにかく何でも書いてたんだと思う。

最近は何か書こうとしても「アレのことも調べておかなきゃ」「コレも試してからじゃないと」という気持ちが出てきて、だんだん書く気が無くなって、気付いたら新しいことやり始めてるってのが多い気がする。
いろいろ知識付けて立派な記事書くのも大事だけど、そこに囚われすぎてアウトプットがなくなっていくのはダメだなぁ…

たまに数年前に書いた記事へのトラックバックはてブが付いたりするし、自分としても何かを思い返すための良いネタになるだろうし。というか今読み返してみて、なんか新鮮な気持ちになったし。
それに、読み返す前は「書き始めた頃よりはいろいろ勉強して知識ついたし、少しはまともな事できるようになってんだろー」とか思ってたけど、昔とそれほど変わってない気がした。
薄々は感じてたけど成長してないなー

あまり考えず、もう少し気軽にアウトプットしていこう。昔は音楽の記事も結構書いてたみたいだし、そこらへんなら感想垂れ流しで楽だろうから、そこらへんも含めて。
明確な目標立てるとやらなくなりそうなので、これぐらいの感じで。

社内勉強会 - 実践プログラミングDSL


実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ (Programmer’s SELECTION)

実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ (Programmer’s SELECTION)

を読んだまとめ。