Niex:使用Elixir的Jupyter袖珍笔记本

2020-12-29 08:27:42

Niex是使用Phoenix LiveView构建的交互式Elixir代码笔记本,支持嵌入式媒体和图表。 Niex存储您的数据并保存永久性交互式笔记本中的代码,非常适合使用Elixir进行科学和数据分析的应用程序,或者用于共享视觉,交互式演示和Elixir编写的代码的文档。

Niex受到功能强大且功能齐全的Jupyter项目的启发。您可能会注意到Jupyter(稍作努力)已经可以将Elixir作为后端支持,那么使用Niex的优势是什么? Niex的主要优点是简单,轻巧并且完全用Elixir编写,因此可以轻松地用作与现有Elixir代码集成的简单依赖项。它可以作为独立的Phoenix应用程序运行,也可以嵌入您自己的Elixir项目中。

运行Niex的主要方法有两种:作为独立的Phoenix应用程序运行,或作为依赖项嵌入您自己的代码库中。

如果您希望快速开始使用Niex,可以从GitHub克隆Niex存储库,并作为simplePhoenix应用程序运行:

如果您想在自己的Elixir项目中使用Niex,并在笔记本中使用自己的代码库,则可以将Niex安装为依赖项:

然后,您需要使用最少的Phoenix配置在config.exs中配置Niex:

config:phoenix,:json_library,Poison#配置端点,服务器:true,debug_errors:true,check_origin:false,http:[端口:3333],debug_errors:true,check_origin:false

注意:尽管Niex使用Phoenix和LiveView,但它可以在自己的端口上作为自己的服务器运行,并且可以与自己的Phoenix应用程序一起愉快地运行。相应地配置Niex端口号,以避免与您的项目的其余部分冲突-在上面的示例中,我们使用端口3333。

代码单元用于存储&执行Elixir代码。要使用代码单元,只需填充该单元并使用" run"执行即可。按钮。单元格输出字段将显示执行结果。单元必须明确执行-如果更改其他单元所依赖的代码,则必须按顺序显式重新运行这些单元命令。

像运行IEx会话一样,Niex维护一个内部解释器状态,该状态与笔记本中的命令顺序无关,并且不会保存在笔记本中。这意味着,当您打开保存的笔记本时,必须执行每个单元格才能恢复内部状态。

您还可以在单​​元格中显示长时间运行的代码的中间结果。这使您可以为异步过程创建动画或更新。要在单元执行完成之前呈现中间结果,请对内容使用Niex.Render / 1。

对于j<-(1..300),请执行Process.sleep(30)data =(1..50)|> Enum.map(fn i-> [i,:math.sin(i / 3.0 + j / 10.0)]结束)Niex.render(Niex.Content.chart(" LineChart&#34 ;,数据,% {points:false}))结束"点击运行以进行动画处理"

#渲染图片image_url =" https://placekitten.com/408/287" Niex.Content.image(image_url)#渲染视频video_url =" http://commondatastorage.googleapis.com/ gtv-videos-bucket / sample / BigBuckBunny.mp4" Niex.Content.video(video_url)#呈现折线图:data =(1..30)|> Enum.map(fn i-> [i,:math.sin(i)]结尾)Niex.Content.chart(" LineChart&#34 ;,数据,高度:400)#绘制饼图:数据=%{" Elixir" => 80,JavaScript" => 10," Ruby" => 20} Niex.Content.chart(" PieChart&#34 ;,数据,高度:400)

Niex使用Chartkick库进行制图,还有许多其他图表类型可用。有关完整列表,请参见Chartkick JavaScript文档。

笔记本以JSON格式存储,通常受Jupyter笔记本格式启发,但大大简化了。 {" metadata&#34 ;: {" name&#34 ;:" New Notebook&#34 ;," version&#34 ;:" 1.0" }," worksheets&#34 ;: {" cells&#34 ;: [%{" cell_type&#34 ;:" markdown&#34 ;," content" :["#Welcome to Niex"]},%{" cell_type&#34 ;:" code&#34 ;," content&#34 ;: [" IO.inspect(\" 123 \"]" output&#34 ;: [{" text" => 123}]}],}} 该软件可通过设计实现任意代码执行-仅用于开发和本地使用。 如果您选择通过网络公开任何Niex功能,则您有责任实施必要的授权和访问控制。