はてなキーワード: Jarとは
日本語祖語は偏堡(Pianpu)文化の紀元前2700年頃の遼西地区東部もしくはマンチュリア南部の遼河流域に起源があり、
紀元前1500年頃に朝鮮半島北部~中央部のゴングウィリ(Gonggwiri)式土器を介して朝鮮半島南部の無文(Mumun)文化を形成し、
この頃に磨製石器を伴う稲作など灌漑農耕が山東半島から遼東半島経由で朝鮮半島南部へと広がり、
紀元前9世紀に九州北部へと広がり弥生文化の形成に至って、日本列島在来の「縄文語」系統を(北海道を除いてほぼ)やがて駆逐した、とされます(Miyamoto., 2022)。
一方、朝鮮語祖語もマンチュリア南部とその周辺に起源があり、現在の北京付近に位置した、いわゆる戦国の七雄の一国である燕の東方への拡大に圧迫されて朝鮮半島へと移動し、
その考古学的指標は紀元前5世紀頃の粘土帯土器(rolled rim vessel、Jeomtodae)文化になり、やがて朝鮮半島から日本語系統を駆逐した、と指摘されています(Miyamoto., 2022)。
つまり、マンチュリア南部とその周辺から、まず紀元前二千年紀半ばに日本語系統が朝鮮半島へと到来し、その後で九州北部に広がったのに対して、朝鮮語系統は紀元前千年紀半ばに朝鮮半島へ到来した、というわけです。
参考文献:
Cooke NP. et al.(2021): Ancient genomics reveals tripartite origins of Japanese populations. Science Advances, 7, 38, eabh2419.
doi.org/10.1126/sciadv.abh2419
Gakuhari T. et al.(2020): Ancient Jomon genome sequence analysis sheds light on migration patterns of early East Asian populations. Communications Biology, 3, 437.
doi.org/10.1038/s42003-020-01162-2
Gelabert P. et al.(2022): Northeastern Asian and Jomon-related genetic structure in the Three Kingdoms period of Gimhae, Korea. Current Biology, 32, 15, 3232–3244.E6.
doi.org/10.1016/j.cub.2022.06.004
Harris EE.著(2016)、水谷淳訳『ゲノム革命 ヒト起源の真実』(早川書房、原書の刊行は2015年)
Huang X. et al.(2022): Genomic Insights Into the Demographic History of the Southern Chinese. Frontiers in Ecology and Evolution, 10:853391.
doi.org/10.3389/fevo.2022.853391
Kanzawa-Kiriyama H. et al.(2019): Late Jomon male and female genome sequences from the Funadomari site in Hokkaido, Japan. Anthropological Science, 127, 2, 83–108.
Lee DN. et al.(2022): Genomic detection of a secondary family burial in a single jar coffin in early Medieval Korea. American Journal of Biological Anthropology, 179, 4, 585–597.
Mafessoni F. et al.(2020): A high-coverage Neandertal genome from Chagyrskaya Cave. PNAS, 117, 26, 15132–15136.
doi.org/10.1073/pnas.2004944117
Mao X. et al.(2021): The deep population history of northern East Asia from the Late Pleistocene to the Holocene. Cell, 184, 12, 3256–3266.E13.
doi.org/10.1016/j.cell.2021.04.040
Miyamoto K.(2022): The emergence of ‘Transeurasian’ language families in Northeast Asia as viewed from archaeological evidence. Evolutionary Human Sciences, 4, e3.
Mizuno F. et al.(2021): Population dynamics in the Japanese Archipelago since the Pleistocene revealed by the complete mitochondrial genome sequences. Scientific Reports, 11, 12018.
doi.org/10.1038/s41598-021-91357-2
Ning C. et al.(2020): Ancient genomes from northern China suggest links between subsistence changes and human migration. Nature Communications, 11, 2700.
doi.org/10.1038/s41467-020-16557-2
Petr M. et al.(2020): The evolutionary history of Neanderthal and Denisovan Y chromosomes. Science, 369, 6511, 1653–1656.
doi.org/10.1126/science.abb6460
Robbeets M. et al.(2021): Triangulation supports agricultural spread of the Transeurasian languages. Nature, 599, 7886, 616–621.
doi.org/10.1038/s41586-021-04108-8
Sato T. et al.(2021): Whole-Genome Sequencing of a 900-Year-Old Human Skeleton Supports Two Past Migration Events from the Russian Far East to Northern Japan. Genome Biology and Evolution, 13, 9, evab192.
Scally A. et al.(2012): Insights into hominid evolution from the gorilla genome sequence. Nature, 483, 7388, 169–175.
Sikora M. et al.(2019): The population history of northeastern Siberia since the Pleistocene. Nature, 570, 7760, 182–188.
doi.org/10.1038/s41586-019-1279-z
Tian Z. et al.(2022): Triangulation fails when neither linguistic, genetic, nor archaeological data support the Transeurasian narrativea. bioRxiv.
doi.org/10.1101/2022.06.09.495471
Vallini L. et al.(2022): Genetics and Material Culture Support Repeated Expansions into Paleolithic Eurasia from a Population Hub Out of Africa. Genome Biology and Evolution, 14, 4, evac045.
Wang CC. et al.(2021): Genomic insights into the formation of human populations in East Asia. Nature, 591, 7850, 413–419.
doi.org/10.1038/s41586-021-03336-2
Wang K. et al.(2023): Middle Holocene Siberian genomes reveal highly connected gene pools throughout North Asia. Current Biology, 33, 3, 423–433.E5.
doi.org/10.1016/j.cub.2022.11.062
Watanabe Y, and Ohashi J.(2023): Modern Japanese ancestry-derived variants reveal the formation process of the current Japanese regional gradations. iScience, 26, 3, 106130.
doi.org/10.1016/j.isci.2023.106130
安達登、神澤秀明、藤井元人、清家章(2021)「磯間岩陰遺跡出土人骨のDNA分析」清家章編『磯間岩陰遺跡の研究分析・考察』P105-118
大西秀之(2019)「アイヌ民族・文化形成における異系統集団の混淆―二重波モデルを理解するための民族史事例の検討」『パレオアジア文化史学:人類集団の拡散と定着にともなう文化・行動変化の文化人類学的モデル構築2018年度研究報告書(PaleoAsia Project Series 21)』P11-16
神澤秀明、角田恒雄、安達登、篠田謙一(2021a)「佐賀県唐津市大友遺跡第5次調査出土弥生人骨の核DNA分析」『国立歴史民俗博物館研究報告』第228集P385-393
神澤秀明、角田恒雄、安達登、篠田謙一(2021b)「鳥取県鳥取市青谷上寺遺跡出土弥生後期人骨の核DNA分析」『国立歴史民俗博物館研究報告』第228集P295-307
神澤秀明、角田恒雄、安達登、篠田謙一(2021c)「香川県高松市茶臼山古墳出土古墳前期人骨の核DNA分析」『国立歴史民俗博物館研究報告』第228集P369-373
神澤秀明、角田恒雄、安達登、篠田謙一、斎藤成也(2021d)「島根県出雲市猪目洞窟遺跡出土人骨の核DNA分析」『国立歴史民俗博物館研究報告』第228集P329-340
国武貞克(2021)「中央アジア西部における初期後期旧石器時代(IUP期)石器群の追求と日本列島到来の可能性」『パレオアジア文化史学:アジアにおけるホモ・サピエンス定着プロセスの地理的編年的枠組みの構築2020年度研究報告書(PaleoAsia Project Series 32)』P11-20
上峯篤史(2020)「存否問題のムコウ」『Communication of the Paleo Perspective』第2巻P24-25
佐藤宏之(2013)「日本列島の成立と狩猟採集の社会」『岩波講座 日本歴史 第1巻 原始・古代1』P27-62
篠田謙一(2019)『日本人になった祖先たち DNAが解明する多元的構造』(NHK出版)
篠田謙一、神澤秀明、角田恒雄、安達登(2019)「西北九州弥生人の遺伝的な特徴―佐世保市下本山岩陰遺跡出土人骨の核ゲノム解析―」『Anthropological Science (Japanese Series)』119巻1号P25-43
瀬川拓郎(2019)「アイヌ文化と縄文文化に関係はあるか」北條芳隆編『考古学講義』第2刷(筑摩書房、第1刷の刊行は2019年)P85-102
高宮広土(2014)「奄美・沖縄諸島へのヒトの移動」印東道子編『人類の移動誌』初版第2刷(臨川書店)第3章「日本へ」第5節P182-197
松波雅俊(2020)「ゲノムで検証する沖縄人の由来」斎藤成也編著『最新DNA研究が解き明かす。 日本人の誕生』第2刷(秀和システム)第5章
しかしそういえば、今日は「動かなくなっちまった」が 2 連続したんだなあ。
昼は Visual Studio Code の拡張機能「Markdown Preview Enhanced」の PlantUML 機能が動かなくなっていた事に気づいた。
どうやら plantuml.jar のパスを設定してやる必要があるらしい。
以前までは MPE をインストールしたままの状態で動いていたはずなのに。
まあ設定は簡単。MPE とは別に、同じく VSCode の PlantUML 単独の拡張機能も入れていたので
そいつが抱えている plantuml.jar を MPE でも使うように設定。こちらはすんなりと解決だ。
(いや、待てよ。拡張機能は自動でアップデートされていくもの。そして拡張機能のディレクトリ名にはバージョン番号を含んでいる。
つまり PlantUML 拡張機能のディレクトリ名、いつか気づかないうちに変わっちゃうんじゃないか?解決になってないなこれw)
元アジャイルコーチとして、アメリカのガチの、ガチのシステム開発現場に、言うたらエスノグラフィ(行動観察調査)をしてるようなもんです。三流プログラマながら。
そういうリファレンスみたいなことをお伝えしたら、皆さん(Regional Scrum Gathering Tokyo 2022の参加者)が喜んでくれるかなとか思って、内容を構成しています。
ただ、僕が知っているのはマイクロソフトだけですし、自分の職場だけなので、主語が大きすぎるとか、そう言うのはやめてください。心が傷つくから(笑)
そういうのを踏まえて聞いてください(笑)。全部一次情報で、人から聞いたものではないです。ちょっとだけマネージャ関連のところはマネージャに聞いたところもありますが、基本的には自分が経験したことのみで構成します。
ウォーターフォールは使われていない
まず滝。ウォーターフォールがどれぐらい使われてるのかって話ですけど、これは簡単です。ゼロパーセント、本当に見たことないです。
だからといって本当に素晴らしいスクラムをみんなやってるかっていうと、そうでもない。どれぐらいプロセスに対してマチュア(成熟)かはチーム次第なんだけど、少なくともイテレーティブじゃないのはないし、アップフロントデザイン(開発前の仕様策定)を大量に時間をかけてやってるというのもない。
デザインドキュメントっていうのを書く人もいれば書かない人もいて、書く人が多いですけど、書いても5ページぐらい。
何年か前にサム・グッケンハイマーというDevOpsで有名な人が日本に来たときに日本のお客さんに「ウォーターフォールとアジャイルのメリットデメリットを教えてください」って聞かれて、彼が「ウォーターフォールは全くメリットがないのでやめておきなさい」って言い放って。
私は間違っていた。ごめん。ウォーターフォールは何のメリットも無い - メソッド屋のブログ
分かります。誰も使ってないんだから。やっぱりもうやめといた方がいいですよね、正直話無理があります。
次は、僕のチームがどんな感じで運用されてるかっていうお話をします。
マイクロソフトには統一プロセスとかなくて、基本的にチームをどう回すかはチーム次第なんですよ。でもだいたいみんな似たような感じでやってると思います。
基本的にはスモールチームです。どんな大きなプロジェクトであっても、スモールチームの集まりって感じです。
自分のチームについては、これがよいやり方かは分からないですが、個人商店みたいなもので。「IC」というのはIndividual Contributorですね、開発者。
マネージャからアサインされるバックログが基本的にはふわっとしているので、ICがそれを明確にします。
ICが仕様を自分で明確化して、自分でデザインして、インプリメントする。だからそれぞれがレスポンシビリティを持っていて、それぞれが実装をする。
ただ、同じマイクロサービスをメンテする役割の人みたいなのがいて、それは「Buddy」(バディ)みたいになっていて、僕の場合は例えば「スケールコントローラー」っていうのを開発していますが、スケールコントローラーのチームでバディになってると、質問というかお互いに話が聞きやすい。すぐに答えてくれやすいですね。
他のチームとかになると、ちょっとバリアがあって。やっぱりみんなそれぞれの仕事をやっているので、プライオリティがそれぞれあるんですよ。だから違うチームの人になると意地悪じゃなくて彼らのレスポンスは1日に1回とかになったりするわけですよね。仕方がないことです。
多分このチームの単位はマネージャが管理できる最大以下の人数で構成されてるんじゃないかなと思います。だから本当に自分のチームはそれぞれが個人商店みたいな感じですね。自分でレスポンシビリティを持って自分でやる。それは新人であっても一緒です。
司会)ここでちょっと会場から質問が入りました。このチームというのはどういう単位なんでしょうか。プロダクトの単位なのか、どういう単位なのか。
(右下の点線で囲われたところ)このチームはスケールコントローラをやっていて、(右上の3つのICを指して)このあたりはプラットフォームと言って中の基盤みたいなことをやってたりします。
でも基盤もかなり巨大なので、内部でいくつか分かれているんですけど、同じマネージャが見て、みんなを助けている、という感じですね。
司会)隣のチームと、このチームを分けているのは、マネージャが違うだけ?
ええと、大きな機能で分かれているというのがあります。例えば隣のチームはランタイムっていうチームなんで、Azure Functionsのランタイムを担当してるんですよ。
さて、エンジニアの評価っていうのはどんな感じになってるかっていうと、この図にはマイクロソフトは入っていないのですが、僕の友達に「ゆうさん」っていう人がいて、彼がブログでGAFAの給与体系みたいなをまとめてくれて、マイクロソフトも似たような感じです。
参考:GAFA米国本社のエンジニアの年収をジョブレベル別に比較してみた【Google・Amazon・Facebook・Apple】
こういう情報って外部に公開されてるので別に隠すことはないし、マイクロソフトの給料の額とかも調べられるんですよ。
どういうふうになってるかっていうと、エンジニアとしてランクがあるんですよね、「SDE1」「SDE2」とか。マイクロソフトの場合は「シニアソフトウェアエンジニア」があって「プリンシパルエンジニア」がある、みたいな。
このランクの人はこういうことができる、っていうのが明確に定義されていて、それによって給料が決まるんですね。
だから自分が給料を上げたかったらどうするかっていうと、プロモート(ランク上げ)してもらえるように頑張るって感じです。他の人との戦いじゃないんです。
いまより一つ上のランクの仕事をしばらくしていれば、マネージャが「こいつは今はシニアだけどプリンシパルの仕事してるからプロモートしよう」とノミネートしてくれる。
そうやってノミネートされたら次のレベルに行けるし、行けなかったら転職をする。転職するとそこでネゴシエーションしやすいので、その時に例えばシニアとかプリンシパルになれればその給料がもらえる。
ただ、そういうふうに上に行くとレスポンシビリティも大きくなるので、自分でチョイスする感じですね。自分でチョイスするし、自分との戦いなので。だから他の人と比べて不公平とか全然思わない。
給料を上げたかったら次のレベルになればいい。そういうアクションをとればいいので、あくまで自分との戦いって感じになります。
マネージャの存在っていうのは僕的にはすごい(日本と)違ってるように感じています。
日本にいるときはマネージャって進捗管理や課題管理をしたりとかして、プログラマとか開発者を指揮するとかそんなイメージだったんですかね、僕のイメージとしては。
アメリカの場合は、彼らが重視してくれるのは僕のキャリアなんですよ。僕がハッピーかどうかとか、僕がキャリアで成功するかっていうのをすごい重視してくれるんです。
これまで何人かマネージャが変わりましたけど、みんなそうでした。マイクロソフトには明確にそう定義されているんです。だからマネージャはみんなそういう動きをしてくれます。
マネージャのすごく大事な仕事に「アンブロック」というのがあります。IC、つまり開発者の人がどこかで詰まっている状態になると、マネージャが助けてくれる。ブロックされているものをアンブロックしてくれるんです。
例えば、僕が技術的に詰まるとして、誰かに聞かなあかんけど、誰か聞かなあかん人がなかなか答えてくれへんとか、そういうこともあるかもしれないです。
そういうブロックをされる状況が一番生産性を阻害すると思うんですね。
そういうときにマネージャがアンブロックを手伝ってくれる。ある人に繋いでくれたり、マネージャ経由で他の人が僕に協力してくれたりとか。
マネージャが、このプルリクエストを見たら分かりやすいよと教えてくれるとか。
あと結構面白いのは、少なくとも今の僕の職場では、納期が基本的にない感じです。
あるときもあるんですよ。どんなときかっていうと、マイクロソフト最大のイベントの「Build」というのが5月ぐらいにあって、そのキーノートで発表される予定のプロダクトみたいなもの。それが決まったら納期があるのかもしれないですけど。
マネージャも僕に対して「早くしてください」って言ったことは1回もないですね。どっちかというと、僕が「何か遅くてごめんな」とか言ってたら、「いやそんな気にすんなよ」って、「よくあることだよ」とか言われたりする。
これは多分いろんな意味合いがあるんですよね。多分クラウドのプラットフォームって、難しいことがいろいろあって、例えば自分が1週間でできるって思ったのに2カ月かかったりとか、ほんまにあるんですよ。
例えば、JVMにあるJarをアタッチするだけに見えた仕事に、僕は半年かかりました。
僕の能力のなさもあるかもしれないですけど、そういういろんな予想外のことが起こる。
やっぱり世界中の人が使うプラットフォームなので、よく分かってない実装とかしたらむちゃくちゃになるんです。ちゃんと理解して、より良いアーキテクチャを作らないとひどい目にあう。
だから多分マネージャは絶対に急かさないんだと思います。ちゃんと理解して出来るようになれば、次からは開発が速くなる。だからマネージャとしてはそこで急かさないことによって未来への投資をしてる感じなんじゃないかなと、僕は思ってます。
バックログはあり予定もあるが、達成されないこともしょっちゅう
司会)すいません、マネージャの話しに行く前に。質問が集まっていて。納期がないという話に関して皆さんが大混乱に陥っていてですね(笑)。納期がないとすると逆に何があるのか。バックログみたいなのがあるのか、ロードマップがあるのか。どういうものを始点に駆動されていて、牛尾さんの仕事が始まるのか。
バックログですね。大きなトピックだけはある。今期はこれをやろう、というのはあるんですよ。
だいたい今期はこれとこれをやっていこうというのがあって、それを荒い粒度ですけどブレイクダウンしたストーリーにして、それをICにアサインするんです。
でも、それが今期に達成されないということはしょっちゅう起こります。
思ったよりもすごく難しかったとか、あるシステムで改変が入るのでそれまで作れないとか、そういうのがしょっちゅうある。でもそれでそのICが責められることはないです。
変化は見通せないので仕方ないですよね。オーガナイズはされているけど、できなかったときはできないと認める、ということです。
司会)お客様からバックログの元になるような要求がきて、それがリリースされるまでのタイムスパンはどのくらいなんでしょうか?
僕らの場合はプロダクトオーナーみたいなチームとしてプロダクトマネージャがあって、バックログの発生元はプロダクトマネージャが決めるのですが、そのインプットソースとしては、彼らの戦略(ストラテジ-)とカスタマフィードバックですね。
あとはハッカソンでエンジニアがなにかプロポーズするときもあります。
そういうもののなかからプロダクトマネージャが、今期これをやればインパクトがあるんじゃないかと考えるものがピックアップされます。
で、それが達成されてリリースされるまでの期間は本当にピンキリです。
僕の場合は、早いときは1週間で終わりましたけど、さっきの話みたいに1週間で終わると思ったやつが半年かかったこともあります。
僕の上にはプリンシパルマネージャがいるんですね、それが日本で言ったら課長みたいなもので、その上に部長みたいなのがいて、で、テクニカルフェロー、これは事業部長みたいな感じです。
彼らの技術力はどんな感じか。
僕の1つ上の上司は、Azure FunctionsのJavaランタイムをイチから書いた人です。
その上の人は、Azure Automationの開発をしている人で別チームなので細かいところまでは知らないのですが、技術力がハンパない、ということだけは分かります。
何でかと言うと、どんなテッキーな話題を振っても、ものすごく早く深く理解するんです。彼が経験したことのないことであっても、Kubernetesでも、彼がやったことのないPythonとかでも、完璧に理解してアーキテクチャの深い話をするんです。
で、テクニカルフェロー。これはAzureの主要なサービスをイチから書いていたりします。
つまり何が言いたいかというと、僕の上司で僕よりもプログラミングができない人なんて一人もいないんです。
そしてこういう人が僕の仕事のサポートをしてくれる、応援をしてくれるわけです。
だからこんな上司に何かを説得する必要なんてないんです。彼らがテッキーなミーティングに参加して、しかも僕らにすごい鋭いアドバイスをくれるんですよ。
皆さんがもしマネージャをやるときには、こういう人たちと世界で戦わないといけない、ということをちょっと意識していただきたいんです。
おうちは小さかったが、
高度経済成長によって周囲が都会になり、
郊外に大きなおうちを購入し、
広々としたおへやに贅沢にガンプラコレクションをディスプレイ、
と言うと、犬は犬小屋で寝はじめた
というか、猫○ね
そして、田舎は人目につかないので、近所の麻を栽培している麻生さんからマリファナを購入し、
私はMetallicaバージョンの"Whiskey in the jar"が大好きだし、
やがて老人は黒いアルフォードで逆走のような危険運転行為を繰り返すようになり、
なんてことだ…、ちいさいおうちを売るべきではなかった…
後悔先に勃たずである
事件のその日の夜に釈放、おおきいおうちにかえされる
テレビや新聞のメディアは上級国民であることを知ると実名報道を避けるようになる
釈放された彼はおおきいおうちに戻ると、東南アジアへの逃亡の準備をする
スワイパー村のような場所に行くのが夢だった
老人はそう思いながら、おおきいおうちを見捨て、
7と8。
技術的なところが気になる人はこれだけ読んでくれたらいい
最後に技術的な観点からエアレペルソナが純国産ではないということを指摘する。
RocketChatという海外で開発されたOSSチャットアプリをフォーク、改変したもののよう。
ttps://github.com/RocketChat/Rocket.Chat.ReactNative
ttps://rocket.chat
フォーク元はバリバリ多国籍、外資である。(RocketChat自体は問題のないアプリであり、このエアレペルソナとはフォーク関係を超える関係はないと思われる)
冒頭のこの部分に関してである。
ttps://play.google.com/store/apps/details?id=chat.airlex.reactnative
Google Playで公開されているエアレペルソナのAndroidアプリをリバースエンジニアリングして調べてみた。
ちなみに、エアレペルソナには利用規約のようなものは見当たらず、リバースエンジニアリング禁止条項も無いようだった。
ttps://apps.evozi.com/apk-downloader/
ttps://github.com/pxb1988/dex2jar
この辺を使ってapkをダウンロードし、apkを解凍し、chat.airlex.reactnative/classes.dexをjar fileに変換した。
classes.dexから変換されたjarファイルを展開するとchat/airlex/reactnativeというフォルダ、パッケージが見つかる。
このパッケージ内のファイル(.class、クラス)がエアレペルソナの処理を行うもののようである。
このクラスをJadを使い、デコンパイルしてみた。その結果が以下である。
ちなみにここからapkをアップロードするとdex2jarをしなくてもJavaのソースコードにまでデコンパイルしてくれた。便利。
package chat.airlex.reactnative; import android.content.Context; import com.ammarahmed.mmkv.SecureKeystore; import com.facebook.react.bridge.ReactApplicationContext; import com.tencent.mmkv.MMKV; public class Ejson { private String TOKEN_KEY = "reactnativemeteor_usertoken-"; String cardId; String host; String messageId; String messageType; /* access modifiers changed from: private */ public MMKV mmkv; String msg; String notificationType; String rid; Sender sender; String senderName; String type; public Ejson() { ReactApplicationContext reactApplicationContext = CustomPushNotification.reactApplicationContext; if (reactApplicationContext != null) { MMKV.initialize((Context) reactApplicationContext); new SecureKeystore(reactApplicationContext).getSecureKey(C0617Utils.toHex("com.MMKV.default"), new RNCallback() { public void invoke(Object... objArr) { if (objArr[0] == null) { MMKV unused = Ejson.this.mmkv = MMKV.mmkvWithID("default", 1, objArr[1]); } } }); } } public String getAvatarUri() { if (this.type == null) { return null; } return serverURL() + "/avatar/" + this.sender._id + "?rc_token=" + token() + "&rc_uid=" + userId(); } public String token() { String userId = userId(); MMKV mmkv2 = this.mmkv; return (mmkv2 == null || userId == null) ? "" : mmkv2.decodeString(this.TOKEN_KEY.concat(userId)); } public String userId() { String serverURL = serverURL(); MMKV mmkv2 = this.mmkv; return (mmkv2 == null || serverURL == null) ? "" : mmkv2.decodeString(this.TOKEN_KEY.concat(serverURL)); } public String privateKey() { String serverURL = serverURL(); MMKV mmkv2 = this.mmkv; if (mmkv2 == null || serverURL == null) { return null; } return mmkv2.decodeString(serverURL.concat("-RC_E2E_PRIVATE_KEY")); } public String serverURL() { String str = this.host; return (str == null || !str.endsWith("/")) ? str : str.substring(0, str.length() - 1); } public class Sender { String _id; String username; public Sender() { } } }
フィールド名を見てみると、cardId, host, messageId, messageType, mmkv, msg, notificationType, rid, sender, senderName, typeが存在する。
メソッドには、getAvaterUri、token、userId、privateKey、severURLが存在する。
ところで、RocketChatというOSSのチャットアプリが存在する。
ttps://rocket.chat
そのRoketChatのAndroid実装の中に同名のEjsonというクラスが存在する。
ttps://github.com/RocketChat/Rocket.Chat.ReactNative
ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/android/app/src/play/java/chat/rocket/reactnative/Ejson.java
見比べてみると、フィールドにcardIdが追加されている以外はフィールドやメソッド名、そしてその処理の内容まで一致している。
他にもReplyBroadcastなど、同様のクラスがエアレペルソナに見つかる。
以上のことからエアレペルソナはRocketChatをフォークして、パッケージ名を変えて作られたチャットアプリであり、開発の大部分はRocketChat社の努力と多数のOSSコントリビュータによってなされたものであると思われる。
そもそもこのOSS時代に純だの何だの言っている時点で怪しい。
さて、エアレペルソナがRocketChatをフォークして作られたものであるとすると、気になるのはライセンスである。
RocketChatのOSSライセンスはMITライセンスである。
ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/LICENSE
MITライセンスは非常に緩いライセンスであるため、エアレペルソナの様にフォークして別のアプリケーションとして公開することにはおそらく問題がないということは強調しておく。
現状エアレペルソナにログインできておらず(2要素認証のコードが送信されないといった問題が起きている模様)、使用している各OSSのライセンス表示が適切に行われているかまでは調べられていない。
https://news.yahoo.co.jp/profile/comments/16099942697304.bbea.30631
tma*****
2時間前
毎日の感染数が発表されていますが、東京の人たちには、あまり届いていないかもしれません。でも今日は、多過ぎますね。
夜20時以降の外出制限はわかりますが、そんなことを思ってもいない人が大勢いることを忘れてはなりません。
この前、インタビューで自分たちの周りには家族も含めて誰も感染した人が居ないから、完全にダラケていると言っていました。
しかしその言葉の裏には、病院で必死に働く医療従事者の支えがあることを忘れてはいけないと思う。慌ただしく患者さんのために力を尽くしてくれていることを忘れてはならない。そんな能天気な人たちが感染したり、違う病気になって初めて医療のありがたみを感じると思う。でも医療が逼迫されてきた今だからそれでは遅いのである。
みんなの心に潜む、今まで自粛頑張ったから少しぐらいは大丈夫という慢心な心かもしれません。
moa*****さん|2分前
都民です。東京の人に届いてないんですね。はないですね。東京というところを分かってらっしゃらない方のご意見かなと思います。東京は他県から毎日莫大な人数の人達が通勤で往来してます。それだけでも感染の拡大理由になってます。
プラス地方からも出張や観光にものすごい人数が来てます。都民だけならこんなに感染は広がりませんよ。他人事のように言わないでね。他県からコロナが持ち込まれてることも知ってくださいな。
kon*****さん|3分前
都民です。3月からテレワーク、マスク、手洗いうがい消毒徹底、親や祖父母とも会わず、飲み会も旅行も何もなし。このように暮らしてる人も多いです。
もちろん気をつけていない人も一定数居ますが、田舎とは人口密度がそもそも違います。どんなに気をつけていても外に出たら近くに人もいます。
pez*****さん|35分前
sta*****さん|39分前
東京に届いてない?
田舎者の傲慢さと慢心ですね。そりゃ人もまばらでスッカスカの田舎じゃ感染も広がらないでしょうね。おまけに夜会食する店も開いてないですからね。
そもそもPCRすらまともにできてない中での感染者数なのに、何で上から目線なんだか。
aoe*****さん|41分前
渋谷で自営業をやってます。スクランブル交差点ばかりが映るからそう思われるかと思いますが、人が多いのは交差点から半径約100メートルの範囲内だけで、それ以外はそれほどでもないです。それに、多くの都民はマスクに頻繁な消毒で気をつけて生活しています。
m_p*****さん|45分前
都内ですが、4月以降ずっとリモートだし、人と会うことも少ないですよ。それこそ別に済んでいる兄妹の家族にも会っていません。切迫感は相当ありますよ。ニュースだけで安穏としていると惑わされないで欲しい
( ´͈ ᗨ `͈ )◞♡⃛さん|46分前
毎日の感染数が発表されていますが、東京の人たちには、あまり届いていないかもしれません。
は?何言ってるんですか?
どこ在住か知らないけど
qjd*****さん|46分前
fuw*****さん|46分前
買い出しは週1回空いてる平日の時間帯に。
これ以上、何をしろと言うのか?
szm*****さん|52分前
都民の一部を切り取った報道でまだ東京差別ですか。どちらにお住いか知りませんが都民じゃないならほっといてくださいよ。
車を1人1台持っているような田舎と比べるのはやめて欲しいし、テレワーク可能な業種ばかりではありません。持ち出し厳禁のお仕事や物を扱っているお仕事は絶対に不可能です。
どこどこに人が並んでたとか、仕事の合間にお昼をとることも都民は許されないのでしょうか。人口が多いんだからある程度は仕方の無いことです。
12月以降は決算の企業も多いでしょう。持ち帰りでできる仕事ばかりじゃないし、非常に効率も悪い。
地方の一部の人がひどすぎて、いっそのこと一都三県だけで独立したいくらいです。
二度とこちらに足を踏み入れて欲しくない気持ちにまでなってしまいます。
ara*****さん|56分前
偉そうに怒
のんびりいきましょさん|59分前
他の方と同じく都民(23区外の田舎)ですが、昨年2月から買い物は宅配、ネット通販を利用したり、3歳の子供いますがどこにも出掛けず(可哀想なので散歩はします)、マスクや手洗いの徹底、小さいスプレーボトルに入れたアルコール消毒をポケットに入れ、こまめに消毒しできる限りのことをやっています。
なので都民一括りにしないでほしい。つらい。
同じ都民でもテレビで出歩く人見ると不快に思うし、これだけの感染者数なので毎日危機感持って生活してます。
あんな都内での人混みの映像みたら都民全員が、と勘違いされて当然。
何で同じ東京でこんな気を付けているのに遊び歩くんだろう…って毎日複雑な気持ちになる。
こういうコメントとても傷つきますが今後も徹底した予防を続けていきたいと思います。
n*****さん|1時間前
都内在住。
黙れ!田舎者!
>>みんなの心に潜む、今まで自粛頑張ったから少しぐらいは大丈夫という慢心な心かもしれません。
すげー殿様コメントw
大体、知事どもが緊急事態宣言だ~とか水面下で乳繰りあっている間で、突然「陽性者数」爆上げ&検査数爆上げ。
毎日毎日、超満員の東京ドーム2個分以上の検査やってるって知らないでしょ?
で、緊急事態宣言出させたぜ、ドヤァ~~!って自慢げに会見開いちゃうんでしょ、この3バカ知事は。
で、密になるな、外に出るなと言ってるのに、記者集めてワッショ~イw
こんな連中の茶番に、いつまで付き合うの?
hiy*****さん|1時間前
都民です。
夏にPCR検査を受けて陰性でしたが、万が一を考えて他の人にうつさないように、仕事と最小限の生活用品だけの買物しか行っておらず、その際にもメモして短時間で済むように頑張っています。
感染者は多いかも知れませんが、思いやりを忘れずに自粛している人達もいる事に気付いて欲しいです…。
東京の人は〜って言うけど、東京生まれ東京育ちの人は気をつけてる人多いけどね。田舎から出てきてる人の方が、今はどこも空いてるから〜って出かけてるよ。なんでも一括にしないでほしい。
都民だけどこういう言われ方は正直悲しい…
yun*****さん|1時間前
ほとんどの都民は、地方の人よりも、マスクや手洗い、消毒は徹底してるし、長いこと飲みにも行ってませんよ。
nailcyuさん|1時間前
東京の感染者の非常に多い区に住んでいますが、家族含め近所の知人もまだ感染者いませんよ。それはなぜだと思いますか?ダラけずしっかり感染予防しているからです。もう少し心あるコメントを発して欲しいものですね。東京の人をひとくくりで悪者に聞こえる様な書き方をしてはいけません
現状感染した方がいません。
そもそも遊び歩いてる人しかマスコミはコメント取れないんでしょw
わざわざコロナ拡げてる人たちに寄って行かなきゃいけないマスコミって大変ねw
おじんさん|1時間前
響くも何も大半の人にとってはもうやれる事が無いんよ
手洗い、消毒は勿論
アルコールで拭き
これ以上の事は引き籠りしかないし
流石に腹立つわ
mmzさん|1時間前
マスコミもコロナを舐めて飲み歩いてる人ばかりテレビで流すから、都民がみんなこんなもんだと思われるんです。
こんな人達はほんの一部ですよ。
都民のほとんどは感染対策をしっかりしながら生活していると思います。
col*****さん|1時間前
それでもリスクを避けられない程、人が多いのが原因なだけであって、別に都民が極端に遊び歩いてる訳ではないと思いますよ。
東京よりもリスクが少ないのは当然だけど、0ではないのですから。
so8*****さん|1時間前
ふざけたことを言わないでください
少なくとも自分の身の周りでは
そんな緩んでいる人は1人もいません
相当に気を遣って生活しているし
それでも加速度的に増えているのに
恐怖を感じてますよ
まったく、勘弁してほしいわ
決めつけるな
hanochanさん|2時間前
地方から東京に出てきてる人は沢山います。東京都は全国から人が集まってるから都民のせいではないよね。
*********さん|2時間前
最近はGoが流行っているが、それならJavaだって同様に良さそうな気がする。
- nullがたまにうざい
- なんか重厚な感じがする
- ORMとかが重厚なのが多かった
- 故に環境構築が大変だった
- strutsがしんどかった
- xml地獄からアノテーション化したりいろいろと模索していた
- ちょっと昔には「俺たちイケてるプログラマ」はみんなRailsに移っていった流れがあった?
- Effective Javaよいが、そもそもそういうtips意識せずにそう書けるような言語仕様になってほしかった気もする
- 非同期処理やスレッド処理がやや難しかったか、あるいは言語側でのサポートが薄かったか(?)
言語仕様的な批判と、エコシステム的な批判に分けられそうなきがするな。
関数型言語の関心はScalaやClojureに全フリしてもらって、Javaはシンプルな機能を持つGoの方向性なModan Javaになっていってくれれば良さそうな気も。
httpサーブレットとかそのへんが微妙だったかもしかして。Goみたいにnet/httpライブラリが標準であればそれをベースにすることでオレオレフレームワークの乱立を避けることができるか、と思ったけどJAX-RSとかがあるな。
Goだって冗長な記述が必要な言語だが、好かれているし、Javaも悪くない言語な気がするんだよな。
まあ何でもいいが。
ロジカルに考えているようで結局なところ雰囲気的なところに左右されているエンジニア多い気がする。
まあわいも、人気な言語に乗っておいて高単価を得られたほうがいいのでそうするが。今の所Goが肌にあっているんだよな・・。3年ぐらい使って熟練度上がってきたし、さほど悩まずにコーディングすることができる。
PHPの人が好きな、あるいはRubyのmethod_missingなど活かしたテクいコードは、書いているやつは気持ちいいかもしれないがわいは明示的にinterfaceがわかるコードが書かれていたほうが好きだ。型で振る舞いがわかったり制御されていないと分かりづらくない?複数のプロジェクトを掛け持ちするから、読むときに前提知識が少なく読めるコードがいい。
まあJavaもリフレクションでテクいことができる気がするな。
Goがいい。誰が書いてもだいたい同じコードになるから、誰かに作業を振ったとしてもレビューしやすい。
まあこれからJavaを書く気はしないが、GoでAPI書いているマンから見ると、JAX-RSとかでゴリゴリAPI書いていくの全然悪くないんじゃないかと思うのであった。
最悪別にGeneric入らなくてもいいかもな。別にそんなに困ってない。はいってくれるなら、はいってくれたほうがいいが。sliceに対してmap, each, filter, existsなどのメソッドが生えることになるイメージかな。まあそれは欲しくなるけどな・・・。
Scalaもいいんだが、たまにイキったコードを書くと分かりづらくなる時がある。イケてるコードを書こうと思ったとき、結構パワーを使う言語だ。なんかモナドってジェネリックを更に強くしたやつだとも捉えられるような気がするな。ゴリゴリ関数型で書こうと思った場合、プロジェクト全体に影響がある話なのでアーキテクチャ設計に力がいる気がする。
年をとると大事にするポイントが変わってくるな。昔はスーパープログラマになりたくて関数型言語とかやっていたが、今はいかに効率よく仕事をする=金を稼ぎ自由を得るかを重視している。職業プログラマとなったわけだ。仕様固めたりリリースしたり不具合対応したり運用したり、フリーランスなら税金計算したり、金儲けの方法考えたり忙しいんじゃ。今は結局スーパープログラマとは何か悩ましいよ。「プログラマとして」キチガイレベルにすごい人間というのはまだ見たことがないかもしれない。コーディングが早い?バグ修正が早い?パフォーマンスのやばいコードを書ける?設計が優れている?
Android Studioをダウンロードして公式のチュートリアルやってるんだけど、いきなりつまづいたし。
アプリ実行できないし。
https://developer.android.com/training/basics/firstapp/running-app
まで来たけどビルドが出来ないし。(ビルドじゃないのか、gradle sync?とかいうやつ?)
org.gradle.internal.resource.transport.http.HttpRequestException: Could not HEAD 'https://jcenter.bintray.com/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.1-sources.jar'.
とか言われとるし。
上のjarのドメインにping送ってみたら100%ロスしとるし。
そのせいか、
Android Studio で、[Project] ウィンドウの [app] モジュールをクリックしてから、[Run > Run] を選択します
グレーアウトしとるし。
分からないのは、ネット環境がないとアプリを実行することすら出来ないということだ。
サーバーが死んでたらその間何も出来ないのか。
そしてツイッターで誰も何も言ってないの見ると、誰も大した問題だと思ってないのか。
もう良い。俺にはAndroidアプリ開発は合わない。
赤ずきんちゃんは、金髪の美少女でした。「将来、プロムに誘うならあの子だよな」村のにきび面の男の子たちはそう話し合ったものです。
やがて、平和な村に不穏な噂が流れてきました。なんと、狼団のテロリストが村に潜伏している可能性があるというのです。「愛国者法に基づいて山狩りをしよう」村長がそう呼びかけると、村人たちは松明と銃を手にテロリストを探し回りました。実のところ愛国者法は延長期限切れになって2015年の6月に失効していたのですが、そもそも愛国者法がどんな法律か知らなかった村人にはそんなの関係ありませんでした。
やがて、テロリストが潜んでいそうな場所が見つかりました。赤ずきんちゃんのおばあさんの家です。やはり愛国者法に基づいて仕掛けられていた盗聴器から、「モスクがどうたら」という会話が聞こえてきたのです。もしかしたら「モスクワ」と言ったのかもしれませんが、警察署長は自信たっぷりに「証拠は揃った、揃いすぎるほどな!」と断言しました。村人たちの中には「盗聴でわかったのなら山狩りは必要なかったじゃん」と思った人もいましたが空気を読んで文句を言わないことにしました。
警察署長が「さる筋から派遣されたスペシャリストだ」と勿体ぶって村人に紹介したのはほっそりとした少女でした。目深にかぶった白いフードからは見事なプラチナブロンド。そのあいだからは氷のように美しく澄んだ青い瞳が覗いていました。「彼女、すげーイカすな。なんのスペシャリストなんだろうな」村のにきび面の男の子はポルノめいた妄想で股間を膨らませながらそう話し合いました。
村の外れにある深い森、その奥へ奥へと白い少女が歩いていきます。やがて廃屋のならぶ集落が見えてきました。ここは開拓時代に栄えていた宿場町だったのですが鉄道が普及するとともに廃れ、ずいぶん昔から廃墟になっています。そんな廃墟の一角に赤ずきんちゃんのおばあさんは一人で住んでいたのです。こんなところにも老人問題の深刻さが見え隠れします。
白い少女は、おばあさんの家の前に立ち止まりました。ドアは半開きになっており、その前には広口のビンが転がっていました。つまり、ajar(半開き)と a jar(広口のビン)の掛詞になってるわけです。そんなダジャレどうでもいいので少女は「おばあちゃん、入るわよ」と言いながらドアをぐいっと開きました。ドアを開ける際にも油断なく左右を伺い、ドアの下部や上部のトラップワイヤーの有無を瞬時に判断するあたり、さすがスペシャリストって感じです。
ドアを開けるとむせ返るような血の匂いがしました。「おばあちゃん、すごい臭いね。まるで家のなかで人間の解体をしたみたいだわ」そう言いながら白い少女は寝室へ向かいます。寝室に入ると、人型ロボットがうずくまっていました。ロボットは「ぼく、いいロボットだよ」と言って高く手を上げて降伏の意思表示をしました。「いずれにせよあんたは赤ずきんの婆さんじゃあねえな。まあ死ねや」そう言うと少女は懐から取り出したソードオフ・ショットガンで至近距離射撃します。BLAM! BLAM! BLAM!
このソードオフ・ショットガンは、その名前の通り(sawed offは、のこぎりで切り落とす事)、普通のショットガンの銃身を切り詰めたもので、発射直後に散弾の拡散が始まるため、通常のショットガンと比べると有効射程は短いものの、至近距離の殺傷力や有効性はむしろ増大しており、更に全体の長さが短くなった事で、屋内などの狭所で扱い易いため、特殊部隊などが屋内に突入する際、出合い頭の戦闘が(敵と鉢合わせする事)多いポイントマンがエントリー・ショットガンとして用いる事もあるのです(Wikipediaより)。
ロボットはしゅうしゅうと煙を上げながら倒れ伏しました。少女は「しくじったな」とつぶやきました。おばあさんの家はいつのまにか一ダースほどの戦闘員に包囲されていたのです。
轟音とともに正面扉が吹き飛びます。おもわずそちらに包囲網の注意が逸れた隙に少女が裏口から飛び出します。銃弾が飛び交うなかをかいくぐり、戦闘員の背後にまわってショットガンを発射します。細身の体に似合わない怪力を発し、崩れ落ちる戦闘員の襟元を掴みあげるとそれを肉の盾としながら敵陣に突っ込みます。わずか50秒で瞬く間に敵を殲滅した彼女の白いフードは、今や血でベッタリと染まっていました。その美貌と戦闘力から彼女は「血染めの氷壁」と厨二っぽい二つ名で呼ばれていました。「白いフードが血で赤くそまるまで戦闘を止めない」アグレッシブな戦闘スタイルから、彼女を「赤ずきん」と呼ぶものもいました。(←これ、書いてて恥ずかしい)
血と肉片で汚れた銃身をフードで拭うと、その銃身に刻まれた文字がくっきりと読み取れました:
In Gun we trust
森から血染めの少女が帰ると、村ではお祭りの準備がされていました。今日はイースターのお祭りなのです。血染めの少女をみると、村人たちは「Meerica! Meerica!」と叫びました。突然音楽がかかり、村人たちはミュージカルめいて整然と踊り出します。バックコーラスは白い衣を着た聖歌隊です。聖歌隊には有色人種は一人もいません。スポットライトがあたる村の広場の中心に血染めの少女が歩み寄ると、先ほどの戦闘で見せた獰猛さを微塵も感じさせない清らかな声で、「アメージング・グレイス」を歌いました。
Javaで開発されたアプリケーションにはインストールにまつわる難点がある。
それによりせっかく興味をもってくれたユーザーも試す前に諦めてしまいがちである。
また、サーバーサイドアプリケーションもJava製である場合、デプロイや監視の際の難点が多く運用者を悩ませてきた。
javafxで導入されたパッケージャを用いることで各OSネイティブなインストーラーの作成が可能になり、この問題を解消・緩和できる。
SpringBoot などを用いた ExecutableJar を作成するアプリケーションであれば、サーバーサイドアプリケーションであっても一部制限があるもののパッケージングできる。
Javaで開発されたアプリケーションの配布には以下の問題点がある。
javafx-maven-pluginを使うとよい。javafxと冠しているが実態はパッケージングツール。
javafxの冠があるがためにスタンドアロンアプリ開発者以外を遠ざけている感あり。
Windows(msi/exe), Linux(rpm/deb), Mac(dmg) など各OS・ディストリビューション固有のパッケージングが行える。
公式ページ( http://zenjava.com/javafx/maven/ )では更新が止まっているが、Github( https://github.com/zonski/javafx-maven-plugin )とMavenRepository( http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.zenjava%22%20AND%20a%3A%22javafx-maven-plugin%22 )を確認するとちゃんと開発は続いている。
pom.xml に以下を追加する。
mainClassはSpringBootなら@SpringBootApplicationのついてるクラスですね。
vendor は適当に組織や個人の名前を入れておきましょう。
※ 以下の XML が化けるのは増田の不具合か仕様っぽい。 http://anond.hatelabo.jp/20100205210805
<plugin> <groupId>com.zenjava</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>8.1.2</version> <configuration> <mainClass>[main method class]</mainClass> <vendor>[Vendor Name]</vendor> </configuration> </plugin>
あとはそのままビルドすればよい。
maven clean jfx:native
ビルドが終わると target/jfx/native 以下に、ビルドしたOS/distributionに合わせて msi, exe, deb, rpm, dmg ができあがります。
本当であればクロスビルドできてしかるべきなのですが、まだ実現はされていないようです。
これらのパッケージは Widonws であれば Program Files(x86) に、Linux系であれば /opt/ の下にインストールされるようです。
/opt/app-name/ の下には app と runtime の2つのディレクトリがあります。
app の下にはビルドした jar ファイルや依存ライブラリが置かれています。
runtime の下には実行用の jre が配備されています。
実行ファイルにそのまま引数を渡せば jar 実行時の引数としてそのまま渡されます。(-Xmxなどはまだ未検証です)
ImageJ用のプラグインを書くために、デバッガを設定してコンパイルする方法まとめ。
大部分はtotobookさんのブログを参考にしたけど、3年半経つと変わっているところも増えるらしく、ちょこちょこ必要なステップが増えていた。
totobookさんのブログ: http://d.hatena.ne.jp/totobook/
ちなみに、書いたプラグインはITCNという自動細胞計測プラグインを拡張し、作業フォルダ内の画像をROIごとに全自動で計測し、結果をテキストファイル保存するというもの。
ITCN: http://www.bioimage.ucsb.edu/downloads/automatic-nuclei-counter-plug-in-for-imagej
(ア) http://d.hatena.ne.jp/totobook/20101028/1288277567
(イ) http://d.hatena.ne.jp/totobook/20101030/1288468881
(ア) これをしないとjava.lang.ClassNotFoundExceptionが出てくる
(イ) NetBeansになんか言われるけど無視。コンパイルは通る。
① http://support.apple.com/kb/dl1572
(イ) ツール>Javaプラットフォーム から、プラットフォームの追加でJava1.6を追加する。フォルダは探してください。
(ウ) プロジェクトの一番上(今回はImageJ)を右クリック>プロパティ>Javaソースのクラスパス Javaプラットフォームを、JDK1.6にする。
(ア) 以下のサイトにImageJで実装されているクラスの詳細が書いてある。けど、Google検索から探すのが手っ取り早い。
(イ) http://rsbweb.nih.gov/ij/developer/api/ij/ImageJ.html
(ア) http://d.hatena.ne.jp/totobook/20101030/1288468881
(ア) java.lang.ClassNotFoundException
① ソースファイル1行目のpackages plugins; を削除する。
② jar cvf などのコマンドでコンパイル済みファイルを圧縮すると何故か出てくる。圧縮せず使いましょう。
① ImageJのJavaをver1.7にする方法が見つからなかったので、NetBeansのJavaを1.6にする。詳しくは上に書いた。
増田でこんなこと聞いていいのかわからないけど、誰かわかる人教えて欲しい。
seasarの公式サイトにある、s2jdbcのチュートリアルを試してみたんだけど、entityの生成でいきなり躓いてしまった。
$ ant -f s2jdbc-gen-build.xml gen-entity Buildfile: /Users/hoge/dev/s2jdbc-tutorial/s2jdbc-gen-build.xml gen-entity: [gen-entity] Java Result: 1 BUILD FAILED /Users/hoge/dev/s2jdbc-tutorial/s2jdbc-gen-build.xml:46: Exception in thread "main" java.lang.NoClassDefFoundError: Caused by: java.lang.ClassNotFoundException: at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
動かしている環境は
- java version "1.6.0_29"
- Java(TM) SE Runtime Environment (build 1.6.0_29-b11-402-11M3527)
- Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02-402, mixed mode)
s2jdbc-gen-build.xml:46 っていうのが、classpathに関する記述の箇所なので、動かすのに必要なjarが読み込まれていないからなんだろうなぁ、って思ってるんだけど。
同じ現象で躓いて、うまく解決できた人がいたら、教えて欲しい。
38 <target name="gen-entity"> 39 <gen-entity 40 rootpackagename="${rootpackagename}" 41 entitypackagename="${entitypackagename}" 42 javafiledestdir="${javafiledestdir}" 43 javafileencoding="${javafileencoding}" 44 env="${env}" 45 jdbcmanagername="${jdbcmanagername}" 46 classpathref="classpath"> 47 <jvmarg value="${vmarg.encoding}"/>
2010年の日本のヒップホップ音楽 【作業用BGM】 ‐ ニコニコ動画(原宿) の曲目。
01. LOST IDENTITY - 道(TAO) (YouTube)
"Lost Identity", 08.15. ILL EAST RECORDS
02. 都市伝説 - 韻踏合組合 (YouTube)
"都市伝説", 10.10. IFK RECORDS
03. 極悪JAZZ feat. 鬼 - キリコ (YouTube)
Produced by DJ OLDFASHION
04. Black File 200回記念フリースタイル (Vimeo)
"Black File", 06.24. スペースシャワーTV
05. 夕方 - S.L.A.C.K. (YouTube)
"Swes Swes Cheap", 08.04. Dog Ear Records
06. 思考品M.T.B.D. feat B.D. - DJ Mitsu the Beats (YouTube)
"UNIVERSAL FORCE", 08.04. PLANET GROOVE
07. CAMP'S RULE - RAMB CAMP (YouTube)
Produced by DJ GQ
"RAMB CAMP", 05.14. FILE RECORDS
08. MECCHA MECHA - コッペパン (YouTube)
09. GOOD MORNING BABY - やけのはら (YouTube)
10. 捕食 - asa x CUBEc.u.g.p (YouTube)
"捕食-hoshoku-", 06.11. Jar-BeatRecord
11. イッちゃってイイ? (SUGAR CRACK REMIX) - SD JUNKSTA (YouTube)
12. TORA TORA TORA - TETRAD THE GANG OF FOUR (YouTube)
"SPY GAME", 11.12. FILE RECORDS
13. SUNDAYfeat. WAX - PONY (YouTube)
Produced by KURABEATS
"Verseday", 05.05. 桃源響RECORDS
14. Get Da Passports - Black Mont Blanc (YouTube)
15. 音楽ワルキューレ - DOTAMA (YouTube)
Produced by Fragment
16. いつもそう - WAX from SD JUNKSTA (YouTube)
Produced by KYN
"神成り", 07.21. 諭吉レコード
17. MADE IN JAPAN feat. X-MAN - L-VOKAL (YouTube)
Produced by 1689
"Lovin'", 03.03. MATENRO RECORDS
18. Homeward Journey - Uyama Hiroto (YouTube)
"Homeward Journey", hydeout productions
19. G.H.E.T.T.O - SHINGO☆西成 (YouTube)
Produced by TRAMP
20. STRAIGHT CASH - YING YANG (YouTube)
"TOTAL ECLIPSE", 10.13. YING YANG PRODUCTION
21. ILLMATIC RACER feat. 来門 - UNDER BROS (YouTube)
Produced by TAKE-C
22. トーキョー難民 - あるぱちかぶと (YouTube)
"◎≠", 02.03. Slye Records 在音
23. 森羅万象 - AXIS (YouTube)
"UNPOPULAR -在日外国人奇声集-", 04.21. Libra Records
24. iPhone for GAGLE - GAGLE (YouTube)
Produced by DJ Mitsu The Beats
exclusive, 07.02. (twitter)
25a. 24 BARS TO KILL feat. ANARCHY, RINO LATINA II, 漢, MACCHO - Ski Beatz (YouTube)
"24 HOUR KARATE SCHOOL JAPAN", 10.20. R-RATED RECORDS
25b. 24 Bars To Kill "IFK REMIX" feat. Hidaddy, Erone, Satussy, 遊戯 - Ski Beatz (YouTube)
exclusive, 11.05.
25c. 24 Bars To Kill "MYC REMIX" feat. RYUZO, DABO, SUIKEN, 般若 - Ski Beatz (YouTube)
exclusive, 11.06.
26. 東京哀歌-トウキョウエレジイ- - 空也MC (Youtube)
Produced by fanfan
27. 禁断の惑星 feat. 志人 - TABOO1 (YouTube)
Produced by DJ KENSEI
"LIFE STYLE MASTA", 10.20. Libra Records
28. Break Boy in the Dream feat. 七尾旅人 - 環ROY (YouTube)
"BREAK BOY", 03.17. POPGROUP RECORDINGS
29. DREM SKY - RAU DEF (YouTube)
Produced by PUNPEE
"ESCALATE", 09.10. FILE RECORDS
30. MOTHER feat. MMM, CHIYORI - おみゆきChannel (YouTube)
"おみゆきさん", 03.10. Mary Joy Recordings
31. MISSION POSSIBLE - OLIVE OIL×ILL-BOSSTINO×B.I.G.JOE (YouTube)
"MISSION POSSIBLE", 07.21. OILWORKS THA BLUE HERB RECORDINGS TRIUMPH RECORDS
32. WAKE UP feat. MARIA - QN from SIMI LAB (Amebreak)
"THE SHELL", 07.29. FILE RECORDS
Tomcat上のJRubyから呼んだJavaプログラムから呼び出し元のJRubyの環境(Runtime)を使いたいときにどうすればいいのか?
方法が1つわかったのでメモ。
(追記2:こんなめんどいことしなくてもJRuby.runtimeで取れたみたい)
イメージ的には以下の感じ
↑↓
↑
JRubyは1.4.0、jruby-rack.jarは0.9.7、warblerは1.0.1
まずは必要なクラスをimport
import org.jruby.Ruby; import org.jruby.rack.PoolingRackApplicationFactory; import org.jruby.rack.RackApplication; import org.jruby.rack.RackServletContextListener;
ServletContextをどっかから取ってくる(Listener作ってfieldに埋めるとかして)(追記:$servlet_contextで取れる[JRuby-Rack使うから])
ServletContext context;//=~~~
warblerでwar化するとweb.xmlにRailsServletContextListener(extends RackServletContextListener)が登録される。
そのListener起動時にFactoryがServletContextに登録されるので、それを取得する
PoolingRackApplicationFactory factory = (PoolingRackApplicationFactory)context.getAttribute(RackServletContextListener.FACTORY_KEY);
PoolingRackApplicationFactoryのapplicationPoolを取ってくる
(protected fieldなのでリフレクションを使用)
Field poolField = factory.getClass().getDeclaredField("applicationPool"); poolField.setAccessible(true); Queue<RackApplication> pool = (Queue<RackApplication>)poolField.get(factory);
RackApplication ap = pool.peek(); Ruby ruby = ap.getRuntime();
呼び出しもとのJRuby環境を使ってRubyコードを実行できる
ruby.evalScriptlet("p 'test'");