アプリなら、コメントが見やすい!
トップへ戻る
みんなのおすすめ
tech.buty4649.net
この記事はRust Advent Calender 2021の8日目の記事です。 空白だったので遡って穴埋めしています。 このブログでも何度か話題にしているが、私はreddish-shellという自作シェルをOSSで開発している。 コマンドを実行するだけなら簡単ではあるものの、日常で使える程度にしっかりしたシェルを作ろうとしたら様々なノウハウが必要になる。 そう言ったノウハウはシステムプログラミングとして本やネット上に存在するが、シェルを作ることを目的として紹介されていないので体系的に学びづらいと感じる。というか大変だった…。 私の持つ知識をダンプし、シェルの作り方としてまとめることで、今後シェルを作ろうと思う人の役に立てればと思う*1。 なお、私はシェル作成について独学であるため、間違った内容も書いているかもしれない。 その時は優しくTwitterやコメントで教えていただけると助かります
この記事はGMOペパボエンジニア Advent Calendar 2021の5日目とLinux Advent Calendar 2021の10日目*1の記事です。 昨日ははらちゃんのブログをもっといい感じにするでした。 差分転送することでアップロードを高速化するのは目から鱗でしたね。 データのアップロードが遅いと更新のモチベーションが下がってしまうことがあるので、ブログを長く続けるためにも高速化は重要ですね! 2018年のアドカレで業務で使っているPCをLinuxデスクトップにしてから半年が経ったという記事を書いたのですが、それから3年経って今はどうなったかという記事を書いていきたいと思います*2。 現状はどうなのか? 相変わらずUbuntuデスクトップをインストールして開発環境として利用している。 前回の記事では、Ubuntu18.04であったが順当にバージョンアップを繰り返し今はUbu
タイトルの通り。 promptのカスタマイズにはstarshipを使っていて*1、バージョン管理にはasdfを使うようにここ最近変更した。 それぞれ特に不満なく使っていたのだが、あるときからリポジトリ内でのプロンプトの表示が遅いというのに気がついてしまった。 starshipがWARNINGを吐いていたこともあり、被疑はstarshipにあるとわかっていた。 ↓WARNING例 [WARN] - (starship::utils): Executing command "ruby" timed out. [WARN] - (starship::utils): You can set command_timeout in your config to a higher value to allow longer-running commands to keep executing. star
最近、唐突にRustに入門したくなりWebの記事やチュートリアルをあさり始めた。 いくつかサンプルなどを試したけどいまいちしっくり来なかったので、体系的に学ぶ必要があるなっと思い実践Rust入門を読んだ。 gihyo.jp 実践とついてあるだけあって、実際にどのようにコーディングするか、どういったライブラリをするかというのがわかってよかった。 特に、第3章のクイックツアーを読みながら手元で写経していたのだが、第3章を読み終える頃には「Rust完全に理解した」という気持ちになれるくらい*1エッセンシャルが詰まっていた。 第7章の所有権システムの話は、「なるほど理解した」という感じでなんとなくわかったけど他人に説明できるほどちゃんと理解した感じではなかったので、また実際にコードを書きながら理解していこうと思う。 第12章でFFIの解説があったのは助かった。 Rustを使って作ろうとしているのが
仰々しいタイトルだけど、reddish-shellのパーサー部分のメモ。 いまは覚えているけど、数カ月後の自分が覚えている自信がないのでメモっておこうと思った次第…。 ここで解説する内容は、現状の実装に即したもので数カ月後には変わっているかもしれない。 また、私の勉強不足で間違っている/最適ではない部分があるかもしれないのでご容赦。。 この記事では、mrubyやGNU bisonについての詳しい説明はしないので私の過去記事を読むかググってください。 純粋パーサー(再入可能パーサー/リエントラントパーサー) bisonの定義部に %define api.pure (古いbisonでは %pure-parser ) を定義すると純粋パーサーとして定義できる。 これを定義するとパーサーとのやり取りをするyylval変数がグローバル変数から、局所変数になる。 mrubyから呼び出す関係で、グローバ
シェルスクリプトじゃなくてシェル。 前回の記事でGNU bison/flexのことを書いたのはこれの副産物だったのであった。 なぜ作っているかというと面白そうだからという理由以外ないのだけど、きっかけはxonshというPython-powerdなシェルがあることを知って「PythonがあるならRubyもほしい」と思ったのであった。 reddish-shell シェルの名前は reddish-shell としている。 reddishは赤みを帯びたという意味らしく、Rubyも赤っぽいし、shで終わっているし*1でこれにした。 もしかしたら、そのうち変えるかもしれないし変えないかもしれない。 コンセプト ただ普通にシェルを実装しても面白くないし実用性もないので、ある程度コンセプトを考えている。 まず、大前提として前述したとおりRuby-powerdにしたい。 Rubyの構文が使えるようにしたいと
この記事はM5Stack Advent Calendar 2018の20日目の記事です。 先日SabaBoxというM5Stack + MicroPythonを使ったプロダクトを作ったことを紹介しました。 今日は、SabaBox作成時に気がついたことなどを書いていきたいと思います。 ファームウェア M5StackでMicroPythonを使うには専用のファームウェアを書き込む必要があります。 MicroPythonファームウェアは以下のリポジトリに存在します。 github.com MicroPythonファームウェアにはオンライン版とオフライン版があります。 オンライン版は、M5CloudというM5Stack社が運営するクラウドIDEを使ってM5Stackを開発することができるバージョンです。 オフライン版は、USBを接続してシリアル通信で開発するバージョンです。 オンライン版のファームウ
Linuxデスクトップを使い始めたのは前回書いたとおり。 macOSのときはAlfredを酷使していて、これがないと生産性がガタ落ちであった。 そこで、Linuxデスクトップでも同じ感じのランチャーを探すことにした。 linux alfred alternative とかで検索するとまずはじめにMutateが目に止まるのだけど、3年前くらいから開発が止まっているようなのでやめた。 次にAlbertを使い始めた。しかし、日本語周りの扱いが怪しかったり、ほしいプラグインがなかったりしてこれも使うのをやめてしまった。 そして最終的に行き着いたのがUlauncherだった。 このランチャーにもほしいExtensionがなかったのだけど、Pythonで自作できるようなので自作してしまった。 Github/Github Enterprise リポジトリ検索 github.com 仕事柄Githubとい
最近、会社用のPCをLinuxデスクトップに変えた。なんで変えたのかとかは別の機会でブログを書く…っと思う。 で、職業柄ターミナルアプリを酷使するので自分の手にあったものを使いたい。 今までMacを使っていたときはiTerm2を使っていた。 LinuxにはもちろんiTerm2はないので代わりのアプリを探さないといけない。 当初は、GNOME Terminalを使っていたのだがなんと OSC52が使えない のであった*1。 tmuxのクリップボード機能でOSC52を多様している*2私にとってこれは死活問題…。 仕方ないのでOSC52が使えるターミナルを探した。 そこで、xtermを使い始めた。 OSC52だけではなくSixelにも対応している! HiDPIな環境で色々設定は大変だったが、なんとか実用できるようにはなった。 …が、描画が致命的に遅いことがわかった。 tail -fやrsync
この記事はGMOペパボ Advent Calendar 2018の19日目の記事です。 会社PCをLinuxデスクトップにしてから半年が経ったので感想とかTipsとか書きます。 なぜLinuxデスクトップにしたのか? 以前はMacBookProを使ってました。たしか、2015年後期モデル。 半年前にそのMacBookProのレンタル期限が切れたので、新しいMacBookProに更新するかどうか悩んだ。 でも、キーボードはペチペチだし、ESCキーもないし、Appleにロックインされるのが嫌だったのでLinuxにすることにした。 Windows Subsystem for Linuxも考えたけど、ネイティブでLinux使いたかったのでWindowsは選択しなかった。 実際どうなのか? 普通に使える。けど、会社の環境のおかげかも知れない。 ペパボでは、G suiteを使っているのでブラウザがあれ
この記事はMackerel Advent Calendar 2018の13日目の記事です。 みなさん、IoTしてますか! 今年のMackerel Advent Calendarのテーマは IoTとMackerel ということで[要出典]、私も作ってみました! それがこのSabaBoxです! 拡大したところ Mackerelのロゴをドット打ちしたのがこだわりポイントです!*1 M5Stackとは この真ん中にあるTFTディスプレイがついた箱がM5Stackです。 ESP32というWiFiとBluetoothを持ったマイコンを搭載した便利な開発ボードです。 機能を拡張する基板をスタックしていくので、この名前がついているようです。 開発はArduino互換なので、慣れていればすぐにプロダクト開発ができるのがよいですね! そして、なんとこのM5StackではMicroPythonが動くファームウェ
この記事は自作キーボード #2 Advent Calendar 2018の7日目の記事です。 昨日は@ffilccooさんのキーボードカスタムについてでした。 市販のキーボードのカスタムについて書かれていて、ENDGAMEキーボードは時間と共に変化する!! これは本当にそのとおりだと思います。 昨日の記事以外にも素晴らしい記事を書かれているのですが、残念ながらジオシティーズ終了とともにサイトが消滅してしまうようです。。 消滅の前に他のサイトにお引越しされることを願っております。 こんにちは、トラックポイントオタクです! でも、今日はミニトラックボールの話をしたいと思います(ぇ トラックポイントの悩み 私はトラックポイントがとても好きなので、すべての自作キーボードにつけたいとおもっています。 しかし、トラックポイントを自作キーボードに取り付けるには様々な課題があります。 トラックポイントモジ
デスクトップLinuxとして使っているUbuntu18.04で、ドメインごとに問い合わせるDNSサーバを変更したい場面が出てきた。 具体的には、VPNを接続してその接続先のドメインだけはDNSサーバを変更したいみたいな。 Ubuntu18.04ではDNSリゾルバとして、systemd-resolvedを使っている。 こいつでは、やりたいことは出来ないようなのでdnsmasqに変更することにした。 なぜdnsmasqなのか? すでにインストールされていて*1、そしてNetworkManagerが対応している。 Ubuntu18.04ではネットワーク関連の設定をNetworkManagerが管理しているので、とても都合がよい。 そんなこんなでdnsmasqを使うことにした。 systemd-resolvedを止める 止める手順としてはまず、/etc/systemd/resolved.conf
speakerdeck.com 遅くなりましたが、6/23に行われたはてな・ペパボ技術大会 #4 〜DevOps〜 @京都でプライベートクラウドではじめるDevOpsというタイトルで発表してきました。 本当は発表後すぐにアップロードしたかったのだけど、Macの電源を忘れていったり*1、HDMIが移らないとか色々あり家に着くまで何もできない状態になっていた。。 発表した内容について。 Effective DevOpsに出てくる4本柱として「コラボレーション」「アフィニティ」「ツール」「スケーリング」があげられている。 プライベートクラウドは、この4つの中では「ツール」に分類されると思う。 ツールを使うことでDevOpsを加速させた面もあると思うが、そもそもツールが共通化なり整備なりされていないと始まらない。 ツールが潤滑油として回り始めればコラボレーションやアフィニティも自然と発生していくよ
前回の記事では、トラックポイント基板の準備まで書いた。 今回は、Helix/QMKにトラックポイントを接続するところまでを書く。 PS/2の接続モード トラックポイント基板から出るPS/2信号をQMKが取り込む方法として、ドキュメントには以下の3つのパターンが示されている。 このうちの1つを使って、トラックポイント基板と接続する必要がある。 Busywaitモード Interruptモード USARTモード 1のBusywaitモードについては、ドキュメントにnot recommendedと書いてあるので、この方法はよっぽどのことが無い限り使わない方が良い*1。 ベストな方法として書かれているのは、3のUSARTモードである。 この方法を使いたいのだが、クロック用としてD5ピンをデータ用としてD2ピンを使用する必要がある。 ProMicroではD5ピンをオンボードのLEDとして使っているた
諸君、私はトラックポイントが好きだ!!!! 初めてThinkpadを使ってからトラックポイントにはまり、今の会社に入ってからトラックポイントキーボードを2枚買い、そして自宅にもサーバ管理用に1枚ある! で、先日作成したHelixに付けたくなりできたのが↑の写真であるw Helixにわざわざトラックポイントを付けようという人はいないだろうけど、Twitterでそこそこ反響があったのでブログにまとめておこうと思う。 なお、長くなったので何回かに分けて書く予定。 はじめに 実は、当初はトラックポイントを付けるつもりはなかった。 しかし、HHKBにトラックポイントを追加している先人がいることを知り、トラックポイントを後付けできることを知ったのだった。 この記事がなかったら、トラックポイントを付けようと思わなかったので感謝しかない 🙇♂️ itjo.jp トラックポイントが後付けできることを知っ
早速やらかしました。Pro Microが文鎮化しました! ことの発端は、QMKのMouse Keysページを見ていて、便利そうじゃんっと思っておもむろに有効化したことだった…。 ファームウェアのサイズが大きくなりすぎて、ブートローダ領域をぶっ壊しうんともすんとも言わなくなったのであった。 途方に暮れていたら、以下の記事を見つけた。 幸いHelixは2つのPro Microを使うのと、片側はまだ正常であったために、試してみることにした。 qiita.com AVR ISPとは まずなんでこんなことしないといけないかということから調べた。 Helix(QMK)のファームウェアは、直接これがブートされるわけではなくて、Arduinoのブートローダが前段にいる。 電源が入るとこのブートローダが呼び出されて、Helix(QMK)のファームウェアが起動される。 リセットを押すと、LEDが点滅してファー
最近電子工作を始めて、いろいろ記事を書いてきたが、次は自作キーボードだねみたいな謎の圧を感じながらも興味は持っていた。 そんな中、同僚がHelixのGroupBuyに申し込んでいるのを知ったので、私もそれに乗っかってみた! HelixはLet's split(レツプリ)ベースのカスタムキーボードで、ロープロファイルのキーも選択できるのがウリです。また、開発者の方が日本人であるため、私みたいな自作キーボード初心者には安心して購入できるのも大きかったです! GBは12月に行われ、実際に部品が来たのは2月頭くらいでした。そこから、組み立てて完成したのが冒頭の写真です。 完成後は、今まで使っていたトラックポイントキーボードを封印して使い始めています。 キー配列やレイヤーの概念になれず、PC初心者のような入力速度になっていますがw Helixの組み立てやファームウェアについては、日本語ドキュメントが
会社でPepabo Maker Festival(PMF)というものづくりのための企画が開催されたので、先日社内発表会では動かなかったブツを動くようにして、リベンジマッチとして参加させてもらった。 当日の朝、寝落ちからの早起きをキメて、展示物の動作を確認し問題ないことをチェックしたのに、展示会になって動作しなくて現地でデバッグしていたw ↓デバッグしている様子 私の展示物とは別に会社のプラモ部の展示も行った。 プラモ部で作ったキットを並べただけなのだが、数が揃うとそれはそれで楽しいものだw ↓キットを並べるのがめちゃくちゃ楽しいの図 モノを作ることはとても楽しいし、人に見てもらえるともっと楽しい! 他の人の作品をみて、いろいろな気づきや刺激を得られてとてもよかった!! また是非参加したい所存です!
最近、OpenStackのOctaviaコンポーネントを弄っていて、だいぶわかってきたのでメモ代わりにまとめておく。 OpenStack Octaviaとは 私ってほんとバカではなく、将来的にOpenStackの標準的なLBaaS APIエンドポイントとして機能すべく開発されているコンポーネント*1である。 OpenStack Mitakaから標準でサポートされ、Pikeでv1.0がリリースされる予定*2になっている。 OpenStackのLBaaSといえば、neutron LBaaSがある。 neutron LBaaSとOctaviaはどう違うのだろうか? Octaviaの説明についてプロジェクトページには以下のように書いてある。 Octavia is an operator-grade open source scalable load balancer for use in larg
今日は久しぶりに渋かった。。 長年サービス/システムを運用しているとあるあるだと思う。 まさに、今日、私が踏み抜いた。 最初何が起こっているのか理解できなかった。 本当に渋い。誰が悪いのかすらわからないほどだった。 貧乏くじを引いた… 原因が明らかにつれて私は焦った。 私の経験上、この場合知らなかったとはいえ、実作業を行った私の責任になる。 そうなると、何故それをしたのか?何故こうしたのか?糾弾されると思い、社内の上役に説明するのが怖かった。 説明を終えると上役の方は言った。 「貧乏くじではない。これはチャンスだ!」 そう私は、自分の保身に走り見えていなかった。 もっと視野を広げると、今まで分かっていなかったことが明らかになり、今後ビジネスを進めるうえで、一歩進めることが出来ると。 また、今までそう言われたことがなく保身しか考えていなかった、自分が恥ずかしくなった。 そう言った激励もあり、
re:dashを0.11.0+b2016から何を思ったか1.0.0+b2521まで上げたのでその時に実行したDBマイグレーションのメモ。 以下のサイトを参考にした。 laughingman7743.hatenablog.com # dockerホストで実行 $ docker-compose exec redash /bin/bash # env | grep REDASH > .env # for script in migrations/*; do echo $scirpt ; PYTHONPATH=. ./bin/run python $script;done # rm .env なんか、大量にエラーを吐いた(テーブルが存在しているとか)けど使えているからまぁ大丈夫かな…たぶん。 追記(2016/12/06 19:00 どうやら migaraionts 配下のスクリプトをすべて実行して
この記事はMackerel Advent Calendar 2016の5日目の記事です。 昨日はww24さんによるRaspberry Pi を Mackerel で監視するでした! 先日、Mackrelにメタデータ機能がリリースされましたね! 早速メタデータ機能を使ったMackerelの活用方法を考えてみました! パッケージ管理は意外とめんどくさい 例えば、opensslの脆弱性が見つかった時にパッケージのアップデートをする必要があると思います。 そんな時に、全サーバのパッケージバージョンを取得したくなりますが、サーバが増えてくるとなかなかの手間です。。 😅 そこで、Mackerelのメタデータ機能を使ってサーバのパッケージ情報を管理する方法を考えました! mkr-meta-pkgを作った! buty4649/mkr-meta-pkg このツールはパッケージ情報をメタデータに格納または、
ngx_mrubyを使ってNginxを制御するときに、 mruby_set と if を使うことが多いと思います。 例えばiPhoneからのアクセスの場合のみ特定の処理をしたいとします。 その場合以下の様なコード(nginx.conf)になると思います。 mruby_set_code $is_iphone ' hin = Nginx::Headers_in.new # 判定分が雑だけど例題なのでご容赦・・・ /iPhone/ === hin['User-Agent'] '; if($is_iphone) { # iPhoneの時だけ行なう処理 } User-Agent に iPhoneという文字列が含まれていれば true を返し、そうでなければ falseを返却し、その結果を $is_iphone 変数に格納します。 そして、この変数が真の時だけ特定の処理を行います。 これは意図した動作
先日、複数台のサーバに設定を投入しないといけない事案が発生した。 システムを運用していると頻繁にあるけど、そういう時は台数がすくなければ sshで入って…台数がおおければシェルスクリプトを書いてpscpでそれを撒いてpsshで実行していた。 しかし、シェルスクリプトで書いてしまうとその場限りのものになってしまって、 再利用性が低く構造化しづらかったのでfabricを使ってみた。 (こういうことはpuppetやChefなどの構成管理ツールを使えって話だけど、 使えたら使っている のでそこら辺はお察しください) fabricを選んだのは、同僚でありpythonistaな @laughk先生 が 布教活動をしていて使い方をある程度知っていたのと、何かあればすぐ聞けるっていう理由なのであったw fabricの使い方とかはググってください。。 以下に、私がfabricを導入したときにこれどうするんだ
speakerdeck.com 第5回ペパボテックカンファレンス〜インフラエンジニア大特集〜 - connpassという会社のカンファレンスで発表しました! 発表後に id:matsumoto_r から補足いただきました! ありがとうございます m( )m luaを積極的に使う場合はブロックするようなI/Oがあって、そこで性能が要求されるような状況。我々はそこがオーバーヘッドになるような使い方はあまりないし、ngx_mrubyの良さを活かせる場所(ブロックしないとluaより速かったり)が多いのでngx_mruby #pbtech— 松本亮介 (@matsumotory) 2016年5月14日 発表資料にもありましたが、クエリストリングのチェックやキャッシュファイルの有無にのみ使っているので、ブロックIOは発生しないのでオーバーヘッドは少ないです。 開発者が社内にいることで、困ったときはSl
Let's Encrypt! めっちゃ便利ですよね! 気軽にSSLが使えるようになったし、HTTP2も導入しやすくなったと思います。 今まで実はLet's Encrypt! 使ったことなかったのですが、最近使う機会があって使ってみました。 ですが、なんと NAT環境下(Vagrantとか)ではエラーになってしまったのです。。。 orz どうやらACMEプロトコルの仕様で、ACEMサーバから認証用のファイルをGETしに来るようです。 当然、NAT環境下ではそれ相応の設定しないかぎりアクセスできないので認証エラーとなってしまうのです。。 しかし、ACMEプロトコルの認証方式にはいくつか種類があるようです。 前述した方法はHTTPを用いた認証(http-01)で、これ以外に DNSを用いた認証(dns-01) があります。 今回はこのDNSを用いた認証(dns-01)を使ってLet's Encr
この記事は、Pepabo Advent Calendar 2015の3日目の記事です。 昨日は私のプロンプトにランダムに絵文字を表示すると楽しい 😄 でした。 現在、 2015年12月3日の25時です!!! hubot-slackでAttachmentsを使う方法を共有します! Attachmentsとは? Attachmentsとは何か? SlackのIntegrationで見られるリッチな表示になっているメッセージです。 例えば、↓のような表示です。 通常、hubot-slackで msg.send すると簡単なテキストしか送信できませんが、 Attachmentsを使うことで↑のようなリッチなテキストを送信することができます! 対象のバージョン hubot-slackのv2系では使えていたようなのですが、v3系になってこの機能は削除されたようです。。 しかし、沢山の要望があったのか
fioをコマンドを使う度に、jobファイルのdirectoryパラメータを書き換えたり、 実行後にテストファイルの削除を忘れたりするのがめんどくさかったのでラッパーコマンドを作った。 markdownで出力してくれるのでコピペするだけという便利感。 ただし、実装は雑() buty4649/fio-cdm · GitHub 実行例は以下の様な感じ # fio-cdm /mnt/sdf1 | | Read(MB/s)|Write(MB/s)| |------|-----------|-----------| | Seq | 305.307| 138.191| | 512K | 275.565| 139.452| | 4K | 22.208| 37.098| |4KQD32| 210.052| 125.907| 貼り付けるとこんな感じ Read(MB/s) Write(MB/s) Seq 305
次のページ
このページを最初にブックマークしてみませんか?
『tech.buty4649.net』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く