サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
waysaku.hatenablog.com
概念的・理論的な意味におけるプロセスとスレッド プロセスとはプログラムコードやメモリ空間などを含めた実行処理のインスタンスである スレッドとはプロセス内でメモリを共有し、並行化するためのより細かい単位である Linuxにおけるプロセスとスレッド プロセスは概念的なプロセスをそのまま実装されたもの プロセス内で並列・並行化するためのスレッドは2つの意味がある 軽量プロセス(LWP) プロセス内でスレッドを実現するが、スレッドの実行スケジュールはOSのスケジューラが行う なので、OSスケジューラから見たら、プロセスとスレッド(LWP)は同じ単位になる OSのスケジューラを使うので、マルチコアにおけるCPU資源の割り当てが可能 ユーザースレッド(アプリケーションスレッド) ユーザ空間で 実装 されたスレッド機構 実際は プロセス - LWP - ユーザースレッド という紐付けになる ユーザ空間で
Threadのメモリモデルを色々調べていくうちにJavaのスレッドでOSスレッドとどうやって紐付いてるんだろうと思って調べた。 JavaにおけるTheradスケジューラはOSに依存するみたいな説明がされているが、要はJVMプロセス内でOSスレッドを生成してそれをwrapしている。 知識としては知っていたけど、改めて確認してみたかったメモ public class Main { public static void main(String args[]) throws Exception { Thread.sleep(1000 * 60 * 60); // プロセス終了しないように止めておく } } javacしてjava Mainでjavaプロセス起動してからPID確認 root@dc4d74fd6f08:/# jps 5684 Jps 5498 Main ←ここにいるまずはjstackで
依存の解決の違い(dependencies, devDependencies, peerDependencies) 「親アプリで利用されるためのnpmモジュールを開発している時に、このモジュールをインストールするときはmoduleA:0.5.0と一緒にインストールする必要がある」 というケースを考える 親アプリ | |- このモジュール | | | |- moduleA1. このモジュールのpackage.jsonのdependenciesにmoduleA:0.5.0を書いた場合 親アプリにも自動的にmoduleA:0.5.0がインストールされるが、もし親アプリのpackage.jsonにmoduleA:1.5.0が設定されてた場合は上書きされて実行時エラーになる 2. このモジュールのpackage.jsonのdevDependenciesにmoduleA:0.5.0を書いた場合 親アプ
今回は私が今までチームマネジメントやヒューマンマネジメントを通して学んだTIPSを整理してみたいと思います。 マネジメント(≒コミュニケーション)を支える技術について都度メモして、自分への戒めとして利用していたものを箇条書きにまとめました。 ある特定の状況だけでしか適用できないものが多いですが、応用はいろいろ効くと思っています。 マネジメントの立場にこれからチャレンジしていきたい人の一助になればと思ってます。 ※自分向けのメモを整理しただけなので、一般的にこうあるべきという内容ではありません。 会議編 -全員の参加を促そう 全員の発言機会が均等になっているか常に意識しよう 一言でも意見を言うことによって、その議題を決めたという意識を持てる - 自分自身(チーム自身)で決めたという感覚に落としもう 「決められたこと」ではなく、「自分たちで決めたこと」という意識を促そう その決定が実行されなか
Java Flight Recorder(以下JFR)はいわゆるJavaプロセスのプロファイラ。 Java Mission Control(以下JMC)はJFRで取得したプロファイリングデータをGUIで見る事ができるビューア。 もともとはJRockitで搭載されていたのが, Java 7 Update 40以降で搭載されるようになった。 詳しくは http://www.infoq.com/jp/news/2013/10/misson-control-flight-recorderHotSpot JVMで動作するMission ControlとFlight Recorder で。 この機能は商用ライセンスのみになっているので、プロダクト用に利用する場合は商用ライセンス契約が必要。 ただし、JVMのオプションを指定することで利用できるようになっているのでお試しで利用することはできるみたい。 使
ある時子供を撮影するのによく使っているデジカメNEX-5の初期設定を誤ったらしく、全部の写真の日付が一年前になっていることに気づいた。 印刷する時に日付を入れる場合は全部一年ずれて日付がついてしまうので、今までNEX-5で撮った写真のexifを書き換えるためのスクリプトを書いた。 とりあえずpythonでexifをいじるために調べて最初に出てきたのはPython Imaging Libraryだったが、どうやらexifを読み込む機能しかないらしい。 http://www.pythonware.com/products/pil/ pyexiv2というのがイケてるらしいのでこれでスクリプトを書くことにする。 Python で JPEG の Exif などを扱う チュートリアル Mac上にvagrantでubuntu12環境を用意した上でpyexiv2をインストールする apt-get inst
畳込関数fold:foldrとfoldlの違い (あるいはfold_right, fold_left) - 一歩前進 無限リストをfoldrで扱う(foldlでは扱えない) haskellは遅延評価が特徴。 式の評価は外側から行う。 つまり外側の評価をするその時に内側の結果が必要なら計算する。 算数で例えると (1 + (2 * 3)) という計算の場合は、外側の1 + の部分を計算するためには(2 * 3)の結果が必要なので、しゃーなしにその時に(2 * 3)を計算するみたいな感覚っぽい。 なので foldl (+) v [x0,x1,...,xn] = (...((v + x0) + x1) ...) + xn foldr (+) v [x0,x1,...,xn] = x0 + (x1 + (... (xn + v)...)) のような場合だと foldlの場合は一番外側の式がxnの計
こんなクールな操作で開発ができるようになりたい intellij CEをダウンロード コミュニティエディションをダウンロードしてきます http://www.jetbrains.com/idea/download/index.html vimプラグインとScalaプラグインを追加 ググると出てくるのでその通りに。 Gradleプロジェクトを作成 Use Auto-import(build.gradleを修正すると各種インポートが自動的に行われるっぽい) Create directories for empty content roots automatically(今回で言うとScalaプラグインを作成した時のディレクトリ構造が自動的に追加されるっぽい) User default gradle warpper(Mac上のgraldeではなくgradle-wrapperを使う) build.
JDK6からすげー便利なvisualvmというプロファイラが付属されています。 内容についてはこちらに詳しく書いてあるので端折ります。 このvisualvmをリモートで接続する場合はJMX経由で接続する方法とjstatdというデーモン経由で接続する方法があるようです。 どう違うのか気になったのですが私が調べた限りだと機能的には違いはないようです。 ただ、jstatsデーモンを起動しておけば、そのサーバ上で動いているそのjstatdを起動したユーザーと同じユーザー権限で起動しているjavaプロセスを全部表示することができるのでjstatdのほうがいいような気がします。 ※いちいち全部のプロセスの起動スクリプトにJMXの設定いれるの面倒なので。 そんなわけでjstatdを起動しようとしたのですが、 http://d.hatena.ne.jp/tanamon/20091016/125567405
基本的にはドキュメントに書いてある通りセットアップすればOK http://developer.nvidia.com/cuda-toolkit-40 自宅サーバのOSはCentOS 5.6。 私は雰囲気でインストールしてたらこんなエラーが出るようになってしまった。 $ ./deviceQuery [deviceQuery] starting... ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) cudaGetDeviceCount returned 38 -> no CUDA-capable device is detected [deviceQuery] test results... FAILED Press ENTER to exit... ドキュメント
pythonでの並列プログラミングの勉強した結果を載せてみます。 pycudaというCUDAのpythonバインディングも試してみました。 Pythonによる並列プログラミング -GPGPUも- View more documents from Yusaku Watanabe single_thread_execute.py import numpy import time size = 256 arr_0 = numpy.arange(size*size) arr_1 = numpy.arange(size*size) arr_result = numpy.zeros(size*size) print "execute start" start = time.time() count = 0 for i in range(size): for j in range(size): tmp
アプリケーションからhttps通信を使って他のサーバと連携することはよくあると思います。 例えばfacebookやgoogleのOAuth認証のOPとやりとりする場合とか。 私は開発時はMac上で行なっているがその時点ではjava7はOpenJDKしかなかったので(現在はMac版のoracle jdk7が出てますね)、ほとんどの開発をOpenJDK上で行なっていたんですが、なぜかHttpComponentsを使ってhttpsの通信を行うと下記エラーが出る。 Exception in thread "main" java.lang.RuntimeException: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated at Main.execute(Main.java:62) at Main.main(Main.j
http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/java.html の-agentlib, -javaagentの項目について調べてみた あれ、なんか俺agentlibとjavaagentを勘違いしている、、、、? -agentlib -agentlib:hprofや-agentlib:jdwpなどプロファイラやデバッガなどを利用するネイティブライブラリを指定する 詳しくはJVMTI(Java Virtual Machine Tools Interface)を参照すること つまりCやC++を使って、VMにアクセスしてプロファイル情報などを引き抜いたり、デバッグ用に挙動を操作したりすることができるらしい JVMTIの日本語DOC http://java.sun.com/javase/ja/6/docs/ja/platf
とりあえず公式ドキュメント通りにhello worldでも試してみるかでいきなりつまづいた。 公式ドキュメント 公式ドキュメントにはiOSモジュールプロジェクト作成後にビルドしたzipファイルを cp com.test-iphone-0.1.zip /Library/Application\ Support/Titanium/ しろと書いてあるが、ここに配置してTitaniumSDKからLaunchしても /Library/Application Support/Titanium/modules/iphone/com.test/0.1 にはデプロイされずTitanium Mobileのログにも [ERROR] Script Error = Couldn't find module: com.test. シミュレータ画面には Application Error Couldn't find m
自宅のcuda環境を2.3から3.2にアップグレードすべくcudaまわりをキレイに再インストールすることにした。 その時の備忘録。 cudatoolkit_3.2.16_linux_64_rhel5.5.run devdriver_3.2_linux_64_260.19.21.run gpucomputingsdk_3.2.16_linux.run をそれぞれインストール。 インストール方法については http://developer.nvidia.com/object/cuda_3_2_downloads.html#Linux のLinux Getting Started Guide(PDF)に詳しく書かれているのでそのとおりに作業してすんなり。 (2.3の時はここらへんのドキュメントをしっかり読んでなかったのでえらい苦労した、、、) ~/NVIDIA_GPU_Computing_SDK
【前提知識として】 あるリソースにHTTPリクエストを行ったときに、そのリソースに変更がない場合はステータスコードとして304を返します。 このステータスコード304の場合はリクエストボディにデータを入れないのが原則なのでデータ通信量が減り、余計なトラフィックを減らすというのが目的の一つみたいです。 そして304を受け取ったクライアント(ブラウザ)はクライアントキャッシュから対象のリソースを読み込んで表示します。 基本的には200(リクエストOK)と304(変更ないからクライアントキャッシュを使用しろ)はブラウザ使用者からしてみれば表示内容は同じです 【やりたいこと】 Ajaxを利用したアプリケーションを作成しているときに200と304でクライアントの挙動を変えたい コンテンツを取得しにXMLHttpRequestでリクエストを投げた時にサーバー側では コンテンツに追加書き込みなどがあれば
先日書いた ドメインをまたいだクロスムービースクリプト(クロススクリプト) の回避方法があったのでメモ。 外部ドメインのswfを一旦バイナリで読み込み、そのバイトデータを元に再度Loaderで読み込む。 function loadSwf() { var request:URLRequest = new URLRequest("http://hogehoge.co.jp/hoge.swf"); var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, swfLoadComplete); loader.addEventListener(IOErrorEvent.IO_ERROR, ServerErr
CUDA開発用に購入したサーバマシンに肝心のグラボのドライバインストールに手こずったのでメモ。 グラボはInno3Dのnvidia GeForce 9800GT まずはドライバをダウンロード wget http://jp.download.nvidia.com/XFree86/Linux-x86_64/190.53/NVIDIA-Linux-x86_64-190.53-pkg2.run そのまま実行すると NVIDIA-Linux-x86_64-190.53-pkg2.run Unable to load module 'nvidia.ko'みたいなエラーが出たので色々調べた結果 ./NVIDIA-Linux-x86_64-190.53-pkg2.run --kernel-source-path='/usr/src/kernels/2.6.18-164.el5-x86_64 --kerne
GnuPG(RFC4880で策定されているOpenPGPのフリー実装) http://www.gnupg.org/ Thunderbird用のEnigmail (OpenPGPプラグイン) https://addons.mozilla.org/ja/thunderbird/addon/71 ・上記二つをインストールした後にThunderBirdを再起動。 ・「OpenPGP」-「設定」で表示される「OpenPGPの設定」ダイアログで、GnuPGPの実行パスを指定。 ・「OpenPGP」-「鍵の管理」を表示される「OpenPGP鍵の管理」ダイアログの「生成」-「新しい鍵」を選択、必要項目を入力して、自分用の鍵 (秘密鍵&公開鍵のペア) を生成。 ※このダイアログの「ファイル」→「公開鍵をメールで送る」で作成した公開鍵を添付したメール作成画面を開くことが可能 ・PGPで相手にメールを送信すると
スレッド数 :50 Ramp-Up期間:10 ループ回数:3 この場合は10秒間で50スレッドを生成する。 つまり1秒間に5スレッドを生成する。 このループ回数の意味は上記の場合、「5スレッドを生成する」を1秒間に3回ループするという意味らしい。 つまり、1秒間に15スレッドを生成することになる。(ややこしいな) ※1スレッドを生成 = 1リクエストを送る 例えば、1時間で64800リクエスト(秒間で180リクエスト)の負荷をかけたい場合は スレッド数 :6000 Ramp-Up期間:6000 ループ回数:180 になる。 しかし、スレッドグループ一つでこの設定を実行すると1秒間全体を使わずにで一気に180スレッドを生成してしまう。 これだと、180リクエストが秒内で平均的に実行されずに、ドカンと実行されてしまって厳密な意味で平均的に負荷がかけられない 理想は1秒全体を使って平均的にスレッ
SAStrutsを触る機会があったので、いろいろと書いてみる。 そもそもS2StrutsとSAStrutsの違いってなんなの?ってところから始まるわけなんですが・・・ ひがさんのブログでは SAStrutsかS2Strutsか 既にS2Strutsで開発している案件の追加開発ならS2Struts。 JDK1.4をつかうならS2Struts。 それ以外は、SAStruts。 とあったが、根本的に何が違うのかがよくわからなかった。 私の印象では
YUIにおけるイベント管理 で書いたとおりイベントハンドラonloadは画像を含むすべてのコンテンツがロードされてから関数を実行する。 それがいやな人は、JQueryのdocument.ready()とかYUIのYAHOO.util.Event.onDOMReadyを利用してDOM構造が構築された時点で関数を実行するようにする。 DOM構築がされていないのにappendChildをやるとブラウザが(IEが)クラッシュするからだ。 (「インターネットサイトhttp://〜〜は開けません。操作は中断されました」となんとも不親切なエラーが出る) #googleMapの貼り付けで同エラーが発生するのもDOMの動的な生成が原因かもしれない。(GoogleMap貼り付けたことないから知らないけど DOM構造が実行可能かどうかの判別方法はブラウザ毎に方法があるが、YUIライブラリのonDOMReadyの
3年ぐらい前に友人に頼まれて作ったWEBアプリが動かなくなった。 原因はレンタルサーバにインストールされているPHPがPHP4から5にアップグレードされたためだ。 当時はPHP5対応版のmojavi3は開発版しかなかったので、mojavi2を選択したのだが、現在はどうなってるんだろう... と思ったらwww.mojavi.org落ちてる... これじゃmojaviフレームワークだけバージョンアップさせることもできない・・・ しかたなくエラー箇所を手動で修正する。 一つ目 FATAL [/Actionクラス名Action.class.php:23] date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the
以前書いた記事に間違いがったので訂正とともに再調査。 ・ページを読み込んだ後にjavascript関数を実行させたい場合にonloadイベントを使用して関数を実行しようとすると画像やCSSなどの静的ファイルも読み込んでからでないと関数が実行されない。 とはいえ、setTimeoutなどを利用して遅延実行させてもDOMツリー構築前にappendChildなどのDOMツリーをいじる処理をするとエラーが発生する。 そのためJQueryなどのフレームワークではDOMツリー構築完了を検知して関数を実行するイベントdocument.ready()を用意している。 同じような機構がprototype.jsなどにもあるが、どのように検知しているのかを調べてみた。 方法は FF、opera系 safari(webkit)系 IE で分かれている。 FF、opera系 DOMContentLoadedというイ
Linux上(CentOS5.0)のTomcatで稼働するアプリケーションにリモートでプロファイリングを行う。 エージェントコントローラのインストール http://www.eclipse.org/tptp/home/downloads/からOSに応じたアーカイブをダウンロード。 今回はCentOS5.0を使用しているのでagntctrl.linux_ia32-TPTP-4.4.0.2.zipをダウンロードする。 #サーバー上で展開し、任意の場所に配置する mkdir /usr/local/tptp cp agntctrl.linux_ia32-TPTP-4.4.0.2.zip /usr/local/tptp/ cd /usr/local/tptp unzip -o agntctrl.linux_ia32-TPTP-4.4.0.2.zip #エージェントコントローラ用の設定ファイル(ser
JMS(Java Messaging Service)を利用すると他オブジェクトへ非同期で処理を依頼することができるようになります。 Servletなどでメールの大量送信を伴うような処理は非同期で行ったほうがいいかもしれない。 今回はJMSの実装であるAcitveMQを使用するため以下からダウンロード http://activemq.apache.org/download.html 解凍して出てきたフォルダのlib以下をパスの通っているところへ配置する。 〜ActiveMQの流れ〜 ・JMSサーバ(ActiveMQ)起動 ・受信時に実行するクラス(キュー)をActiveMQに登録 ・クライアントアプリケーションがActiveMQへメッセージ送信すると、ActiveMQは渡されたキーに該当するクラス(キュー)へメッセージを渡す ・メッセージを受け取ったクラス(キュー)はそのメッセージを元に処
このページを最初にブックマークしてみませんか?
『Flicker's Style++』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く