Java入門・初心者質問スレ Part.6

■ このスレッドは過去ログ倉庫に格納されています
2017/12/21(木) 00:24:33.33ID:E/ADCCn6
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.5
http://mevius.2ch.net/test/read.cgi/tech/1506675205/
2018/02/11(日) 10:44:00.18ID:YeNWUzxx
>>780
最近はcakeが楽すぎて、スクリプトも全部c#で書いてるわ
javaでcakeと同じことやろうとすると何がおすすめ?
2018/02/11(日) 10:51:10.19ID:hZTy6Y/G
Gradle
2018/02/11(日) 11:08:50.25ID:CuFerfqg
最近はweb系は全てnodejsに支配されてる感がある
2018/02/11(日) 11:13:49.18ID:zXTZLl5w
あるプログラムを手を加えているるうちに
コマンドプロンプトで実行させたあとに1〜2秒ほどの謎のウエイトがかかるようになったんだけど何で待たされているのでしょうか

public class Sample {
 public static void main (String[]args) {
  (略 650行程度)
 System.out.println("終了");
 } //mainメソッドここまで
 メソッドは10前後
}

上で言えばmainメソッドの最後で「終了」って表示してからその後何もさせてないのにコマンドラインの入力欄に戻るまでに1〜2秒待たされるようになりました。
2018/02/11(日) 11:25:19.00ID:CuFerfqg
肝心の処理がわからなきゃなんも言えん
とりあえずverbose付けて実行してみろよ?
2018/02/11(日) 11:55:08.44ID:xdDHKV4A
メソッド全部消しても再現するの?
2018/02/11(日) 12:31:14.10ID:PoFQMINp
>>776
mac除いて素のC言語足せば文句なしだわ
788デフォルトの名無しさん
垢版 |
2018/02/11(日) 13:31:09.65ID:B0DbdRYG
Perlもよろしく
2018/02/11(日) 16:31:49.42ID:QgiY6BS8
なんていうかMac以外は清潔感がないから社会人としてマナー違反
朝起きて身だしなみ整えずジャージで外を出歩くような感覚
2018/02/11(日) 18:22:09.23ID:B0DbdRYG
Macはインテリアの一種であり見た目のデザインで売ってる製品だから実用性に欠ける部分があっても買うユーザは最初から気にしない。
まあしかし中身がUNIXであることにより少し救われている。
2018/02/11(日) 19:57:57.53ID:icMKiG8e
>>788
承服致しかねます
2018/02/11(日) 21:52:18.83ID:aZ0naO6m
>>789
俺にぴったりだ
2018/02/12(月) 04:39:09.88ID:gkLkkA1t
mac使うのガイジだけだろ
2018/02/12(月) 09:24:45.05ID:Bk9VmC4X
ビジネスマンならmacしか選択肢がない
やすい靴やすいスーツやすい時計やすいネクタイやすいシャツ
ビジネスマンなら身嗜みを間違えると相手に軽く見られるってことをわかってるだろう
それと同じで端末も身嗜みだからある程度金をかけてセンスがいいものを選ばないとね
ビシッと身嗜みを決めたビジネスマンが格安のネットブックやガキっぽいゲーミングノートを取り出したらこの人と仕事して大丈夫かなって不安になるよ
2018/02/12(月) 10:30:50.10ID:JW89phfM
>>790
これ
vimとsshがあればなんでもいいんだから、macで用が足りてる
2018/02/12(月) 11:23:44.09ID:GfEZnF0r
>>795
>>779
2018/02/12(月) 11:31:43.74ID:Dq1d51GH
>>778
勝手に機能変えられる
止まったり重くなった時に原因調べるのが大変
OSがサポートしてるツールが少ない
2018/02/12(月) 11:35:43.25ID:Dq1d51GH
>>795
aptみたいのないと不便すぎる
2018/02/12(月) 12:01:19.55ID:GfEZnF0r
>>797
ツール数の比較よろ
2018/02/12(月) 12:49:31.47ID:qRqzoJSM
>>798
brewあるで
2018/02/12(月) 13:00:39.48ID:2UKclRN3
>>795
Winでも足りるレベルじゃねーか
2018/02/12(月) 13:12:58.54ID:Bk9VmC4X
それ言ったらOSなんてなんでもいい
今時の開発環境はマルチプラットフォーム対応進んでるし
対応してなくても仮想化でどうにでもなる
中身はなんでもいいなら見た目やブランドが重要になるからわかってる人はMacを選択するんだよ
2018/02/12(月) 13:26:59.12ID:qRqzoJSM
>>801
あ、そうなの?じゃあWinでも足りるよ
2018/02/12(月) 13:46:46.04ID:eSqAJ2WH
じゃあぼくはDebianでいいや
805デフォルトの名無しさん
垢版 |
2018/02/12(月) 13:50:07.67ID:S+p/PDus
Windows10 で、WSL で、MS Store から、Ubuntu 16.04 LTS をダウンロードして、
Ruby をインストールする。
最初から、Python, vim も入っている

200MB ほどダウンロードして、850MB ほどの容量。
ただし、GUI版ではなく、Ubuntuサーバー

Java も入っていないけど、以下のパッケージがあるみたい。
* default-jre
* gcj-5-jre-headless
* openjdk-8-jre-headless
* gcj-4.8-jre-headless
* gcj-4.9-jre-headless
* openjdk-9-jre-headless
2018/02/12(月) 15:24:20.39ID:WEGvUxeo
面倒すぎワラタ
807805
垢版 |
2018/02/12(月) 16:25:40.40ID:S+p/PDus
Windows10 で、WSL で、MS Store から、Ubuntu 16.04 LTS をダウンロードして、
Ruby をインストールする

全パッケージの更新
sudo apt-get update
sudo apt-get dist-upgrade

sudo apt install ruby

日本語ロケールと、man コマンドの日本語化
sudo apt install language-pack-ja
sudo apt-get install manpages-ja manpages-ja-dev

touch ~/.bash_aliases

ホームディレクトリに、.bash_aliases というファイルを作って、そこに、
export LANG=ja_JP.UTF-8
と書いて、bash を日本語ロケールにする

Java も、sudo apt install で、インストールできる
808デフォルトの名無しさん
垢版 |
2018/02/12(月) 17:22:13.84ID:gfcybQxo
>>794
それは主に接客をやる営業の人向けの話だな。かといって客の前で客以上の服とか物とか持っていると悟られるのはまずい。
2018/02/12(月) 17:51:26.65ID:Dq1d51GH
>>800
標準でないから標準のツールが管理されない

>>799
先ず数えるツールがないとこから不便だな
810デフォルトの名無しさん
垢版 |
2018/02/12(月) 18:13:03.49ID:gfcybQxo
>>802
見た目やブランドを気にする人はそれによって人と競っているような人だけ。
普通の技術者はそんな所で競わないので結果的に見た目がどうでもよくなる。
2018/02/12(月) 18:25:15.14ID:gfcybQxo
>>807
環境変数 LANG の設定は ~/.bash_aliases じゃなくて ~/.bashrc に直接書いた方がいいのでは?
意味的にも違うしそもそも ~/.bash_aliases は ~/.bashrc で読むようになっているだけのスクリプトだ。
bash が直接読むファイルではないから違う環境に行ったら使えないかも知れない。
2018/02/12(月) 18:29:56.92ID:GfEZnF0r
>>809
なるほど、比較対象のmacがそれじゃ数えられないね
813デフォルトの名無しさん
垢版 |
2018/02/12(月) 18:42:41.44ID:pVBDRrcw
Javaて無償で使えなくなる予定なのか?
814デフォルトの名無しさん
垢版 |
2018/02/12(月) 18:43:18.02ID:gfcybQxo
>>801
Linux でも足りる。というか、普通のLinuxディストリビューションだと何もしなくても最初からインストールされている。
815デフォルトの名無しさん
垢版 |
2018/02/12(月) 18:51:02.13ID:gfcybQxo
>>813
Open JDK があるので無償で使い続けることは可能だ。
http://gihyo.jp/news/report/01/JavaOne2017/0002
816デフォルトの名無しさん
垢版 |
2018/02/12(月) 18:56:46.30ID:pVBDRrcw
>>815
なるほど
開発版と安定版みたいな感じか・・・
2018/02/12(月) 19:05:40.88ID:GfEZnF0r
>>816
アップグレードし続けないとすぐにサポート切れになるがな
2018/02/12(月) 19:19:05.13ID:gfcybQxo
RedHat みたいな感じかな。全部フリーのFedoraをテストして長期リリースにしてサポートで金を取る方式。
しかし元がフリーということは CentOS みたいなテスト後のやつを揃えたやつが出てくる可能性がある。
2018/02/12(月) 19:35:09.62ID:tHIswjpT
>>818
OpenJDKの改変はライセンス違反。
OpenJDKのソースはGPLだが、特許の利用許諾はJCPを通っていることが条件。
改変したらJCPの認定から外れるので、その瞬間にオラクルに特許侵害で巨額の賠償金を請求されることになる。
2018/02/12(月) 19:39:26.73ID:pZ0Kl34B
これってKotlinならセフセフなのか?
Javaはもうやめたほうが安全そうだな
821デフォルトの名無しさん
垢版 |
2018/02/12(月) 19:52:33.75ID:gfcybQxo
>>819
あ、そうなの? GPLは改変再配布を許すライセンスじゃなかったっけ?
2018/02/12(月) 19:59:41.06ID:tHIswjpT
>>821
GPLv2による利用許諾はあくまで著作権の利用許諾
配布者が利用者を特許侵害で訴えることの可能な欠陥ライセンスだ
オラクルにとっては極めて好都合なライセンスでもある
823デフォルトの名無しさん
垢版 |
2018/02/12(月) 20:00:36.76ID:gfcybQxo
>>820
今流行ってるのは Java VM 上で動く Kotlin だが、それ使い続ける限り何か影響はあるかも知れない。
しかし kotlin は JavaScript で動くようにするやつやネイティブも作っているのでそちらは影響を受けない筈。
2018/02/12(月) 20:03:47.34ID:gfcybQxo
>>822
なるほど。

でも特許部分をくり抜いた版って出せるんじゃないかな?
まあそれだともはやJavaではなくなるのかも知れないが。
2018/02/12(月) 20:14:07.01ID:tHIswjpT
>>824
さすがにそんなことをするくらいなら.NET Core向けにJavaコンパイラとJava APIを実装したほうが遥かに建設的で手っ取り早いだろうな
オラクルに言わせれば、APIには著作権が及ぶらしいからどのみち訴訟は避けられないわけだが、
海賊版JVMを作るのに比べたら裁判の勝ち目はあるだろう
2018/02/12(月) 20:19:55.45ID:NpQ9GJ9J
oracleに買われたものは何かしら不安が残るな
2018/02/12(月) 20:52:59.67ID:GfEZnF0r
少し前のMicrosoftやな
2018/02/15(木) 09:20:07.56ID:JTk+EmTS
実行スピードは落ちても構わないのでCPUにかかる負担を減らしたい場合
簡単な方法は無いでしょうか
2018/02/15(木) 11:10:46.44ID:QO/Sl0bJ
どんだけ抽象的だよ・・真性のクソ馬鹿かおまえ?
2018/02/15(木) 11:48:25.90ID:38r4ox9p
全部手動でやればいいんじゃね? CPUにかかる負担ゼロになるし。
831デフォルトの名無しさん
垢版 |
2018/02/15(木) 14:27:17.99ID:skblyvdp
>>828
sleepあちこちに入れたら?
2018/02/15(木) 15:19:28.29ID:JTk+EmTS
>>829-830
分からないなら黙っていてください。(NGしました)

>>831
ありがとうございます。
2018/02/15(木) 15:38:47.40ID:c0aRNk8h
NGアピールガイジ
2018/02/15(木) 17:58:52.48ID:KmltFhyK
文字列str1から文字列"str2"を検索する方法はこうですが
str1.indexOf("str2",0)

両方の文字を数値のbyte配列化してこれより高速に検索する方法ないですか?
地道に配列内を上からチェックしていけばいいですが
それよりスマートで高速な方法ないでしょうか?

文字処理は一般に遅いですが
結局str1.indexOfが一番はやい?
2018/02/15(木) 18:04:56.71ID:J5ESFAd4
正規表現使えば?
速度だけならどういう実装が一番速いのかは知らんけど
836デフォルトの名無しさん
垢版 |
2018/02/15(木) 18:35:20.81ID:skblyvdp
気に入らないならソースの String.java を参考にして自作してみれば?

もっと高速化する楽な方法はJNIで作ったり外部コマンド動かしたりする方法かな。
2018/02/15(木) 18:36:21.54ID:huciZvxI
>>834
電文処理など、文字列とBYTE列が交わるポイントは確かにあるけど、
可能な限り、文字列は文字列、BYTE列はBYTE列の世界で取り扱うほうが
いいと思うよ。
2018/02/15(木) 18:36:51.31ID:aKcpIhES
indexOfの実装にもよるんじゃねえの?
単なる文字列じゃなくなっても大手術しなくて済むように無理しないのが一番良いと思うけど。
バイト列だと思いもよらない文字の切れ目でヒットしたり地獄見ると思う。
入ってるかどうかだけが知りたいならcontainsにするか、それでも遅いならCharSequenceにしてからトライ木にするか。
2018/02/15(木) 18:59:28.98ID:38r4ox9p
>>834
ボトルネックでないのに無駄に高速化しようとするのは愚策だから止めた方が。

ボトルネックになってるのであれば同じ文書内を複数の単語で何度も検索するとか
同じ単語で大量の文書を検索するとか具体的なシチュエーションが出てくるだろうし、
そのシチュエーションに適した高速化すりゃいいだけ。

どんなシチュエーションでもindexOfを上回る
(苦労してコード書く意味があるようなレベルで)ってのはかなり難しい。
例えばbyte[]に変換ってのも検索と比較すれば十分重い処理だし。
2018/02/15(木) 19:16:55.17ID:KmltFhyK
了解しました
結局str1.indexOfでやるのがよさそうですね
2018/02/16(金) 16:28:18.34ID:M8XJLm2H
>>831
sleep入れても負担は増えるだけだろ
総計算量は同じでsleepを処理する計算が増える
手で処理するしかない
具体的なプログラムが提示されれば改善の余地はあるかも知れないが

時間あたりの負荷が高く他の処理の邪魔をしたくないという話ならプロセスのプライオリティを下げろ
2018/02/16(金) 16:35:42.12ID:M8XJLm2H
>>834
レベルと用途が不明だが
事前にindexを作っておいてそこから探すのが速い
843デフォルトの名無しさん
垢版 |
2018/02/16(金) 18:23:24.27ID:YSXjevvC
>>841
sleepを処理する計算?sleepの前処理のこと?それ以上にsleepすればいいのでは?
JavaVM内だとどうやってるのかは知らないが、sleepはVM内で指定の時間後に割り込み掛かるようにしてからスレッド停止してるだけじゃないの?
スレッド停止するならその分だけCPUタイムは食わなくなるよ。
2018/02/16(金) 21:46:38.60ID:FM33hhMj
windowsならこういうのあるよ。

Windows10 - プロセス(アプリ)の優先度を指定(変更)する方法
https://pc-karuma.net/windows-10-process-priority/
845デフォルトの名無しさん
垢版 |
2018/02/17(土) 00:39:13.30ID:EWYfJ6l0
Linux だと nice とか renice とか ionice ってコマンドがある。
2018/02/17(土) 09:55:42.68ID:lGVkh7Ch
>>843
なぜ負担をCPUタイムと置き換えてる
847デフォルトの名無しさん
垢版 |
2018/02/17(土) 17:06:22.90ID:EWYfJ6l0
>>846
負担と言ったら普通そうなのでは?
それに元の質問は「実行スピードは落ちても構わないのでCPUにかかる負担を減らしたい」だから
JavaVMのOSでのプライオリティそのままでやるとしたらプログラム中の sleep ぐらいしか方法
ないと思うが?
2018/02/17(土) 17:41:08.22ID:lGVkh7Ch
>>847
普通に考えると違うだろう
2018/02/17(土) 17:43:12.24ID:lGVkh7Ch
CPUタイムも増えるしな
850デフォルトの名無しさん
垢版 |
2018/02/17(土) 19:22:28.47ID:EWYfJ6l0
>>848>>849
時間当たりのCPU使用率は減って負荷は下がるだろ?
sleep してもそうならない環境なんかないと思うがなあ。
2018/02/17(土) 22:03:31.61ID:7nMe6yut
普通とは?
2018/02/17(土) 23:57:29.05ID:AFLiLGCz
× 普通に考えると
○ 説明できないし実はよく考えていない
2018/02/18(日) 06:52:07.13ID:4dAbe4pu
>>850
なんで負荷とか自分の思い込んだ質問に置き換えてんだよ
プログラマに向いてない
2018/02/18(日) 06:53:43.28ID:4dAbe4pu
CPUタイムとCPU使用率も違う
2018/02/18(日) 06:55:19.71ID:4dAbe4pu
> 負担と言ったら普通そうなのでは?

考えてなかったのか
2018/02/18(日) 09:03:49.34ID:vQFeCh33
この回答のプログラムなんですけど、
https://stackoverflow.com/questions/39530446/google-spread-sheets-appending-data-using-java

BatchUpdateSpreadsheetRequest batchRequests = new BatchUpdateSpreadsheetRequest();

と宣言時にオブジェクトを new して代入してますが、その後でまた

batchRequests = new BatchUpdateSpreadsheetRequest();

というコードが出てきます。 requests という変数でも同じことをしています。
これって何か意味があるんでしょうか、それとも無駄なことなんでしょうか?
2018/02/18(日) 09:17:09.22ID:Hu5U/RaQ
無駄
2018/02/18(日) 09:53:01.77ID:4dAbe4pu
>>856
その実装がどうだかは知らないけど
コンストラクタに副作用があれば意味ある
ただし1回目の代入は無駄

副作用とは、どっかと通信するとか、ファイルに出力するとか
2018/02/18(日) 10:19:16.26ID:vQFeCh33
>>857>>858
ありがとうございました。別に意味はないようですね。実際コードを削除しても動作は変わりませんでした。
2018/02/18(日) 16:52:39.12ID:oDDrqbus
>>853
お大事に。
2018/02/18(日) 19:11:48.11ID:4dAbe4pu
>>860
理解できないか
862デフォルトの名無しさん
垢版 |
2018/02/18(日) 19:49:59.31ID:fPQxo54S
理解できる人いるのかな?
2018/02/18(日) 20:46:32.15ID:NoRmyTXZ
>>862
で、普通とは?
864デフォルトの名無しさん
垢版 |
2018/02/18(日) 21:34:57.38ID:dCbMrjv3
もう無理だろう。sleepで負担が増えるとか書いてる時点で触れてはならない人と気づくべきだったということ。
2018/02/18(日) 21:44:15.08ID:xK1+NSGl
詭弁のガイドラインから推測すると、次はbusywaitの出番だな。
2018/02/19(月) 08:24:01.74ID:1DmhRUos
負担だから命令投げた時点で発生するものということだろ
CPUタイムで課金とかいうシステムならありえる
867デフォルトの名無しさん
垢版 |
2018/02/19(月) 09:29:52.10ID:PyvgqCqh
もうそっとしといてやれよ
2018/02/19(月) 19:55:22.15ID:/8ibrm1C
グーグルスプレッドシートのurlから、シートのIDを抽出するコートはどう書いたらいいですか?例えば、

https://docs.google.com/spreadsheets/d/1IS5WSNxSVSPYseqr0T4LJHU80paHR4vQqB8Cm4GAbiw/edit#gid=0

/d/ の後から次の / まで、 1IS5WSNxSVSPYseqr0T4LJHU80paHR4vQqB8Cm4GAbiw がIDになるのですが、

https://developers.google.com/sheets/guides/concepts
>スプレッドシート ID は、文字、数字、いくつかの特殊文字で構成される文字列です。 次の正規表現を使用すると、
>Google スプレッドシートの URL からスプレッドシート ID を抽出できます。

/spreadsheets/d/([a-zA-Z0-9-_]+)

と公式にあるんですが、具体的に java のコードで、IDを抽出するにはどうしたらいいですか?
869デフォルトの名無しさん
垢版 |
2018/02/19(月) 20:21:37.87ID:lymwUlC8
>>868
どうしても正規表現でやってみたいなら別として、そうでないなら普通に文字列切り出せばいいのでは?
2018/02/19(月) 20:39:01.32ID:/8ibrm1C
javaの入門サイトでググってみて自分で書いたコードがこれなんですけど、もっと簡単なやり方があれば有り難いんですが。

String url = "https://docs.google.com/spreadsheets/d/1IS5WSNxSVSPYseqr0T4LJHU80paHR4vQqB8Cm4GAbiw/edit#gid=0"; ;
Pattern p = Pattern.compile("/spreadsheets/d/([a-zA-Z0-9-_]+)");
Matcher m = p.matcher(url);
m.find() ;
System.out.println("IDは : " + m.group().replace("/spreadsheets/d/", ""));
871デフォルトの名無しさん
垢版 |
2018/02/19(月) 20:42:58.92ID:lymwUlC8
>>870
group(1)では?
872デフォルトの名無しさん
垢版 |
2018/02/19(月) 20:43:44.15ID:lymwUlC8
てか、なんでreplaceする必要がある?
873デフォルトの名無しさん
垢版 |
2018/02/19(月) 20:47:25.62ID:HFhbrMpy
>>870
正規表現使うならreplaceはいらないよ
m.group(1)でおk
874デフォルトの名無しさん
垢版 |
2018/02/19(月) 20:47:46.51ID:HFhbrMpy
>>872
それ聞く必要ある?
875デフォルトの名無しさん
垢版 |
2018/02/19(月) 20:54:02.91ID:HFhbrMpy
>>870
簡単にやるならこれで
String url = "https://docs.google.com/spreadsheets/d/1IS5WSNxSVSPYseqr0T4LJHU80paHR4vQqB8Cm4GAbiw/edit#gid=0";;
String id = url.substring(39, 83);
2018/02/19(月) 21:04:41.99ID:NZGEjg4E
こんなので性器表現w
IDの前のURLが完全に固定なら次のスラッシュのインデックスまで切り出せば良いだけやん
アホなのか?
877デフォルトの名無しさん
垢版 |
2018/02/19(月) 21:34:53.60ID:lymwUlC8
>>874
ないなw
2018/02/19(月) 21:42:48.48ID:/8ibrm1C
>>873
0が全体の文字列で、1からが()で囲んだグループってことでいいんでしょうか?なんか難しい。
2018/02/19(月) 22:06:52.28ID:GcoxPsSh
>>878
諦めろ
2018/02/19(月) 23:55:36.50ID:xIEc0S27
ブラウザの自動操作なら、iMacros とか、Selenium WebDriver を使えば?

Ruby のSelenium WebDriverでは、その要素に、id が付いていれば、
以下で、その要素を取得できる
element = driver.find_element(:id => "何々")

ブラウザの右クリックメニューから、要素を検査で、その要素のHTMLタグ表記を見れる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況