サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
dotnsf.blog.jp
僕のことを個人的に知ってる人はご存知かもしれませんが、自分は今から25年ちょっと前に「ロータス株式会社」という企業でアプリケーション開発を担当していました。具体的に開発を担当していた製品の中には、昭和を代表する(苦笑)表計算ソフト 1-2-3(「ワンツースリー」)も含まれていました。ここ10年くらいはウェブアプリばかり作っていますが、まだ頭(や性格)がキレキレだった頃はパソコン向けのネイティブアプリも作っていた時代がありました。 自分が開発を直接担当していたのは Microsoft Windows 向けの 32bit 版でしたが、当時はまだ PC-DOS 版を無理やり Windows 向けに拡張した 16bit 版や、PC-DOS 版自体も 1995 年まではバージョンアップ対応をしていました。そんなこともあって当時の担当製品は今でも仮想マシン(VM)の形で残していたりします。今となっては
Twitter や facebook ではそれなりの頻度で触れている話題なのですが、9月末にキングジムのポメラ DM200 を購入しました: 小型 PC(といっていいのか?)の中では抜群のキーボード操作性を持ち、テキスト入力作業中心に使う人からの人気が高い機種です。ただ自分の場合は購入当初から普通にテキスト入力機として使うつもりはなく、Linux(Debian) 化できることを理解して、Linux 化して使うつもりで購入しました。DM200 の Linux 化手順や Linux 化直後の各種ツールの導入については以下の2つのサイトが有名で、実際に自分も大変お世話になりました。先人たちの努力で Linux 化は非常に簡単でした。感謝を意を表すと同時に、DM200 の Linux 化についてはこちらを参照いただけると一連の手順が非常にわかりやすくまとまっています: ・pomera DM200
以前にラズパイ3(メモリ1GB)を3台使ってコンテナクラスタのオーケストレーション環境を作ったことがありました: ラズベリーパイと鳩サブレ缶で docker swarm クラスタを構築する ラズベリーパイと鳩サブレ缶で kubernetes クラスタを構築する 上記の上では docker swarm 環境、下では kubernetes 環境を構築しました。手順などの詳細はそれぞれのリンク先を参照していただきたいのですが、この時は kubernetes 1.8 を使ってクラスタを構築しました。kubernetes の環境としては作れたのですが、(案の定というか)メモリが圧倒的に足りなさすぎて実用にはほど遠い kubernetes 環境となってしまいました。マイナーな環境であることは理解しつつ、今でもラズパイ3でのオーケストレーション環境としては docker swarm が現実的なのかなあ、
Node.js + Express の環境で SSL を使う(https でアクセスできるようにする)方法を調べたのでまとめました。 まず SSL を使うための鍵ファイルと証明書ファイルを用意します。公式なドメインを所有していて、本物の鍵/証明書ファイルを持っているのであればそれを使っても構いません。試験的に試すのであれば、いわゆる「オレオレ証明書」を作成します。Linux 環境であれば openssl コマンドを使って、以下のように入力します: $ openssl genrsa -out server_key.pem 2048 Generating RSA private key, 2048 bit long modulus ...............+++ ..........................+++ e is 65537 (0x10001) $ openssl re
JavaScript で JSON 配列をソートする、意外と簡単な方法があります。具体例として、例えば以下のような JSON 配列: myArray があったときに、 var myArray = [ { id: 1, name: "鈴木", age: 30 }, { id: 2, name: "田中", age: 29 }, { id: 3, name: "佐藤", age: 35 }, : ]; この JSON 配列を age 要素の小さい順にソートしたいという場合にどうやるか、というケースを紹介します。 まず、JavaScript の配列には sort 関数が標準で用意されています。直感的にこんな感じで使えます: var array1 = [ 30, 29, 35 ]; array1.sort(); //. => array1 = [ 29, 30, 35 ]; 注意点として sort
「エクセルファイルを扱えるライブラリ」といえば、Java であれば Apache POI などがありますが、Node.js ではどうだろう?? と思って調べてみました。その名もズバリの xlsx という npm ライブラリを見つけたので使ってみました: npm - xlsx https://www.npmjs.com/package/xlsx ライブラリ名は xlsx ですが、対応フォーマットは xls や XML に加えて ODS まで含まれていて、かなり柔軟に使えそうです。 【扱うサンプル】 こんな感じのエクセルファイルを用意して使うことにします: データとしては "A1:C14" の範囲にまとまっていて、その右に2軸の折れ線グラフが1つあります。この表の B14 セルは B2:B13 の合計(SUM)、C14 セルは C2:C13 の平均値(AVERAGE)がマクロで定義されています
Ubuntu (や CentOS/RedHat Enterprise Linux)をデスクトップとして使っている人はあまり多くないかもしれませんが、自分はその1人です。知る人ぞ知る GPD Pocket も Ubuntu モデルを購入しました。 個人的には最近の Linux デスクトップは非常に便利だと思ってますが、ただ使っていて「あれ??」と思うことが無いわけでもありません。例えば今回紹介するのは MPEG4 動画の再生なんですが、そのコーデックは標準で充分にインストールされているわけではないので、そのままでは再生できないことがあります。その Ubuntu 環境での導入方法を調べたのでメモ目的も兼ねてブログにします。 まず、MPEG4 AAC コーデックなどの拡張メディア機能を Ubuntu に導入するには ubuntu-restricted-extras というパッケージをあらかじめ導
Node.js のアプリケーションで、以下のような処理を実装してみました: - 認証(ログイン)用の API には誰でもアクセスできる - 認証 API では ID とパスワードを与えて認証し、正しいユーザーにはトークンを発行する - 認証以外の主な API はこの発行されたトークンを使ってアクセスした時だけ実行を許可する - API 呼び出し時にトークンがなかったり、正しくなかった場合は実行せずにエラー この仕組を実現するために JSON Web Tokens (以下 "JWT")を使いました: https://jwt.io/ JWT はオープンかつ Node.js ではスタンダードなトークンベースの認証ライブラリです。以下で紹介するサンプルでは Web フレームワークである Express や、POST データを扱う body-parser も合わせて使うので、まとめてインストールして
Apple が開発したプログラミング言語 Swift は 2016 年にオープンソース化され、macOS 以外のプラットフォームでも Swift のアプリケーション開発ができるようになりました。というわけで、実際に Ubuntu から Swift をセットアップして使ってみました。以下は自分の(VirtualBox 上の)Ubuntu 14.02 環境での作業記録です。 なお、今回は Swift 3.0.2 を使うことにします(2017/Apr/04 時点での最新バージョンは 3.1 ですが、このバージョンの場合 Xcode 併用となって環境準備が面倒だったので・・ ←訂正、コマンドラインだけでも 3.1 が使えました。「Xcode の一部として Swift が提供されている」という表現が正しいようです)。 Ubuntu で Swift をインストールしたり、Swift アプリを作成したり
自分はテキストエディタにはこだわりがあります。 Vz エディタから始まり、vi(vim)、Emacs、・・と使ってきました。現在はこんな感じで使い分けています: Java コードの記述には EclipseJavaScript の記述には ATOMサーバーにターミナルログインして使う場合は vi(vim)PC でマークダウンを記述する場合は Boostnoteそれ以外はメモ帳かサクラエディタ 大きくは PC 環境なのか、サーバー環境なのかの違いです。基本的にサーバーにログインして使う場合は vi(vim) ばかり使ってます。一方 PC 環境の場合、Java だけは例外的に Eclipse でないと使いづらいのですが、それ以外はあまりこだわりはありません(最近、周囲の影響で ATOM を使い始めました)。実はメモ帳を使うことも結構多いのですが、議事録などはマークダウンで書くことが多く、その時は
自分メモ兼情報緩募なブログエントリです。 SSH でサーバーにリモートログインして作業している途中で通信が途切れてしまう(プロセスが死んでしまうわけではなく、通信が切れてしまう)ケースがあります。自分が比較的頻度高くやっちゃうのは、電車内からテザリングを使ってリモートログインした先で Node.js のサーバーを動かしていて、地下鉄に入って通信が遮断しちゃうケースです。 これをやってしまって困るのは、例えば Node.js のサーバーを 8000 番ポートで動かしていたとすると、8000 番ポートへの listen が生きたままの状態で通信が切れてしまうことです。繋がっていれば Ctrl+C でサーバーを落とすことができるのですが、繋がっていないので Ctrl+C を入力する端末がありません。ということは再度リモートログインしてプログラムを修正して再度実行・・・しようとしても「そのポートは
最近、業務でブロックチェーンを使う機会が増えてきました。というか、提案段階のものも含めて大半の案件にキーワードとして出て来るようになっています(イノベーティブなアプリケーション開発に関わる部門に所属していることも関係しているとは思います)。ブロックチェーンを API 経由で使うだけでなく、その API を作ったり、データのモデリングをしたりする機会も出てきました。 まだまだ勉強段階ではありますが、実際にお客様と会話している中でも作る前から「これはブロックチェーンに向いてるなあ/向かないなあ・・・」と感じることができるようになってきました。今日のエントリはそういう話です。 ブロックチェーンは革新的な技術で注目されている一方で、まだわかりにくい部分もあり、誤解を受けている部分もあります。典型的なパターンが「現在動いている○○システムのデータベース部分をブロックチェーンに置き換えて信頼性を向上さ
Node.js を使っていると、たまにこんなエラーメッセージが出てサーバーが止まることがあります: # node . : : FATAL ERROR: JS Allocation failed - process out of memory Aborted (core dumped) "out of memory" と書かれているのでメモリ不足な状態になっているように見えます。が、これは物理メモリが足りないというメッセージではなく、Node.js の(1オブジェクトあたりの)ヒープサイズが足りなくなっている、というメッセージです。ちなみにデフォルトでは 512MB です。なので物理メモリを大量に搭載しているサーバーでも、サイズの巨大なファイルを扱ったり、大容量のアウトプットデータを取り扱おうとするとこのエラーは起こりうる、ということになります。 このヒープサイズを増やして利用するには no
Node-RED Advent Calendar 2017 に参加しました(ちなみにアドベントカレンダーに参加するのは初めて)! 12月9日のネタは「Node-RED で(普通の)ウェブアプリケーションを作る」です。 Node-RED を早くから活用している方の多くは IoT 連携であったり、組み込み機械との連携のデータフローとして使っているケースが多いと思っています。でもそんなケースばかりではなく、自分自身は Node-RED でデータベースを読み書きする REST API だけを作ったり、その REST API を呼び出すフロントエンドまでも含めて Node-RED で作ることがあります。今日はその作り方をスクリーンショットを交えて紹介します。 【普通のウェブアプリケーション】 最初に、今回作成する「(普通の)ウェブアプリケーション」を定義します。ここでの「ウェブアプリケーション」とは
オープンソースのブロックチェーン環境である Hyperledger Fabric 用のフレームワークとして Hyperledger Composer が提供されています: https://hyperledger.github.io/composer/ この Composer (と Hyperledger Fabric)を使うことでブロックチェーンアプリケーションおよびビジネスネットワークを比較的簡単に作れるようになる、というものです。 この Composer を実際に動かして体験できるサービス(Hyperledger Composer Playground)がオンライン上で公開されているので使ってみました。以下はオンライン版の Composer Playground でも、ローカル版の Composer でも同じように実行できます。なお、Composer をローカル環境に導入する場合の手順
オープンソースのブロックチェーン環境である Hyperledger Fabric に待望の V1.0 がリリースされ、同時に初の公式版リリースとなりました: http://hyperledger-fabric.readthedocs.io/en/latest/releases.html オープンソースなので、(前提環境さえあれば)誰でも同環境をダウンロードして構築することができます。というわけで、以下ではその導入手順を紹介します。 【前提環境】 まず前提として以下の環境が必要になります: Docker: 17.x for Linux or Mac OS X Docker-Compose Node.js V6.x(V8.x は未対応) Docker は 17.x であればプラットフォームは問いません。自分は Ubuntu 14.04 および Mac OS X で確認しました。 今回紹介する方
MySQL の主キーとかに auto_increment 属性を付けておくと連番の ID を自動生成してくれるので便利です。 例えばテーブル定義時にこんな感じで指定しておくと、 > create table names( id int primary key auto_increment, name varchar(100) ); データ挿入時に id を指定せず(気にせずに)他の値だけを挿入すればよくなって、 > insert into names( name ) values( '鈴木' ); > insert into names( name ) values( '佐藤' ); > insert into names( name ) values( '田中' ); > insert into names( name ) values( '山田' ); : ユニークな ID が自動で割
MySQL を使い始めた時にはあまり深く考えずにデフォルトインストールしてデフォルト設定で使い始めて、使っているうちにディスクが足りなくなってきた(或いは「このままだとディスクが足りなくなる」)という人向けの情報です。 要は MySQL の運用開始後に充分な容量を持つディスクドライブ(あるいはファイルシステム)にデータディレクトリを引越しする手順、の紹介です。OS は CentOS を前提とし、細かいコマンドは異なりますが、考え方は同じです。 データディレクトリを引っ越す場合、何はともあれ MySQL サーバーを停止します: # service mysqld stop 次に my.cnf ファイル(CentOS であれば /etc/my.cnf)をテキストエディタで編集して、新しいデータディレクトリを指定します。データディレクトリは [mysqld] 内の datadir で指定します(こ
Google ドライブのファイルシステム(?)を fuse を使って Linux にマウントする、というためのツールを使ってみました。今回は Google Drive ocamlfuse というツールを使って、Ubuntu 14.04 環境にマウントしてみました: https://github.com/astrada/google-drive-ocamlfuse なお、今回紹介する手順では途中でウェブブラウザを使った OAuth 認証を行うため、GUI 環境が必要です(コマンドライン環境だけでは最後までマウントできません)。GUI アクセスできる Ubuntu とウェブブラウザをご用意ください。 まずはターミナルを開き、Google Drive ocamlfuse を apt-get でインストールできるようにするため、リポジトリを追加します: $ sudo add-apt-reposit
CentOS などの Linux/UNIX 環境で top コマンドを使ってプロセスの様子を確認することは珍しくないと思いますが、その機能拡張版である htop コマンドを使ってみました。普通の(?)top コマンドではわからない情報も表示してくれて便利です。Mac 環境でも使えます。 RedHat/CentOS 系 OS であれば、導入は yum コマンドで一発ですが、EPEL リポジトリを有効にする必要があります。未導入の場合は最初に EPEL を導入しておきます。以下は CentOS 6 の場合のコマンド例です: # rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm (64bit 環境の場合) # rpm -ivh http
2016 年の年初に「マンホライザー」というサービスを作って動かしていました: http://dotnsf.blog.jp/archives/1048853473.html マンホライザーはわかりやすく言うと「マンホール顔ハメ画像作成サービス」です(わかりやすいか??)。先日のマンホールサミット 2017 埼玉に参加した際にも、こんなアナログな顔ハメ写真サービスを提供させていただいたのですが、意外と人気があったのでした。それをウェブ上からもできるようにしよう、というわけで生まれたサービスでした。IBM Watson の画像認識機能を使って実装しており、「テクノロジーの無駄使い」な点も自己採点ポイントが高いものになっています(笑): 上記リンク先の、2016 年に公開した当初は PHP で実装していました。その時のソースコードはこちらです: https://github.com/dotnsf
CentOS や RHEL で便利に利用されているパッケージ管理コマンドの "yum" 。このコマンドの便利な使い方の1つが groupinstall と呼ばれる機能です。ある環境を用意しようとした際に複数のパッケージを導入しないといけない場合、その複数のパッケージを1つの「グループパッケージ」のまとまりとみなし、グループパッケージ1つを指定して導入することで環境構築が可能になります。 個人的によく使う例で紹介すると、GUI のデスクトップ環境であれば "Desktop"、日本語サポート環境であれば "Japanese Support" などです。それぞれ以下のコマンドで導入できます: (デスクトップ環境) # yum groupinstall "Desktop" (日本語サポート環境) # yum groupinstall "Japanese Support" 上記のようにグループパッケ
JavaScript で AJAX を多く使ったことがある人にとって、「クロスドメイン問題」は一度は体験する、避けて通れない問題だと思います。 簡単に補足すると、例えば異なる aaa.com と bbb.net という2つのドメイン間で AJAX の実行を許可しない、という問題です。以下の例では aaa.com ドメイン内に www.aaa.com というアプリケーションサーバーと、api.aaa.com という API サーバーがあり、bbb.net というドメイン内に api.bbb.net という API サーバーがあることを想定しています。www.aaa.com と api.aaa.com は同一ドメインなので、何の制約もなく AJAX で API を実行できるのですが、ドメインの異なる api.bbb.net に用意された API を www.aaa.net から AJAX で実
上記の手順ではまず Node.js を導入し、その Node.js 上に StrongLoop LoopBack を導入して OpenAPI 環境を構築していました。リンク先でも紹介されているように、この方法では LoopBack(Node.js) の起動をコマンドラインで行う必要がありました。つまりシステムが起動した後に明示的に LoopBack(Node.js) サーバーをアプリケーションとして起動する、という方法でした: # cd myapp # node . 今回の目的はこれをデーモン化することです。 LoopBack に限った話ではないのですが、Node.js アプリケーションをデーモン化する場合には forever というツールを使うことが多いです。forever は Node.js スクリプトの死活監視ツールで、 npm を使ってインストールします: # npm instal
# yum install java-1.7.0-openjdk 次に検索エンジンである ElasticSearch 本体を導入します。公式サイトから最新版(2016/07/11時点では 2.3.4)のインストールモジュールをダウンロードします。インストールモジュールにはいくつかの種類はありますが、今回は rpm パッケージ版(elasticsearch-2.3.4.rpm)をダウンロードします: https://www.elastic.co/downloads/elasticsearch ダウンロードできたら rpm コマンドでインストールして起動、および自動起動設定までを行います。ちなみにこの rpm 版をインストールした場合、ElasticSearch 本体は /usr/share/elasticsearch/ 以下に導入されます : # rpm -ivh elasticsearch
Node.js サーバーのリバースプロキシとして、高性能な Nginx を利用する方法を紹介します。以下では CentOS 環境を前提とした方法を紹介します。 まずは Node.js + アプリケーションの環境を構築します。特に今回は Node.js 上で StrongLoop LoopBack アプリケーションを動かすという前提としてます(独自のアプリケーションでも構いません)。この環境を整えるための手順はこちらを参照ください: CentOS に StrongLoop をインストールする アプリケーションが準備できたら Node.js を起動しておきます。実際には forever を使って Node.js をデーモン化しておくと便利だと思います。この辺りの手順はこちらを参照ください: Forever で Node.js をデーモン化する (↓ 3000 番ポートで Node.js アプリ
自宅のローカル環境に Cloud Foundry v2 を導入してみました(注 自宅 Bluemix Local ではありません)。 Cloud Foundry はオープンソースの PaaS(Platform as a Services) の名称です。IBM Bluemix を始め、多くの商用/非商用クラウドサービスの基盤として利用されている実績があります。元々は VMWare 社によって開発を行っていましたが、現在は 2014年12月に設立されたコミュニティ Cloud Foundry Foundation によって開発・管理・リリースが行われています(IBM も参画しています): 【前提条件】 Intel x86_64 版の Ubuntu 14.04 環境が前提として必要です。同環境上に Cloud Foundry v2 Nise Installer を使って Cloud Foundr
CentOS に OpenVPN のコマンドラインクライアントを導入する手順を紹介します。 OpenVPN そのものは yum で導入可能ですが、前提として EPEL のリポジトリが必要です。未登録の場合はこのコマンドで EPEL リポジトリを作成しておきます: # rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm そして EPEL リポジトリから OpenVPN を導入します: # yum install --enablerepo=epel openvpn これで導入は完了です。/usr/sbin/openvpn コマンドが導入されたはずです: # which openvpn /usr/sbin/openvpn 次に接続の設定を行います。.crt ファイルや .
CentOS で(Eclipseを使って) Java の開発環境を整備するまでの手順を紹介します。 Eclipse を使うので、CentOS には X Window やデスクトップといったモジュールが導入されていることが必要です。 まず Eclipse のインストールそのものは簡単です。JDK を導入した上で最新版をダウンロードして展開してもいいですし、最新版でなくてもよければもっと簡単に yum でインストールすることもできます(以下、こちらの手順を使っている前提で紹介を続けます): # yum install eclipse yum を使う場合であれば JDK ごとインストールされてます。なお、2014/10/22 現在ですが、この方法でインストールされる Eclipse のバージョンは 3.6.1(Helios) でした。 加えてウェブアプリケーションの動作確認のため FireFox
次のページ
このページを最初にブックマークしてみませんか?
『まだプログラマーですが何か?』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く