Rubyのサンドボックスを作って、evalするBotを作った posted at 2018-07-10 01:04:56 +0900 by kinoppyd 注意:安全じゃありません RubyのSnadbox環境 Sansbox環境とは、外部から入力されたプログラムを安全に実行する環境のことです。任意のコードを入力可能な場所で、いきなり system(“rm -rf ~/) とか入力されて、それが本当に実行されたら困りますよね? 自分は困ります。ですが、外部から入力されたコードを安全に実行する環境というのはそれなりに需要があり、最もわかりやすいところではJavaScriptを実行するブラウザ、わかりにくいところでは今回作ろうとしているeval用のbotです。 ブラウザに関しては、インターネットという非常に治安の悪い場所から送られてくるコードを自分の環境で実行するので、サンドボックスが必要で
RubyKaigi2018の5/31 (1日目)の速報です! RubyKaigi2018に参加中のメドピア エンジニアが、セッションの内容や感想を更新していきます。 最新の「RubyKaigi2018 速報!!」まとめ 2日目以降のまとめはこちらです! RubyKaigi2018 速報 !! ( 6/1 - 1つ目 ) - メドピア開発者ブログ RubyKaigi2018 速報 !! ( 6/1 - 2つ目) - メドピア開発者ブログ RubyKaigi2018 速報 !! ( 6/2 最終日) - メドピア開発者ブログ A parser based syntax highlighter (5/31 16:40〜) Masataka Kuwabara @p_ck_ スライド: speakerdeck.com 既存のHighlighterは正規表現を使用している。 atomではcson内に正
Ruby’s New Exception Keyword Argumentsexception: false and exception: true In Ruby 2.6, a variety of Kernel methods get a new exception: false or exception: true keyword argument. When Kernel methods fail, some raise an error and some just return nil. This new feature lets you override that default behavior. TL;DR: In Ruby 2.6 these examples will all work: system 'not-a-command', exception: true #
{-# LANGUAGE OverloadedStrings #-} module Lib where import Foreign.C.String import Data.ByteString.Char8 (unpack, packCString, pack) import qualified Data.ByteString.Lazy.Char8 as BL8 import Data.Aeson -- CStringをAesonが解釈できるData.ByteString.Lazy.Char8に変換し、funcに渡しその結果を、CStringに戻す convertCStringViaJSON :: (BL8.ByteString -> BL8.ByteString) -> CString -> IO CString convertCStringViaJSON func cstr = do
(2018.5.13) (その4)まとめを公開しました。ベンチマーク結果もありますのでご参考に。 はじめに 以前C++を使ってRubyのクラスメソッドを書くを投稿しましたが、大きな配列を扱うことが多いので、C++でデバッグするのはしんどいところがあります。 比較的デバッグがやり易く、速度も出やすいHaskellで書いた整数、浮動小数点、文字列、配列を使う関数をRubyから呼び出す方法を紹介いたします。 GHCのインストールなどでstackを利用している方が多いと思いので、それを使います。 buildなどはPythonからHaskell関数を呼ぶを参考にさせていただきました。 以下 $ stack new testFFI で作成したプロジェクトを前提としてます。 ファイルの変更 app/Main.hsとsrc/Lib.hsにプログラムを書き込みます。 module Main where im
はじめに 「『型なし』と『動的型』って同じ?違う?」「ピピーッ!JavaScriptやRubyを『型なし言語』と呼ぶのは間違いです!」 ツイッターを見ていると、このように「型」という言葉の用法に混乱がみられるので、私見で整理してみたいと思います。 まず、「型」という言葉の用法には、大きく分けて2つあります: 変数や関数についての静的にわかる性質 静的型言語では「型」と言ったら主にこちらを指します。 値の種類を区別するための実行時のタグ付け(型タグ) 「動的型言語」と言った場合の「型」はこちらです。 静的型言語でも「実行時型情報」という名前で、値にタグがついている場合があります。 前者の立場では、「動的型言語」は「型がない」ように見えて、後者の立場では、「動的型言語」にも「型がある」ように見えます。 「静的型 vs 動的型」(あるいは「型あり vs 型なし」)の議論をする際は、「型」という言
JITコンパイラを初搭載した「Ruby 2.6.0-preview1」リリース。大幅な実行速度向上を目指し Rubyでは、次のメジャーバージョンアップとなるRuby3をRuby2の3倍の実行速度にするという「Ruby 3x3」(ルビースリーバイスリー)構想に基づいて開発が進められています。JITコンパイラの実現は実行性能の向上に欠かせない要素であり、プレビュー版でのJITの初搭載はRuby 3x3の実現に向けて大きな一歩を刻んだと言えるでしょう。 まだプレビュー段階ということで「今回のリリースはこのJITコンパイル機能を皆さんの環境で動作を確認して頂くとともに、セキュリティ上の問題が無いかを早期に確認するために行っています。 」と説明されています。 下記は発表文「Ruby 2.6.0-preview1 リリース」から。 JITコンパイラはあらゆるRubyプログラムの実行を高速化することを目
(この記事は Ruby 25th anniversary のための寄稿です) Ruby をブラウザで動かすというと Opal ですが、他の選択肢として、C で書かれた Ruby 処理系を emscripten で JS に変換するという選択肢もあります。 しかし調べてみたところ、mruby を WebAssembly に変換した記録は見つかりましたが、MRI でやった例が見つけられなかったので、やってみました。 デモ https://mame.github.io/emruby/ 手順 https://github.com/mame/emruby/ に書いてあるとおりです。 ビルドコマンドは次の通り。 $ emconfigure ./configure CFLAGS="-m32 -s EMULATE_FUNCTION_POINTER_CASTS=1" $ emmake make V=1 mi
Have a running Ruby program that you want to profile without restarting it? Want to profile a Ruby command line program really easily? You want rbspy! rbspy can profile any Ruby program just by running 1 simple command. rbspy lets you profile Ruby processes that are already running. You give it a PID, and it starts profiling. It's a sampling profiler, which means it's low overhead and safe to run
(RubyAdventCalendar2017の代わりに投稿記事にしました) github.com Rubyでpython3ライブラリを読むことができます。 こんな風に書いていけました。 Vimプラ銀まで進めていきたいと思います。 gem install pycall gem install matplotlib #coding: utf-8 require 'pycall/import' include PyCall::Import sys = PyCall.import_module('sys') puts sys.stdout.encoding pyimport :datetime puts datetime.date.today() pyimport :datetime puts datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S
この記事は Speee Advent Calender の25日目の記事です。 開発部 R&D グループの村田です。所謂フルタイム CRuby コミッターの一人です。 今日は 12/25 です。数時間後には Ruby 2.5.0 がリリースされている予定です。 皆さんはもう RC1 を試しましたか?え?毎日 trunk をビルドして使っているって?とても素晴らしいですね。 しかし、そうじゃ無い人も大勢いると思います。ですから、ここでは Ruby 2.5.0 で何がどう変わったのか、インパクトが大きいものを選んで最終確認をしておきましょう。 まとめ方は以下のようにしました*1。 言語仕様の変更 組み込みクラスの変更 パフォーマンス改善 言語仕様の変更 トップレベルで定義された定数の検索 トップレベルで定義された定数はObjectクラスの下に定義されたことになります。 TWO = 2 Obje
この記事はRuby Advent Calendar 2017の23日目の記事です。 はじめに Webアプリケーションフレームワーク(WAF)といえば、 薄いアプリケーションをサクッと書くのに適しているsinatra なんでもあり気味なRuby on Rails など、rubyで有名なものだけでもぱっと複数名前が上がりますね。 これらのWAFはApacheやnginxと連携させて動作させますが、これらのWebサーバはそのままではWAFと連携して動きません。なにかしら間にコードを書く必要があるのですが、このコードのインタフェースがWAFによって違ったらWAFを選んだら連携させるサーバも固定されてしまいますね。 そこで、WAFとWebサーバの間にこれらが協調動作するためのインタフェースを設定しましょう、それがrack... とまで書いていてやっぱり意味がよくわかっていないので、この記事ではngi
この記事は、Ruby Advent Calendar 2017の12/22の記事です。前日はTomoProgさんでした。 Rustという言語があります。 この言語の特徴は、一つは実行時のコストの低さ、もう一つは「所有権」システムにあると思います*1。所有権システムについては、2016年のRubyKaigiで発表されたGuildにインスピレーションを与えたことでもRuby界隈では知られているかと思います*2。 が、今日の記事はRustについて記述することが目的ではないので、言語の特徴については細かくは触れないことにします。 RustによるRuby拡張の話題は、実はRubyKaigiでは2015年と2017年の2度に亘ってセッションになっています。これは「型安全な」「実行が速い」言語で拡張を記述できるということに技術的関心が集まる、ということを表していると言えます。Rubyの特徴といえば「型が
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く