© 2008 55DSL / Legal Terms 55DSL S.r.l. via T.A. Edison 13/15 36063 Marostica, Vicenza - Italy. C.F., P. Iva e Reg. Imprese Vicenza 03242770240
© 2008 55DSL / Legal Terms 55DSL S.r.l. via T.A. Edison 13/15 36063 Marostica, Vicenza - Italy. C.F., P. Iva e Reg. Imprese Vicenza 03242770240
DSL stands for Domain Specific Language The main goal of tools such as Kubernetes, Docker compose, Jenkins CI, Gitlab CI, or Ansible, among others, is that their behavior can be customized by configuration. They‘re like a black box that depending on the input (YAML/JSON descriptors), will generate different output. Other tools which belong to HashiCorp, such as Terraform, Vault, or Nomad use HCL i
はてブ中毒なのでRubyPicoで動くDSLを書いてみました。 rubypico/hatebu 特徴 DSL: Rubyを使って効率的にブックマークを収集 履歴: 同じURLを何度も表示しない 特に履歴機能が欲しくて作りました。特定のタグから情報を収集するときに何度も同じURLが表示されてしまうのを防いでくれます。 インストール AppStoreからRubyPicoをインストールします。 RubyPico - Ruby Programming Environment in iOS rubypico/hatebu のソースコードを全てダウンロードすればよいのですが、GitHubからソースコードをダウンロードできるライブラリがあるので先にそれをインストールします。 RubyPicoGemsを参考にgithub_download.rbをインストール github_download.rbを起動 h
Gradle already has a powerful DSL, but Gradle wouldn't be Gradle if we couldn't extend the DSL ourselves. Maybe we have our own naming conventions in our company or we have a special problem domain we want to express in a Gradle build script. We can use the ExtensionContainer, available via project.extensions, to add new concepts to our build scripts. In the Standardizing your enterprise build env
Cygamesは、8月31日開催の「CEDEC2017」にて、セッション「ユーザーを飽きさせない高頻度の更新を可能にする開発運用ノウハウ~ハイスピードな開発、リリースを実現するために~」を実施。 同社の鈴木元気氏(技術本部 クライアントサイドエンジニアリーダー)が、社内プロジェクトにおける実例を踏まえて運用フロー改善に関するノウハウや、DSLを導入することで実現したテスト効率化、コード自動生成システムなどについて語ったセッションの模様をレポートする。 ▲鈴木元気氏氏。 鈴木氏はまず、ゲームにおける運用について、ゲームに対してコンテンツや機能を追加して拡張することで、「ゲームを成長させていくことが大切」だと説明。コンテンツを追加し拡張させることは、ユーザーの手にとってもらいやすくなるので良いことだとしながらも、「ちょっとしたことで離れる恐れもある」という。飽きずに楽しんでもらうためには、“
こんにちは。CTOの河内です。 多くのプロジェクトがスタート時はそうである通り、我々のプロジェクトもAPI仕様がありませんでした。 最初は規模が小さく問題として認識されていなかったのですが、規模が大きくなり、また開発者の入れ替わりを経験するごとに、「この API って何返してくるの?」という問いに答えられる人が段々といなくなってきました。 「ソースが仕様だ」とサーバの実装を読めばもちろん答えられるのですが、ソースコードを読み解く時間がかかるため効率的ではありません。 また、サーバ実装が唯一の情報源となるため、ロジックが何かおかしいと感じても、それが仕様なのかバグなのか判断できない状態でした。 API仕様を先に定義し、通信上の疑問にはAPI仕様で答えられるようにしたかったのです。 これは一般的な課題で、日本CTO協会が2019年12月に公開した DX Criteria DX Criteria
矢野経済研究所は26日、国内ブロードバンド回線市場に関する普及予測を発表した。ブロードバンド契約数は、2006年度末には2,730万、2011年度末には4,127万に達すると予想している。 調査は、2006年3月から6月にかけて、主要通信キャリア・ISP事業者など合計20社を対象に実施。同社専門研究員による直接面接取材を基本とし、電話・ファックス・メールによるヒアリング調査も併用した。 ■ DSLは2006年度に約6万純減、2007年以降は純減ペースが上がる それによれば、2006年度の回線種別ごとの契約数は、FTTHが約928万(前年度比170%)、DSLが約1,446万(同100%)、CATVが約355万(同107%)、FWA(固定無線アクセス)が約8,000(同50%)と予測。これらを合計したブロードバンド契約数は、約2,730万(同117%)に達する。DSLについては、既存加入者の
Jay Fields' Thoughts: Designing a Domain Specific Language Jay FieldsはThoughtWorksのプログラマーで専門はDSLだ。 どんなDSLに設計するか。DSLの利用者(≠DSL設計者)にどんな言語にしたいかを尋ねることがミソ。利用者にとって利用しやすい言語は利用者自身が考える。こういう方式はBusiness Natural Languageという形となって成功した。プログラマーにとって利用しやすいだけではダメだ。 利用者の問題領域は利用者自身が知っている。だから、DSLは利用者が設計する。プログラマーはそれを実行可能な形に変換するまでだ。 そんな彼が今までのDSL設計の経験の集大成としてexpectationsという新たなRubyのtesting frameworkを作成した。 http://expectations.
1年で38%の伸び。回線数は中国が首位で3330万回線。北米では、DSLの回線数の伸びがCATVを上回っている。 英調査会社Point Topicが9月19日に発表した統計によると、2006年6月末の世界のDSL回線数は、前年から38%増えて1億6400万回線となった。 地域別シェアは、回線数を1800万(前年比45%)伸ばした欧州連合が35%で首位をキープした。2位は南・東南アジアの22%。前年比で1300万回線増加しているが、うち1160万回線が中国での増加。以下、アジア太平洋(18%)、北米(16%)、南米(5%)と続いている。 国別では、1位は中国の3330万回線。以下、米国(2320万回線)、日本(1490万回線)と続く。回線数が大きく増加しているのは、中国のほか、インド、ブラジル、メキシコ、トルコ。また、北米でのDSLの伸びは、CATV回線の伸びを上回っているという。 国別DS
みなさん。こんにちは。 ラボ副代表の西山です。 先週、コンペの例題として、「銀行の顧客ターゲティング【練習問題】」をコンペにアップしました。 データソースは、UCI(University of California,Irvine)のMachine Learing Repositoryから引用したもので、 とある銀行の顧客データ(属性、過去の利用状況、過去のキャンペーンでの反応実績等)をもとに、 新たに実施するキャンペーンでの反応ユーザを予測しターゲティングするためのモデルを構築します。 今日は、このコンペを例に予測モデルの構築を行ってみました。 RでRandomForest まずは、何も難しいことを考えず、判別問題(2値分類)の際によく使われる、 RandomForestでモデリングしてみます。 RでLibaray,randomForest を使って、train.csvか
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community. Pick a username Email Address Password Sign up for GitHub By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails. Already on GitHub? Sign in to your account
もうすぐ、specs2がversion2というちょっとややこしい(?)メジャーversionになって出るらしいです。でました。 新機能いっぱいあって自分も把握できてないんですが、その中でも面白いDSLが新機能として入っていたので、それを簡単に紹介します。 英語読める人は、本人がblog書いてるのでこれ http://etorreborre.blogspot.jp/2013/05/the-latest-release-of-specs2-2.html 読みましょう、今回紹介するもの以外にも、網羅的に説明されてます まず、String InterpolationのDSLを説明するまえに、ちょっとspecs2の基本的な形式について説明します。 specs2にはimmutable*1とmutable*2という2つの形式があります。*3 公式のドキュメントからそのまま拝借しますが、 mutableは
第3回 話題騒然! 「言語内DSL」の概念とRake【前編】:Ruby on Rails究極指南(2/2 ページ) ビルド言語の分類とRake DSLはスタイルによって幾つかに分類できますが、ここではプログラミング言語指向のものに注目します。プログラミング言語指向のDSLは、言語内(internal)DSLと異語外(external)DSLに大別できます。言語内DSLとは実行時に利用される言語(ホスト言語)とDSLが同じものを、言語外DSLはホスト言語とDSLが異なるものを指します。いずれも以前から行われているアプローチであり、例えば言語内DSLはLispやSmalltalkで、言語外DSLは多くのUNIXツール(例えばawkやprocmail、PostScript)で使用されています。 マーティン・ファウラー氏は、make、Ant、Rakeの各ビルド言語をDSLのスタイルに従って次のよう
Writing a domain specific language DSL with python Written Saturday 05 September 2009 by Fernando Meyer. A domain-specific language is a piece of software designed to be useful for a specific task in a fixed problem domain, they're gaining popularity because they enhance productivity and reusability of artifacts. DSLs also enable expression and validation of concepts at the level of abstraction of
はじめての JUDE ユーザ会へご参加いただいたみなさん、ありがとうございました。 浅海先生がJUDEをDSLとして利用するという新たな活用例を示して頂き、その資料を 公開させて頂きます。 「Relaxer5におけるJUDE DSL」 JUDEをDSLエディタとして使う -- JUDE API 活用法 http://www.change-vision.com/ja/doc/jude_dsl.pdf この発表には感動しました。 浅海先生は、 RDBは、「構造」(structure)であるのに対し、XMLやMindMapは「半構造」(semi-structure)である。これによって、要求や文章、のようなまだ構造になっていない曖昧なものを掴み取ることができる、 というのです。 XMLは、1つのデータに対して複数のスキーマをかぶせることによって、さまざまに読みとることができる。スキーマによっては
Tweet たくさんのサーバを日々扱うエンジニアにとって、SSH config をキレイに保つことは大切です。 そもそも SSH config は構造的に書きにくい仕様になっているし、「まあそんなものか..」と妥協して、SSH config のメンテが適当になってしまうこともあると思います。 今までわたしもそうだったのですが、さすがにそろそろ破滅が見えてきていて、なんとなく Ruby で DSL を作るやっていきが高まったので、Ruby の DSL で設定を書くと SSH config を生成する Nymphia というものを作りました。 https://github.com/mozamimy/nymphia また、色があまりつかなくてさみしかったので、vim の syntax も作りました。 https://github.com/mozamimy/nymphia.vim インストール 例
JDK6 introduced great but probably not too widely known possibility of embedding lightweight http server in to your application. If you are not aware about it as I was here is the link for javadocs of simple and nice API Of course, several great options for embedded http server (servlet container usually) existed before. Jetty was my favorite for a long time. The biggest difference is that JDK giv
itamae-goの実装が面白そうだったので、ソースコードを調べていたんですが、 rustでもmrubyを組み込むcrateあったなーと思い、勉強ついでにマネをさせてもらいました。 用意するもの rust (1.10.0) ソースコード /tmp/madoka/homuraというディレクトリつくって、 そこに3つファイルを作るというあまり意味のないレシピ。 #[macro_use] extern crate mrusty; use mrusty::*; // ruby static RUBY_RECIPE: &'static str = r#" directory '/tmp/madoka/homura' 3.times do |i| file "/tmp/madoka/homura/#{i}" end "#; #[allow(unused_must_use)] #[allow(unuse
前回の(1)はこちらから。 Mojoliciousから見る内部DSLの利点と欠点 まず、Mojoliciousのルーティング定義を通してPerlの内部DSLの一例を紹介し、DSLを使わなかった場合との比較を行います。 Mojoliciousは人気のあるPerlのWebアプリケーションフレームワークです[1]。ルーティング定義の方法として、 routesオブジェクトにルーティングを定義していくオブジェクト指向的なやり方 RubyのSinatraに端を発した簡潔な内部DSLで定義するやり方 の2種類をサポートしています。それぞれの方法で定義したものが以下です。 オブジェクト指向版 { package MyApp; use Mojo::Base 'Mojolicious'; sub startup { my $self = shift; my $routes = $self->routes;
はじめに Railsでの開発を10年以上やって通知まわりのDSLを設計することが何度かあり、DSLの作り方を完璧に理解したので整理して共有します。 通知システムを作る 通知システムは一般に、複雑で全体像が把握しにくいものになりやすい特徴があります。 サービスのグロースでは通知を飛ばすのは一般的な手法ですが、そのために各チームがたくさん飛ばすことになり、全体が複雑になっていき、そして新しく通知を追加するのが困難になっていきます。 通知を追加したときに変化するものと変化しないものを明確にわけ、変化するもののためにDSLを設計することで、通知を追加しやすくかつ管理しやすいアーキテクチャにすることができます。 Step1: 通知システムのスコープを決める まず作ろうとしているシステムのスコープを決めていきましょう。 新しく通知を追加するときを想像して、そのときに必要になる要素を並べてみて、どこまで
(1)はこちら、(2)はこちらから。 Plack::Builder から見る内部DSLを作るテクニック それでは、Plack::Builderのコードを通して、Perlで内部DSLを作るうえでのテクニックを紹介していきます。Plack::BuilderはPlackディストリビューションの一部で、PSGI(Perl Web Server Gateway Interface)アプリケーションを定義するためのDSLが書かれています。 PSGIは、いまやPerl界のデファクトスタンダードとなったWebサーバとWebアプリケーションフレームワークをつなぐ仕様であり、Plackはその実装です。このように大成功したPSGI/Plackの中でDSLがまさに効果的に使用されています。ぜひ、この活きた例からDSLの使いどころとそれを実現するためのテクニックを習得してください。 Plack::Builderの
こんにちは。CTOの河内です。 多くのプロジェクトがスタート時はそうである通り、我々のプロジェクトもAPI仕様がありませんでした。 最初は規模が小さく問題として認識されていなかったのですが、規模が大きくなり、また開発者の入れ替わりを経験するごとに、「この API って何返してくるの?」という問いに答えられる人が段々といなくなってきました。 「ソースが仕様だ」とサーバの実装を読めばもちろん答えられるのですが、ソースコードを読み解く時間がかかるため効率的ではありません。 また、サーバ実装が唯一の情報源となるため、ロジックが何かおかしいと感じても、それが仕様なのかバグなのか判断できない状態でした。 …
Jenkinsで似たようなジョブをテンプレートにする方法として、ここで取り上げる Job DSL Plugin の他にも、 Jobcopy Builder Plugin のような方法もある。 GroovyでDSLとしてジョブを定義できる点が気に入って、今回はJob DSL Pluginを採用したので、使い方を書き残す。 テンプレートDSLの作成 今回は、こんなジョブのテンプレートを作成する。 GitBucket上で管理したGitリポジトリからソースコードを取得する ビルド、テストはGradleを使う ジョブ名、リポジトリのURL、ビルド結果メールの送信先が可変要素 DSL作成時のポイント プラグインの API Reference が充実しているため、そちらを参照しながら実装する プラグインの Wiki には、使い方を中心としたドキュメントがあるため、そちらも参照する 特に、 ローカルで開発
はじめに スクリプトファイルの命名 Kotlin と Groovy の言語上の考慮事項 Gradle init によるプロジェクト生成 プラグインの適用 プラグインの設定 タスクの構成 タスクの作成 依存の指定 よくある設定 はじめに Gradle 5.0 よりGradle Kotlin DSL が提供され、groovy によるビルドスクリプトを Kotlin で記載できるようになりました。 Kotlin でビルドスクリプトを書くことで、IDEによるサジェストやコードジャンプなどの恩恵を十分に受けることができますし、タイプセーフでありリファクタリングなども容易となるので、これから Groovy のビルドスクリプトを書くのであれば Gradle Kotlin DSL を使うべきです。 ここでは、Groovy DSL と Kotlin DSL の違いと Kotlin DSL でビルドスクリプト
概要 ある程度まとめ。 (2010年における現状。) 具体例の辺りはそれなりに開発経験ないと難しいかも。 DSL の使われ方 DSL の目指すところは、突き詰めると「アプリケーション開発を楽にする」だとは思うんですが、 その在り方にはいろんな形があるかと思います: 非プログラマーが直接実行可能な「ドメインモデル」を書く。 開発において、直接的なコード書きよりも、顧客からの要件を吸い出してモデル化(ドメインモデリング)するのが主な仕事になる人がいて、 そういう層が直接実行可能なものを書けるようにする。 あるいは、ディジタルネイティブがそろそろ就職しだす昨今、顧客側にもある程度プログラムの読み書きが必要かも: 少なくとも委託で開発してもらったものの良し悪しの判断つく程度に。 委託先と保守契約でもめても、引き継ぎ先を探すまでの間くらい自前で保守できるように。 プログラマーがより「意図通り」にプロ
この記事は Kotlin Advent Calendar 2016 7日目の記事です。 今や「Androidの新規開発をするならKotlinを使え」と言われる(らしい)ほどの人気となったKotlin。 使ってみることを検討している方も、すでに使っている方もいらっしゃるかと存じます。 nullable型、拡張関数、interfaceのデフォルト実装、Property Delegation、名前付き引数、型推論、etc... 言語機能が強力なので、頭の中のものをスラスラと、しかも簡潔な形で書くことができます。 さて、その強力な言語機能を使うと、(Javaではどうにも難しかった)DSLを作ることだってできてしまいます。 (GradleもKotlinで書くことができるようになりましたし、その用途の広さはお墨付きです!!) DSLを作る際に有用なKotlinの言語機能を紹介しつつ、実際にDSLを組み
前回は見つけた文字列リテラルを片っ端からDSLとみなして警告をつけていましたが、今回からちゃんとDSLっぽくなる予定。 まず、すごく簡単なDSLの仕組みを作ります。 public class MyDsl { private int value; private MyDsl(int value) { this.value = value; } /** * このDSLを評価した結果を返す。 * @return 評価結果 */ public int eval() { return value; } /** * DSL記述を解析してオブジェクト化して返す。 * @param dsl DSL記述 * @return DSLオブジェクト * @throws IllegalArgumentException 引数が整数でない場合 */ public static MyDsl parse(String d
I have been working on a new test library for Google Android lately, a project which I’m very excited about, and which I feel has loads of potential: Calculon, an Android testing library which lets you write functional tests for your Activities using a very concise and natural syntax. I am a big fan of test-driven development, and I think there’s no arguing about the massive benefits you get from
流行について Clojure(LISP系)、Ruby、elixirをはじめ最近開発されたり注目されている言語では、メタプログラミングの要素を持つものが増えてきている。また、ScalaにMacroが実装されるようになったり、既存の言語でも言語拡張によりその要素を取り込もうとする流れがある。 これは、最近のプログラミング言語においてはメタプログラミングが流行となっているといってよいだろう。 ここでそのメタプログラミングについて、さらっとした理解をしていこう。 メタプログラミングとは メタプログラミング (metaprogramming) とはプログラミング技法の一種で、ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックによってプログラミングを行う方法、またその高位ロジックを定義する方法のこと。主に対象言語に埋め込まれたマクロ言語によって行われる。 (w
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く