mpro-gram の回答履歴
- メモリやCPU使用率が高すぎる?
Java 1.6で動作するアナログ時計のようなものを作っていて、 一応動作はするのですが、メモリやCPUの使用率が常駐に向かない程度まで高くなってしまいます。 具体的には、メモリが100MB前後、CPUが10%前後で安定しています。 増え続ける様子はないのですが Intel Core i7 の10%はかなりの割合です。 ここに書いているソースが全てではないのですが、大きな間違いや代替案等ありましたら教えていただけるとありがたいです。 Jpanel に 盤面、長針、短針、秒針 を描画するのが主な構造です。 秒針はスムーズに廻るタイプなので概ね30FPS程度の間隔で repaint() を呼んでいます。 アニメーションは専用のスレッドを使い、次のようにしています。 while(true){ try{Thread.sleep(sleepTime);}catch(InterruptedException ie){} SwingUtilities.invokeLater(new Runnable(){ public void run(){ paintPane.repaint(); } }); } JPanelのpaintComponentは次のとおりです @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.scale(scale, scale); //shorthand.draw(g)などの描画処理 g2d.dispose(); 針の描画はこちらです。 public void draw(Graphics g){ angle=(角度の算出処理) Graphics2D g2d = (Graphics2D) g.create(); AffineTransform oldtr = ((Graphics2D)g).getTransform(); g2d.translate(this.posX - this.axisX, this.posY - this.axisY); g2d.rotate(Math.toRadians(angle), this.axisX, this.axisY; g2d.drawImage(this.image, 0, 0, null); g2d.setTransform(oldtr); g2d.dispose(); } 時計の針専用のクラスを用意し、針の画像、アングル、位置などの情報をもたせています。 全体のサイズは300x300ピクセル前後です。
- NOT INをNOT EXISTSで書き直したい
こんにちは。SQLでNOT INが実行速度が遅いため、EXISTSで書き直したいのですが、思っている結果がでません。 SQLのどこが間違っているかお教え頂けませんでしょうか? ■ ・テーブル名:R_TABLE ・フィールド:id データ: id(ユニークではない) 001 002 003 003 003 007 008 009 ■ ・テーブル名:P_Master ・フィールド:id データ: id(ユニーク) 001 002 003 ■やりたい事 R_TABLEのデータを条件によって削除したい。 条件はP_MASTERに無いR_TABLEの行を削除したいです。 ■欲しい結果 R_TABLE 001 002 003 003 003 ■書いたSQL DELETE FROM R_TABLE WHERE R_TABLE.id NOT IN (SELECT R_TABLE.id FROM R_TABLE INNER JOIN P_MASTER ON R_TABLE.id = P_MASTER.id) これは正しい結果がでました。 書きなおしたSQL DELETE FROM R_TABLE WHERE R_TABLE.id WHERE NOT EXISTS (SELECT R_TABLE.id FROM R_TABLE INNER JOIN P_MASTER ON R_TABLE.id = P_MASTER.id) 結果はR_TABLEから何も消されていませんでした。 どこを修正すれば正しい結果が得られるでしょうか? 副問い合わせで、R_TABLEとP_MASTERのINNER JOINの結果が得られ、R_TABLEからINNER JOINに含まれないデータ削除しろという命令だと思っていたのですが違うみたいです。 どこを修正すればよろしいでしょうか? よろしくお願いします。
- CakePHPの表の更新・追加・削除の方法について
CakePHPを使用して開発を行っております。表の更新・追加・削除について質問させてください。 現在は以下のようして、更新・追加・削除を行っております。 ・html <tr> <td><input type="hidden" name="hoge[0][id]" value="10" ><input name="hoge[0][col_1]"></td><td><input name="hoge[0][col_2]"></td> </tr> <tr> <td><input type="hidden" name="hoge[0][id]" value="11" ><input name="hoge[1][col_1]"></td><td><input name="hoge[1][col_2]"></td> </tr> ・cake $this->request->dataで以下を取得して、 hoge=>array( 0=>array( 'id'=>10, 'col_1'=>'', 'col_2'=>'', ), 1=>array( 'id'=>11, 'col_1'=>'', 'col_2'=>'', ) ) ループで1レコードづつsave()しています。 foreach($this->request->data['hoge'] as $v){ $this->create();//初期化処理 $this->save($v);//save()はidの値が既にテーブルに存在すれば、update。存在しなければ、insertする。 } 表で行の削除の場合は、jsで論理削除用のカラムのvalueを変更して、レコードをhidden()しています。 表で行の追加は、非表示で用意している以下をjsで取得後、REPLACEを数値(表の行数+1)に置換して、表の最下部に追加しています。 <tr> <td><input name="hoge[REPLACE][col_1]"></td><td><input name="hoge[0][col_2]"></td> </tr> <tr> <td><input name="hoge[REPLACE][col_1]"></td><td><input name="hoge[1][col_2]"></td> </tr> 前置きが長くなりましたが、ここからが質問になります。 行追加の処理が、別で表を用意していて冗長のため改善したいと考えています。 対策として、表の最下部を取得してきて、数値部分をインクリメントして、表に追加するという案を考えたのですが、もっと良い方法があるような気がしています。(nameのつけ方などで何かないかなど) 表の更新・追加・削除でスタンダードな方法や、他の方がどのようにやっているのかを知りたいです。 どうぞよろしくお願いします。 ※ CakePHPのバージョン : 2.3 jQueryのバージョン : 1.7
- Javaの質問です
javaでリストの比較をしたいと思っています。 ファイルAの中身を抽出したものをArrayListで格納しました。そして次にファイルBの中身を抽出しました。 ファイルBで抽出したものとファイルAのリストの中身を検索し一致しているものがあったら ファイルBの中身の数値を追加したいと思っています。 ファイルAの中身 1,田中 2,山田 3,加藤 この中身をListにしたのが↓ ファイルAのList(カンマ区切り) [1][田中] [2][山田] [3][加藤] ファイルBの中身 1 test 100 となっており 一致したらファイルAに追加したい数値とはファイルBでいう100という数字です。 どうやって2つのものを比較をし検索したらいいのでしょうか? Mapというものを見つけたのですがこの例でいったらどのように書けばいいのでしょうか... よろしくおねがいしますっ
- 締切済み
- Java
- ankoromochiii
- 回答数2
- 引数と戻り値がわかりません
Javaを勉強中なのですが、引数と戻り値がよく分かりません。 自分で買ったテキストをベースに進めているのですが、ここで詰まってしまいます。 具体的に表現するのが難しいのですが、値がどこに行ってどういう流れになっているのかが 自分で追えず混乱してます。 public static method X (String name){ return name; ↑こういう記述です。 「値をとってくる」、「呼び出し元へ値を返す」という事が分かってないのだと思います。 まだまだ知識が覚束ないのでわかりにくいかもしれませんが、 ご教授願います。
- 締切済み
- Java
- noname#201225
- 回答数2
- ストアドファンクション⇒プロシージャ呼出し失敗する
参考の通りに、ストアドプロシージャ作成SQL文を発行し、 コマンドライン上からは、以下の通りの結果1となり、 レコードがinsertされます。 <結果1> mysql> call logger('ほげ', 'ホゲ'); Query OK, 1 row affected (0.01 sec) mysql> select * from PROCEDURE_LOG; +--------+--------+---------------------+ | NAME | QUERY | EXECUTE_DATE | +--------+--------+---------------------+ | ほげ | ホゲ | 2014-03-26 10:41:26 | +--------+--------+---------------------+ 1 row in set (0.00 sec) ですが、testというストアドファンクションから呼び出してみましたが、 以下の結果2の通り、失敗します。 <結果2> mysql> select test(); ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger <test> BEGIN CALL logger('test','1'); RETURN CONCAT('END'); END 現在動作している環境では、どこでエラーが発生したかがわからず、 ロガーの処理をなんとしても実装したいのですが、 いろいろ試してみても、解決できませんでした。 ご教示のほど、よろしくお願いします。 <参考> http://treeapps.hatenablog.com/entry/20120106/p1 <ストアドプロシージャ作成SQL文(logger)> SET NAMES UTF8; delimiter // -- ログ出力 DROP PROCEDURE IF EXISTS logger// CREATE PROCEDURE logger( IN PROCEDURE_NAME TEXT, IN SQL_TEXT TEXT ) BEGIN DECLARE CNT INT; CREATE TABLE IF NOT EXISTS PROCEDURE_LOG ( NAME VARCHAR(64), QUERY TEXT, EXECUTE_DATE TIMESTAMP, KEY IDX1 (NAME, QUERY(64), EXECUTE_DATE) ) ENGINE=MYISAM DEFAULT CHARSET=UTF8; -- 古いログを削除 SELECT COUNT(*) INTO CNT FROM PROCEDURE_LOG; IF CNT >= 1000 THEN DELETE FROM PROCEDURE_LOG LIMIT 1; END IF; -- テーブルにログを記録 SET @sql = CONCAT('INSERT INTO PROCEDURE_LOG VALUES (', QUOTE(PROCEDURE_NAME), ',', QUOTE(SQL_TEXT), ', null)'); PREPARE stmt FROM @sql; EXECUTE stmt; END // delimiter ;
- ベストアンサー
- MySQL
- Kamen_Ride
- 回答数1
- pythonスクリプトの停止方法について
debianでpythonを最近始めました。スクリプトの起動は sudo python 何々.py (私のスクリプトはスドが無いと、たまたまなのでしょうかエラー続出して止まるので) で出来ますが、その時点で端末のプロンプトは無くなってしまうスクリプトみたいです。 いつもは停止はキィ~ボードでコントロールを押しながらシーを押して停止しています(プロンプトが再出します)。 他にもプロセスアイデーを使って停止もできるようですが、その時は別に端末を開いて入力していますが、プロセスアイデーはスクリプトを実行させる度に変わってしまうみたいで、毎回これを使うのは先にプロセスアイデーを調べなければならず大変不便です。 コントロールとシーやキルスペースプロセスアイデー以外での停止方法は無いのでしょうか? 検索サイトで色々調べても起動の方法は見つけられても、停止の方法は見つけられませんでした。または検索方法に問題ありで的を外している? ご存知の方是非教えて頂ければと思います。
- 締切済み
- その他(プログラミング・開発)
- Qimooh
- 回答数2
- 現在位置より2つ上のディレクトリパスを取得
現在の位置が/aa/bb/cc/dd/だった場合、 /aa/bb/のディレクトリを取得するにはどのようにすればよろしいでしょうか? 宜しくお願いします。
- テーブルに割り当てられたシノニム名を検索するには
Oracleにはテーブルに割り当てられたシノニムの名前がわかるテーブル(名前は忘れました)が あるのですがMySQLには存在するのでしょうか。あるのであればそれはどのようなテーブル名 でしょうか。
- SQLで連続したカラムが何個あるかを求める方法
お世話になっております。 PHPとmysqlでサイトを作っておりまして、そのログを分析しようとしています。 あるテーブルにユーザー名とログイン日付が入ったテーブルが有ったとして、その中で連続○日ログインしていた人は○人という結果を取りたいと考えているのですがこれをSQLで処理する方法はありますでしょうか? 今のところ、PHPで全データを取った後にPHP側で処理するしかないかと思っているのですが、件数が多いため可能であればmysql側で処理したいと思っています。 日付はUNIXTIMEに直すなどすればINTEGERに変換出来るとは思っているのですが、日付型(難しいようであればINT型の連続値でも問題ありません)でSQLで処理出来る方法はあるのでしょうか? ○○結合をすれば良いなど手がかりなど教えていただけると助かります。 ■テーブル username login_date ほげ 2014/5/1 ほげ 2014/5/2 ほげ 2014/5/3 ほげ 2014/5/4 ふーばー 2014/5/2 ふーばー 2014/5/3 あああ 2014/5/1 あああ 2014/5/3 あああ 2014/5/4 ■ほしい結果 4日連続 1名 2日連続 2名
- 締切済み
- MySQL
- tasukete_goo
- 回答数4
- 対戦結果の並び替えを行いたいのですが
1000人程度が対戦をしてその勝敗をCSVファイルで記録しています。 そのCSVファイルにはスコアなどはなく、横列に 対戦番号,勝者名,敗者名 というような形で記録しており、このCSVに基づいて強い順に並び替えたいと思っています。 対戦は総当たりではなく対戦回数も各自バラバラで何度もいろいろな人と戦った人もいれば 1度しか誰かと戦ったことがない人もいます。ただし、同じ人同士の対戦は全くありません。 スクリプトかなにか(pearlなど)で、並び替えの処理を行ってみたいのですが いいアイデア・サンプルがあれば教えてください。
- 締切済み
- その他(プログラミング・開発)
- aiokw
- 回答数3
- DBで第1正規形と第2正規形の違いは?
基本情報処理試験の勉強してます。 とはいえ日常的にDBをいじってるので、 一番ストリクトにDBを切ったものが第3正規形ということはわかります。 ですが、第1正規形と第2正規形の違いがいまいちぴんときません。 どこがポイントでしょうか? よろしくお願いします。
- ベストアンサー
- その他(データベース)
- dicemiyagawa
- 回答数2
- 【PHP】postで連想配列のキーを送信したい
PHP初心者です。 (実は似たような質問を以前yahoo知恵袋さんで投げた者です) ファイルのアップロードフォームを作っています。 まず、セレクトボックスを作り、セレクトボックスで選んだ値によって、 アップロード先を分けたいと思っています。 セレクトボックスで「理科」を選んでアップロードしたファイルは フォルダ「001」に、セレクトボックスで「数学」を選んでアップロードした ファイルはフォルダ「002」に入る、いう具合です。 セレクトボックスを連想配列を使って作り、 フォルダ分けは連想配列のキーの値を使うことによって解決しようとして 下のように作ってみたのですがうまくいきません。 どうすればよいでしょうか? よろしくお願いします。 **アップロードフォーム** <select name="subjects" id="subjects"> <?php $subjects = array('001'=>'理科','002'=>'数学','003'=>'英語'=>'); foreach ($subjects as $subject) { print('<option value="'.$subject.'">'.$subject.'</option>'); } ?> </select> <form action="./upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="upfile" size="30px"/><br/> <input type="file" name="upfile" size="30px"/><br/> <input type="file" name="upfile" size="30px"/><br/> <button type="submit"> 送信</button> </form> **受信側** <?php $subjects = array('001'=>'理科','002'=>'数学','003'=>'英語'=>'); $keyNum = array_search($_POST['subjects'], $subjects); if( isset( $_FILES["upfile"] ) ) { foreach( $_FILES["upfile"]["error"] as $key => $error ) { if( $error == UPLOAD_ERR_OK ) { $tmp_name = $_FILES["upfile"]["tmp_name"][ $key ]; $name = $_FILES["upfile"]["name"][ $key ]; if (move_uploaded_file($tmp_name, "$keyNum/" . $name)); { echo $_FILES["upfile"]["name"] . "アップロード完了"; } } } } ?>
- ベストアンサー
- PHP
- twoaday1999
- 回答数3
- 別のDB(Table)からの複数行のINSERT
Wordpressにあるusermetaというテーブルに、 別のDBのテーブルからデータをINSERTしたいのですが、 #1241 - Operand should contain 1 column(s) というエラーが表示されてうまくいきませんでした。 具体的なSQL文は、 insert into ***_usermeta (umeta_id,user_id,meta_key,meta_value) select (null,tableBid,'first_name',''), (null,tableBid,'last_name',''), (null,tableBid,'nickname',tableBname), (null,tableBid,'***_capabilities','a:1:{s:10:\"subscriber\";b:1;}'), (null,tableBid,'***_user_level','0') from dbB.tableB where tableBname<> 'Admin' dbBのtableB にあるAdmin行以外を対象としています。 実際にはもう少しデータが多いのですが、select (null,uid,'first_name','') from ・・・ だけにしても同じエラーが出ましたので、構文の書き方が間違っていると感じています。 (別のDBではなく、同じDBの別のTableからのINSERTでも同じエラーが表示されました) 上記のようなケースの場合、どのようにSQL文を書けばよいのでしょうか? お分かりになられる方がいらっしゃいましたら、ご教示頂けますと幸いです。 宜しくお願い致します。
- 対戦結果の並び替えを行いたいのですが
1000人程度が対戦をしてその勝敗をCSVファイルで記録しています。 そのCSVファイルにはスコアなどはなく、横列に 対戦番号,勝者名,敗者名 というような形で記録しており、このCSVに基づいて強い順に並び替えたいと思っています。 対戦は総当たりではなく対戦回数も各自バラバラで何度もいろいろな人と戦った人もいれば 1度しか誰かと戦ったことがない人もいます。ただし、同じ人同士の対戦は全くありません。 スクリプトかなにか(pearlなど)で、並び替えの処理を行ってみたいのですが いいアイデア・サンプルがあれば教えてください。
- 締切済み
- その他(プログラミング・開発)
- aiokw
- 回答数3
- JPanelの重ね方/OverlayLayout他
添付した画像のような「ピラミッドのように大きいコンポーネントの上にだんだん小さなコンポーネントを重ねていく」のではないコンポーネントの重ね方がしたいです。そのようなことは可能なのでしょうか? やりたいこととしては、メインとなるパネルのその上で別のレイアウトをしたパネルを重ねたいです。 普通のレイアウトマネージャでaddで重ねるのでは、どうやってもうまくいきません。 OverlayLayoutも試してみましたが、以下の二つのパターンではうまくいきませんでした。 注:TopPanel,MainPanel,StringPanelはJPanelを継承した自作のクラスです 理想はMainPanel < StringPanel < TopPanelなのですが・・ JPanel basePanel = new JPanel(); basePanel.setLayout(new OverlayLayout(basePanel)); topPanel = new TopPanel(); topPanel.setOpaque(false); basePanel.add(topPanel); mainPanel = new MainPanel(); mainPanel.setLayout(new BorderLayout()); stringPanel = new StringPanel(); stringPanel.setPrintSpeed(50); stringPanel.setBorder(new BevelBorder(BevelBorder.RAISED)); mainPanel.add("South", stringPanel); basePanel.add(mainPanel); add(basePanel); この場合だと、MainPanel < TopPanel < StringPanelの関係になってしまいます JPanel basePanel = new JPanel(); basePanel.setLayout(new OverlayLayout(basePanel)); mainPanel = new MainPanel(); mainPanel.setLayout(new BorderLayout()); stringPanel = new StringPanel(); stringPanel.setPrintSpeed(50); stringPanel.setBorder(new BevelBorder(BevelBorder.RAISED)); mainPanel.add("South", stringPanel); basePanel.add(mainPanel); topPanel = new TopPanel(); topPanel.setOpaque(false); basePanel.add(topPanel); add(basePanel); こうするとTopPanelの描画が見えなかったのでおそらくTopPanel < MainPanel < StringPanelとなってます。 ご教示願います・・!
- SQL キーワード検索にて
お世話になります。 DBからSQLでキーワードによる検索をかけるときですが、 二つ以上のワードがあるときに、一つのキーワードがほかのキーワードと かぶってしまう場合、例えば゛、『あいうえお』と『いうえ』等で絞り込むと、 結果的に『あいうえお』が含まれるものだけが該当しますが、これを、 『あいうえお』を含み、更にそれ以外にも『いうえ』が含まれるものを 絞り込むには、どうすればよいでしょうか。 つまり、『あいうえお』のみしか含まれないものは該当しないようにする方法です。 現在のSQLは、 (SELECT * FROM xxxx WHERE tablename LIKE '%あいうえお%' AND tablename LIKE '%いうえ%') のような感じです。 使用しているDBは、MySQL、SQLiteです。 何卒よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- tatapatank
- 回答数5
- JPanelの重ね方/OverlayLayout他
添付した画像のような「ピラミッドのように大きいコンポーネントの上にだんだん小さなコンポーネントを重ねていく」のではないコンポーネントの重ね方がしたいです。そのようなことは可能なのでしょうか? やりたいこととしては、メインとなるパネルのその上で別のレイアウトをしたパネルを重ねたいです。 普通のレイアウトマネージャでaddで重ねるのでは、どうやってもうまくいきません。 OverlayLayoutも試してみましたが、以下の二つのパターンではうまくいきませんでした。 注:TopPanel,MainPanel,StringPanelはJPanelを継承した自作のクラスです 理想はMainPanel < StringPanel < TopPanelなのですが・・ JPanel basePanel = new JPanel(); basePanel.setLayout(new OverlayLayout(basePanel)); topPanel = new TopPanel(); topPanel.setOpaque(false); basePanel.add(topPanel); mainPanel = new MainPanel(); mainPanel.setLayout(new BorderLayout()); stringPanel = new StringPanel(); stringPanel.setPrintSpeed(50); stringPanel.setBorder(new BevelBorder(BevelBorder.RAISED)); mainPanel.add("South", stringPanel); basePanel.add(mainPanel); add(basePanel); この場合だと、MainPanel < TopPanel < StringPanelの関係になってしまいます JPanel basePanel = new JPanel(); basePanel.setLayout(new OverlayLayout(basePanel)); mainPanel = new MainPanel(); mainPanel.setLayout(new BorderLayout()); stringPanel = new StringPanel(); stringPanel.setPrintSpeed(50); stringPanel.setBorder(new BevelBorder(BevelBorder.RAISED)); mainPanel.add("South", stringPanel); basePanel.add(mainPanel); topPanel = new TopPanel(); topPanel.setOpaque(false); basePanel.add(topPanel); add(basePanel); こうするとTopPanelの描画が見えなかったのでおそらくTopPanel < MainPanel < StringPanelとなってます。 ご教示願います・・!