タグ

ブックマーク / ascii.jp (58)

  • Goならわかるシステムプログラミング

    Goで始める、すこし低レイヤのプログラミング入門。入出力、ネットワーク、メモリなど、現実の世界でプログラムが動くために必要な機能をプログラム言語Goを通して覗いてみよう。OSの機能とは何か、それをプログラミングでどう利用するのか、システムプログラミングの世界をプログラマの視点から眺めていく連載企画。 2017年06月21日 17時00分 プログラミング+ Go言語によるプログラマー視点のシステムプログラミング 第20回 Go言語とコンテナ 連載の最終回。この連載ではプログラムがコンピュータ上で動くときに何が起きているのかをGo言語のコードを通して覗いてきました。今回はその締めくくりとしてコンテナについて紹介します。 2017年06月07日 21時30分 プログラミング+ Go言語によるプログラマー視点のシステムプログラミング 第19回 Go言語のメモリ管理 ソフトウェアにとってメモリは不

    Goならわかるシステムプログラミング
  • オープンソースのAI学習カー「Donkey Car」を走らせてみた!

    UCバークレーの校内では100台の弁当運びロボがウロチョロしている 自動運転やMaaS(モビリティ・アズ・ア・サービス)が大きく注目を集めているが、もう1つの大きな波は「お弁当運びロボット」かもしれない。先週のMITテクノロジーレビューの記事「UCバークレー学内で出前ロボットが炎上、学生らが追悼」という記事を見ていて、いちばん驚いたのは「バークレー校内でべ物を配達する100体の出前ロボットのうちの1体」とさりだけなく書かれていたことだ。 実は、MITテクノロジーレビューは2週間前にも「歩くランチボックス、ポストメイツがLAで無人配達を開始」という記事をのせている。その中には、「新たに生まれつつある配達ロボット産業」というくだりも出てきて、彼らが目下注目しているのは「お弁当運びロボット」らしい。 私もまったく彼らと同じように「お弁当運びロボット」に可能性があると思う。無人配達ロボットは、U

    オープンソースのAI学習カー「Donkey Car」を走らせてみた!
  • きれいで読みやすいJavaScriptを書く デコレーターの基本を先取り

    ES2015の登場とトランスパイラーの普及により、コードや記事の中で言語の新機能を見かけることが増えました。とりわけ難しい新機能がJavaScriptのデコレーターです。 デコレーターはAngular2に採用されたことで人気が高まりました。デコレーターは現時点ではAngularではTypeScriptで使うことができ、JavaScript(ECMAScript)のプロポーザルではステージ2(編注:ドラフト)です。将来的にはJavaScriptにも採用されるでしょう。そこで、デコレーターの役割や、デコレーターを使ってきれいで読みやすいコードを書く方法を紹介します。 デコレーターとは デコレーターは、コードの一部をほかのコードでデコレート(装飾)するように包むことで、「関数合成」や「高階関数」と表現されていました。JavaScriptで実装可能で、具体的には次のようにある関数をほかの関数で包む

    きれいで読みやすいJavaScriptを書く デコレーターの基本を先取り
  • 服にセンサーを搭載し動きを検知する「e-skin」個人向けに提供

    Xenomaは7月19日、カメラなしでユーザーの動きを認識するスマートアパレル「e-skin」を個人向けに提供すると発表した。 これまではスポーツ企業や教育機関など法人向けのみの提供であったが、量産体制が整ったため個人ユーザー向けの提供ができるようになったという。 e-skinは、布の繊維に伸縮する配線やセンサーを搭載した電子回路基板「Printed Circuit Fabric(PCF)」を使用したスマートアパレル。肩や脇の下など計14個のセンサーを搭載し、電気抵抗の変化を検知して身体の動きを把握する。

    服にセンサーを搭載し動きを検知する「e-skin」個人向けに提供
  • Bootstrapはすでに下火に——海外の開発者1600人に聞いたCSS開発のいま

    WPJが提携するWeb開発者向けメディア「SitePoint」ではCSS開発者を対象にした大規模なアンケート調査を実施しました。その結果から、いま何を学ぶべきかが見えてきました。 CSS開発の現場で実践されている習慣、CSSに関する知識の量、理解度などの情報を集める目的で実施した「究極のCSS調査」には、6週間で1600名以上からの回答が寄せられました。このほど集計が完了したので、結果を発表します! フォローアップコメントと考察、昨年の結果との比較、コメント欄に寄せられた質問の回答も掲載します。 アンケートの結果は以下を参照してください。 結果は上下の矢印でめくりながら見られます。 調査の目的 まず、読者からは調査の目的とフィードバックで得られることについて、質問がありました。私がSitePointのエディターとしてもっとも優先しているのは、読者を理解することです。いろいろな技術に関して、

    Bootstrapはすでに下火に——海外の開発者1600人に聞いたCSS開発のいま
  • いまどきのWebアプリをどう作るか? フルスタックJavaScript開発のコツ

    数週間前、GitHubプロジェクトをシェアしている開発者に出会いました。そのプロジェクトはTrelloのクローンで、React、Redux、Express、MongoDBからなるプロジェクトでした。全階層、広い範囲にわたりフルスタックのJavaScriptスキルが駆使されていました。 開発者のMoustapha Dioufに、プロジェクトに取り組む際の技術選択、設計、開発について書いてみないかとたずねると、うれしいことに彼は賛成してくれました。この記事があなたのプロジェクトに役立てば幸いです。(by SitePoint Editor:Nilson Jacques) プロジェクトのアプローチを順に見ながら、Webアプリ作成時に実践したことを説明します。紹介するテクニックは、どんなプログラミング言語においても当てはまります。私はJava/JavaScript仕事でこの方法を使い、生産性がぐ

    いまどきのWebアプリをどう作るか? フルスタックJavaScript開発のコツ
  • 「フルスタック開発者」を名乗るなら身につけたい技術と知識【2017年版】

    フルスタック開発者に求めるスキルは時代とともに変わっています。2017年のフルスタック開発者を名乗るなら最低限知っておくべき技術と知識をまとめました。 プロトタイプから完全なMVP(Minimum Viable Product:実用最小限のプロダクト)までカバーするフルスタック開発者のことを「多芸は無芸」と評価する人もいます。そんな一面もあるでしょう。まずは、フルスタック開発者を知るために、歴史を振り返ります。 以前のフルスタック開発者 2000年ごろ(インターネットでの17年前は大昔です)のフルスタック開発者の定義はこんな感じでした。 Photoshop、FireworksなどAdobe系ツールでWebページを手早く作る デザインをHTMLCSSに変換し、画像にホットスポットを追加する(もはや忘却のかなたですか?) 簡単なPHP4.0スクリプト(当時のPHPはオブジェクト指向とは無縁)

    「フルスタック開発者」を名乗るなら身につけたい技術と知識【2017年版】
  • Go言語とコンテナ

    長かった連載も今回が最終回です。 この連載では、プログラムがコンピュータ上で動くときに何が起きているのかを、Go言語のコードを通して覗いてきました。 今回は、その締めくくりとして、コンテナについて紹介します。 現在広く利用されているコンテナ技術であるDockerのコアは、Go言語製のlibcontainerというライブラリです。 このライブラリを使って自作のコンテナを仕立ててみます。 今回の原稿にあたっては、仮想化周りでsyohexさんに細かく指摘をいただきました。ありがとうございました。 仮想化 コンテナの話に入る前に、コンテナと目的がよく似た技術である仮想化について説明します。 仮想化は、コンテナよりも先に広く使われるようになった技術ですが、 歴史的にさまざまなソリューションがあり、どのような仕組みか、どのようなメリットがあるか、どのような制約があるか、どこにフォーカスするかで分類の

    Go言語とコンテナ
  • アンテナ付属でどこでもフルセグ! 極小TVチューナーがPLEXから

    外部アンテナ付属でどこでもフルセグが視聴可能な、世界最小・最軽量をうたうTVチューナー「PX-S1UD V2.0 Plus」がPLEXから登場した。パソコン工房秋葉原BUYMORE店で販売中だ。

    アンテナ付属でどこでもフルセグ! 極小TVチューナーがPLEXから
  • 10年遅れたJavaScriptの知識をざっくり10分でアップデートしよう

    久しぶりにJavaScriptを勉強しようと思ったら、すっかり浦島太郎状態だった……なんて人も多いのでは?  モダンなJavaScriptの知識をコンパクトにまとめました。 JavaScriptを取り巻く環境がどんどん変化しています。新たなツールやフレームワークが生み出されているだけでなく、言語そのものがES2015(ES6)の登場で大きく変わりました。JavaScript開発の学習がいかに難しいか愚痴をこぼす記事がたくさんありますが、無理もないことです。 記事ではモダンJavaScriptを紹介します。JavaScriptの進展を解説し、フロントエンドWebアプリケーションを作るために使われているツールや手法の全体像を確認します。JavaScriptを学び始めたばかりの人や、以前は使っていて数年間離れたため変化を知りたい人はぜひ読んでください。 Node.jsについて Node.jsは

    10年遅れたJavaScriptの知識をざっくり10分でアップデートしよう
  • Go言語のメモリ管理

    ソフトウェアにとってメモリは不可欠です。 実行する命令も、メモリにロードしなければ実行できません。 ソースコードに書かれた定数値も、いったんメモリにロードしないと使えません。 関数を呼び出すにも、スタックと呼ばれるメモリ領域が必要です。 スタック以外に、ヒープと呼ばれるメモリ領域が必要なこともあります。 今回は、Go言語のプログラマーが作成するプログラムの下で、どのようにメモリが管理され利用されるかを探ります。 Go言語のメモリ管理というとガベージコレクターの話を思い起こすかもしれませんが、ガベージコレクターについては連載では取り上げません。 メモリ確保の旅 コンピューターに接続されている物理的なメモリチップが、どのような過程を経てプログラムで使われるのか、順番に見ていきましょう。 (1): カーネル 最近のオペレーティングシステムでは複数のプロセスを同時に実行できます。 それらのプロセ

    Go言語のメモリ管理
  • CPUとメモリーの速度差を埋めるキャッシュの基礎知識 (3/3)

    タグから該当するデータをどうやって検索するか ちなみに、「1回にデータをどれだけ取り込むか」を決めるのが「ラインサイズ」である。32bit CPUの場合、キャッシュから取り込む量は1回4Byte程度にすると、メモリーアクセスが煩雑に発生しすぎる。だからといって4KB程度にすると、効率はいいのだが(Windowsの仮想記憶は1ページ4KBなので収まりがいい)、今度はキャッシュミスが煩雑に起きる。この辺りを勘案して、適当なサイズを決めることになる。 インテルの場合、例えばPentiumやP6(Pentium Pro~Pentium III)では、ラインサイズが32Byteだが、Pentium 4以降のCPUは64Byteになっている。また一部の製品は128Byte Sectorという管理単位もサポートしており、アプリケーションが最適と思われるラインサイズを選べるようになっている。 さて、キャッ

    CPUとメモリーの速度差を埋めるキャッシュの基礎知識 (3/3)
  • さらばjQuery!アニメーションをサクサク処理できるVelocity.jsの使い方

    「jQueryのアニメーションが遅い」「CSSアニメーションは使いにくい」。そこでアニメーション処理の定番ライブラリー「Velocity.js」の出番です。基的な使い方を一通り紹介しましょう。 記事ではJulian Shapiroにより開発された高速かつ強力なJavaScriptアニメーションエンジン、Velocity.js(以降、Velocity)を紹介します。記事のコードやデモすべてに目を通せば、Velocityを使って自分のアニメーションが作れるようになり、サイトはさらにインタラクティブで使いやすいものになるでしょう。jQueryには頼らず、すべて素のJavaScriptだけで作ります。 この記事は『CSSライクでデザイナーに優しい!anime.jsはDOMアニメーションの新定番だ!』『HTMLSVGもテキストも自在!DOMアニメーションの決定版「KUTE.js」が登場』の続編

    さらばjQuery!アニメーションをサクサク処理できるVelocity.jsの使い方
  • JSのデバッグにはconsole.log()ではなくNodeのデバッガーを使いなさい

    JavaScriptのデバッグに苦労しているなら、Nodeのデバッガーを試してみてはどうでしょうか。Visual Studio Codeならさらに手軽です。 袋小路です! 何時間も費やしていろいろ試してみたけれどもうまくいきません。コードをじっと吟味してもエラーになりそうなところはありません。2、3回ロジックを見直して、何度も実行しています。単体テストも助けにはならず、同じく失敗してしまいます。もはやどうしていいか分からず、虚空を見つめたくなります。ひとり闇の中にいるように感じて、だんだん腹が立ってきます。 こんなときの自然な反応は、コードの品質を落とし、邪魔なものを全部捨て去ることです。コードのあちこちにprintをちりばめて、なにかうまくいくことを祈るわけです。これでは暗闇で的を狙うようなもので、望み薄なことが分かるでしょう。 よくある話だと感じたのではないでしょうか。今までに数行以上

    JSのデバッグにはconsole.log()ではなくNodeのデバッガーを使いなさい
  • Go言語と並列処理(2)

    今回は、Go言語の並行・並列処理のかなめともいえるgoroutine(ゴルーチン)周りを掘り下げていきます。 goroutineは、前回の記事で軽く触れたように、軽量スレッドと呼ばれるものです。 そこで、まずはこの軽量スレッドと通常のOSのスレッドがどう違うのかを説明します。 そのうえで、goroutineの低レベルな機能を扱うためのruntimeパッケージ、 goroutineのデータ競合を発見するRace Detecter、 さらに高度な非同期処理を書くときに必要になるsyncパッケージおよびsync/atomicパッケージの使い方を紹介します。 スレッドとgoroutineの違い スレッドとは、プログラムを実行するための「もの」であり、OSによって手配されます。 プログラムから見たスレッドは、「メモリにロードされたプログラムの現在の実行状態を持つ仮想CPU」です。この仮想CPUのそれ

    Go言語と並列処理(2)
  • もうjQueryには頼らない!素のJavaScriptでDOMを操作するための基礎知識

    DOM操作が必要なとき、真っ先にjQueryを使うことを考えます。しかし、素のJavaScriptのDOM APIだけでも、実はかなりのことができるのです。また、IE10以下のサポートが終了したため、今後は素のJavaScriptによるDOM操作を心配なく使えます。 記事では、素のJavaScriptで一般的なDOM操作をする方法について説明します。具体的には以下のとおりです。 DOMの取得と変更 クラスと属性の変更 イベントのリッスン アニメーション 記事の最後に、どのようなプロジェクトにも使える独自の超軽量DOMライブラリーの作り方を説明します。記事の最後までに、素のJavaScriptによるDOM操作は決して高度な技術ではないこと、多くのjQueryメソッドとまったく同じ機能が実はネイティブAPIにもあることが理解できるはずです。 それでは始めます。 DOM操作:DOMの取得 この記

    もうjQueryには頼らない!素のJavaScriptでDOMを操作するための基礎知識
  • Go言語と並列処理

    Go言語の特徴として挙げられる機能の1つに、「並列処理を書くのが簡単」というものがあります。 そこで今回は、Goにおける並列処理の機能を紹介してから、そもそも現代のコンピューターでどのようにして並列処理が実現されているのかをとりあげます。 複数の仕事を同時に行うとは? 複数の仕事を行うことを表す言葉には並行と並列の2つがありますが、これらには次のような区別があります。 並行処理(Concurrent) 並行(Concurrent): CPU数・コア数の限界を超えて複数の仕事を同時に行うこと ほんの少し前まで、コンピューターに搭載されているCPUはコア数が1つしかないものが普通でした。 そのような、今ではもう絶滅危惧種になりつつあるシングルコアのコンピューターであっても、インターネットを見ながらWordとExcelを立ち上げてレポートを書けます。 この場合に大事になるのが並行(Concurr

    Go言語と並列処理
  • 手のひらサイズのディープラーニング開発環境が提供開始

    LeapMindは4月20日、エッジコンピューティング向けディープラーニング開発環境「Blackstar(ブラックスター)SDK」を発表した。提供開始は8月を予定している。 ディープラーニングのような巨大プログラムの開発には、GPUなどの大規模リソースが必要とされている。Blackstar SDKはニューラルネットワークをハードウェア用に最適化し、独自開発したアルゴリズムをチップへ実装したディープラーニング開発環境。手のひらサイズの小型計算処理装置に搭載することを前提としており、GPUより省電力でPCI-Expressの広帯域なインターフェースが必要ないため、ドローンなどのデバイスでも搭載が可能。 エッジコンピューティングを、CPUFPGAやカスタムチップのIPなど、ハードウェアで実現する。またWi-Fi接続にも対応する。 同社が提供予定のプラットフォーム「JUIZ」のアプリケーションス

    手のひらサイズのディープラーニング開発環境が提供開始
  • Go言語で知るプロセス(3)

    シグナルのハンドラを書く ここからは、実際にGo言語でシグナルを扱う方法を紹介します。 最初に注意点ですが、シグナルに関する設定はプロセス全体に及ぶグローバルな設定です。 また、シグナルはフォアグラウンドのプロセスに最初に送信されます。 したがって、自作のコードでシグナルのハンドラを書き、それをgo runを使って実行すると、シグナルは自作コードのプロセスではなくgoコマンドのプロセスに送信されてしまいます。 これを避けるため、シグナルをハンドルするコードはgo runでは実行せず、go buildコマンドで実行ファイルを作成してから実行してください。 手始めに、SIGINTとSIGTERMを受け取ってもすぐには終了せず、それぞれSIGINT、SIGTERMと表示するコードを下記に示します。 package main import ( "fmt" "os" "os/signal" "sys

    Go言語で知るプロセス(3)
  • Go言語で知るプロセス(2)

    前回の記事では、プログラムの実行単位であるプロセスについて、さまざまな属性やリソースをGo言語の視点から紹介しました。 今回は、Go言語のプログラムから、他のプロセスを実行したり属性を変更したりする方法を紹介します。 Go言語のプログラムから他のプロセスを扱うときは、プロセスを表す構造体を利用します。 そのための構造体には次の2種類があります。 osパッケージのos.Process: 低レベルな構造体 os/execパッケージのexec.Cmd: 少し高機能な構造体。内部でos.Processを持つ まず高機能で実用的なexec.Cmdの使い方を説明してから、os.Processの使い方を簡単に紹介します。 その後、プロセスに関する便利なGo言語のライブラリを紹介します。 exec.Cmdによるプロセスの起動 exec.Cmd構造体は次の2つの関数で作ることができます。 exec.Comm

    Go言語で知るプロセス(2)