jupyter-基于笔记本编程jupyterlab+kotlin

前言

日常开发中,经常有些探索性的工作需要处理。这类工作更多的是验证可行性,不需要像典型的工程那样遵守目录结构,严格编码,笔记本是做这类工作的良好载体。

jupyter本来是python平台的工具,拓展之后可以用来运行kotlin(间接运行java),也是挺好用的,比java11的jshell好多了;看来跨语言的相互借鉴还是蛮有意义的。

jupyter搭建

也可以参考jupyter-docker-stacks和kotlin-notebook来安装

安装anaconda

使用scoop来安装anaconda。

//搜索anaconda
scoop search anaconda
//全局安装anaconada
scoop install -g anaconada

安装和卸载notebook

打开anaconda prompt命令窗口:

conda search notebook
conda install notebook=6.4.12
conda remove notebook

导出html可能报错:

module 'jinja2' has no attribute 'Markup'

原因是jinja2版本太高了。把原来的移除,安装旧版本:

conda remove jinja2
conda install jinja2=3.0.3

安装和卸载jupyterlab

conda search jupyterlab
conda install jupyterlab
conda remove jupyterlab

安装和卸载kotlin解释器

//安装
conda install -c jetbrains kotlin-jupyter-kernel
//更新
conda update -c jetbrains kotlin-jupyter-kernel
//卸载
conda remove kotlin-jupyter-kernel

为什么不用IJava解释器呢?个人觉得java冗余的语法不适合笔记本编程的体验。

修改默认工作目录

//生成配置文件
jupyter notebook --generate-config
//搜索配置项
c.NotebookApp.notebook_dir
//配置为默认路径,去掉#解注释,配置项前面无空格
c.NotebookApp.notebook_dir = 'D:\jupyter'

删除掉目标框的"%USERPROFILE%"变量
jupyter-基于笔记本编程jupyterlab+kotlin_第1张图片

配置局域网访问ip

# 使用jupyter生成密码
# 生成的密码保存在~/.jupyter/jupyter_notebook_config.json文件中
jupyter notebook password
# 修改配置文件参数
c.NotebookApp.ip='*' 
c.NotebookApp.password = u'你的密码'

安装扩展程序包

# 安装拓展包
conda install -c conda-forge jupyter_contrib_nbextensions
# 应用拓展包
jupyter contrib nbextension install --user
# 开启代码提示
jupyter nbextension enable Hinterland/main --user

配置主题

# 安装主题
conda install -c conda-forge jupyterthemes
# 查看主题列表
jt -l
# 切换主题
jt -t <主题名> -T -N

个人推荐:gruvboxl,黄色背景,护眼;idea也有同款Gruvbox Theme,配合Material Theme UI很赞。

jupyterlab基本操作

打开anaconda prompt命令窗口,输入:

jupyterlab

或者点击图标
在这里插入图片描述

jupyter服务器运行起来,在浏览器中输入http://localhost:8888/lab即可打开jupyterlab的工作界面。

查看帮助

:help

jupyter-基于笔记本编程jupyterlab+kotlin_第2张图片

使用依赖包

官方依赖包

使用%use语法。

默认版本
%use fuel
指定版本
%use fuel(2.3.1)

默认版本定义在..\anaconda3\2021.11\Lib\site-packages\run_kotlin_kernel\librariesjson文件中。

其他依赖包

指定依赖仓库
@file:Repository()
@file:Repository("*mavenLocal")
指定依赖包
@file:DependsOn()
@file:DependsOn("com.squareup.okhttp3:okhttp:4.9.3")

默认的依赖仓库为:

  • Maven Central
  • JitPack

默认使用maven下载依赖,依赖存放位置:~/.m2

查看类路径

:classpath

jupyter-基于笔记本编程jupyterlab+kotlin_第3张图片

查看变量表

:vars

jupyter-基于笔记本编程jupyterlab+kotlin_第4张图片

设置jdk版本

通过配置如下环境变量设置jdk:

  • KOTLIN_JUPYTER_JAVA_HOME
  • JAVA_HOME

配置jvm参数

  • KOTLIN_JUPYTER_JAVA_OPTS
  • JAVA_OPTS

配置额外参数

  • KOTLIN_JUPYTER_JAVA_OPTS_EXTRA

查看jdk版本

新建一个kotlin笔记本,打印java相关信息:

System.out.println(System.getProperty("user.home"))
System.out.println(System.getProperty("os.name"))
System.out.println(System.getProperty("java.home"))
System.out.println(System.getProperty("java.version"))
System.out.println(System.getProperty("java.vm.name"))
System.out.println(System.getProperty("java.vm.version"))
System.out.println(System.getProperty("java.vm.vendor"))

jupyter-基于笔记本编程jupyterlab+kotlin_第5张图片

jupyter kotlin常用库介绍

使用:help命令可以查看官方收录的库。

http客户端fuel

引入依赖并导入类

%use fuel(2.3.1)
import com.github.kittinunf.result.*
import com.github.kittinunf.fuel.core.*

调用百度接口搜索

FuelManager.instance.basePath = "https://www.baidu.com"

Fuel.get("/s", listOf("wd" to "fuel"))
    .response()

执行结果如下:
jupyter-基于笔记本编程jupyterlab+kotlin_第6张图片

由于时间精力的关系,这里不推荐使用:help里面收录的库,而是直接使用java库,毕竟java本身的库又多又全。使用kotlin jupyter,确实需要学习kotlin的一些基本的语法,但是依赖包尽量还是用java的,减少学习的成本。

从另一个角度讲,java本身的库本来就多,学都学不过来,没必要在使用kotlin的第三方库(kotlin标准库还是要了解下);相反,可以把kotlin jupyter作为实验java库的平台,了解并实践java库的入口,甚至,可以用来快速编写并调试一段算法。这些都有助于对java的理解和运用。

kotlin一些必要的语法

  • 语句不用写分号
  • 新建对象不用new,直接调用构造函数
  • 变量前面无需声明类型,用valvar关键字
  • 创建数组:arrayOf,intArrayOf,doubleArray,…
  • 数组变可变长度参数:变量名前加*
  • 创建map:mapOf,mutableMapOf
  • 创建list:listOf,mutableListOf
  • 创建set:setOf,mutableSetOf

guava的使用

jupyter-基于笔记本编程jupyterlab+kotlin_第7张图片

java11 HttpClient

jupyter-基于笔记本编程jupyterlab+kotlin_第8张图片

apache commons rng

根据官方文档探索真是给力,没有编译时间,不用喝咖啡。
jupyter-基于笔记本编程jupyterlab+kotlin_第9张图片

xchart

@file:DependsOn("org.knowm.xchart:xchart:3.8.1")
import org.knowm.xchart.*
val xData=doubleArrayOf(0.0,1.0,2.0)
val yData=doubleArrayOf(2.0,1.0,0.0)
val chart=QuickChart.getChart("Sample Chart","x","y","y(x)",xData,yData)
BitmapEncoder.getBufferedImage(chart)

其他

  • tablesaw

你可能感兴趣的:(kotlin,jupyter,开发语言)