ساختن دفترچه یادداشت با Jupyter و Kotlin

مقدمه
اخیراً شروع کردم به غواصی در دنیای کاتلین، یک زبان برنامه نویسی مدرن و همه کاره که توجه من را به خود جلب کرده است. با این حال، همانطور که شخصی به محیط تعاملی ژوپیتر عادت کرده است، که امکان تکرار سریع و کاوش کد سیال را فراهم میکند، فکر میکردم آیا چیزی مشابه برای کاتلین وجود دارد یا خیر.
در کمال تعجب متوجه شدم که یک هسته Jupyter برای Kotlin وجود دارد. این ابزار قدرت و ظرافت Kotlin را با تعامل و سهولت استفاده از Jupyter ترکیب می کند و یک محیط توسعه ایده آل برای یادگیری و آزمایش زبان ایجاد می کند.
در این پست، من تجربه خود را از راه اندازی یک محیط Jupyter با پشتیبانی Kotlin به اشتراک می گذارم و حتی با ایجاد یک نوت بوک که به شما امکان می دهد با چندین زبان به طور همزمان کار کنید، یک قدم جلوتر خواهم رفت.
ایجاد یک ظرف با Kotlin
نصب هسته Kotlin برای Jupyter نسبتا ساده است، به خصوص اگر از Docker برای ایجاد یک محیط کنترل شده و قابل تکرار استفاده کنیم. بیایید به Dockerfile که برای این منظور ایجاد کردم نگاه کنیم – نظرات را بررسی کنید تا هر مرحله را درک کنید:
Dockerfile
ما با یک تصویر رسمی Jupyter که از quay.io دانلود شده است شروع می کنیم. ما از یک نسخه خاص برای اطمینان از تکرارپذیری و برچسب گذاری تصویر به عنوان استفاده می کنیم kotlin-kernel
تا به راحتی آن را شناسایی کند.
FROM quay.io/jupyter/base-notebook:2024-12-31 AS kotlin-kernel
ما OpenJDK 21 را که برای اجرای Kotlin ضروری است نصب می کنیم، نصب به صورت روت انجام می شود تا از مشکلات مجوز جلوگیری شود و سپس برای اطمینان از امنیت تصویر به کاربر غیر روت سوئیچ می کنیم.
USER root
RUN apt-get update && apt-get -y install openjdk-21-jdk
USER jovyan
ما هسته Kotlin را برای Jupyter نصب می کنیم، این به ما امکان می دهد کد Kotlin را روی نوت بوک خود اجرا کنیم.
RUN pip install --user \
kotlin-jupyter-kernel==0.12.0.322
ما یک دایرکتوری برای ذخیره نوت بوک ها ایجاد می کنیم.
RUN mkdir -p /home/jovyan/notebooks
در نهایت متغیر محیط را تنظیم می کنیم NOTEBOOK_ARGS
که به ما اجازه می دهد تا نوت بوک را با گزینه های مورد نیاز خود پیکربندی کنیم، در این مورد، ما نمی خواهیم یک مرورگر به طور خودکار باز شود و می خواهیم دایرکتوری نوت بوک باشد. /home/jovyan/notebooks
.
ENV NOTEBOOK_ARGS="--no-browser --notebook-dir=/home/jovyan/notebooks"
برای ساختن تصویر داکر، اجرا می کنیم:
docker build --target kotlin-kernel -t kotlin-kernel .
این دستور تصویر Docker را می سازد و آن را به عنوان برچسب گذاری می کند kotlin-kernel
.
برای اجرای کانتینر:
docker run \
-it \
-p 8888:8888 \
-v $(pwd)/notebooks:/home/jovyan/notebooks \
kotlin-kernel
این دستور:
- کانتینر را در حالت تعاملی اجرا کنید (
-it
). - درگاه 8888 کانتینر را به پورت 8888 میزبان نقشه میکشد (
-p 8888:8888
). - دایرکتوری محلی را سوار کنید
notebooks
در دایرکتوری:/home/jovyan/notebooks
از ظرف (-v $(pwd)/notebooks::/home/jovyan/notebooks
).
پس از راهاندازی، میتوانید به JupyterLab در مرورگر خود دسترسی داشته باشید و خواهید دید که Launcher از قبل دو هسته در دسترس دارد: Python و Kotlin.
و در واقع، اکنون می توانیم با کاتلین نوت بوک بسازیم!
مرحله بعدی تعامل
همانطور که عمیق تر به کاتلین کاوش کردم، متوجه شباهت های جالبی به پایتون شدم. این باعث شد که بخواهم این شباهت ها را با جزئیات بیشتر تجسم کنم و مقایسه مستقیم بین این دو زبان ایجاد کنم. من تعجب کردم که آیا می توان کدهای پایتون و کاتلین را روی یک نوت بوک اجرا کرد، و معلوم شد که این امکان وجود دارد.
من یک افزونه (و هسته Jupyter) به نام SoS (اسکریپت اسکریپت ها) کشف کردم که این قابلیت را می دهد. تصمیم گرفتم آن را با هسته کاتلین به ظرف خود اضافه کنم. در اینجا موارد اضافه شده به Dockerfile آمده است:
به روز رسانی Dockerfile
ما SoS را نصب می کنیم که به ما امکان می دهد کدهای پایتون و کاتلین را روی یک نوت بوک اجرا کنیم.
RUN pip install --user \
sos-notebook==0.24.4 \
jupyterlab-sos==0.11.0 \
sos==0.25.1 && \
python -m sos_notebook.install
با این اضافات، اکنون می توانیم کانتینر بهبود یافته خود را بسازیم و اجرا کنیم:
docker build -t jupyter-kotlin .
docker run \
-it \
-p 8888:8888 \
-v $(pwd)/notebooks:/home/jovyan/notebooks \
jupyter-kotlin
وقتی اکنون به JupyterLab دسترسی پیدا کنید، سه هسته در دسترس را مشاهده خواهید کرد: Python، Kotlin و SoS.
و اکنون می توانیم کدهای پایتون و کاتلین را در یک نوت بوک اجرا کنیم:
سفارشی سازی اضافی
برای بهبود تجربه بصری و تشخیص آسان بین سلول های زبان های مختلف، تصمیم گرفتم ظاهر سلول ها را سفارشی کنم.
Jupyter Notebook به شما امکان می دهد CSS سفارشی اضافه کنید و به ما امکان می دهد بسته به زبان، گرادینت ها را در سمت چپ هر سلول اضافه کنیم.
این CSS است که من استفاده کردم:
div[class*="sos_lan__python"] {
background: linear-gradient(90deg, rgba(255,222,87,1) 10px, rgba(69,132,182,1) 10px, rgba(69,132,182,1) 20px, rgba(254,254,254,1) 20px);
}
div[class*="sos_lan__kotlin"] {
background: linear-gradient(90deg, rgba(180,140,252,1) 0px, rgba(196,22,224,1) 6px, rgba(223,73,107,1) 16px, rgba(223,73,107,1) 20px, rgba(255,255,255,1) 20px)
}
برای پیاده سازی این سفارشی سازی، CSS را در فایلی به نام ذخیره کردم custom.css
و آن را به Dockerfile اضافه کرد:
# Copy the custom.css file
COPY custom.css ${HOME}/.jupyter/custom/custom.css
علاوه بر این، لازم است به دستور مشخص شود jupyter lab
ما می خواهیم از این CSS سفارشی استفاده کنیم و پرچم را اضافه کنیم --custom-css
به دستور run
ENV NOTEBOOK_ARGS="${NOTEBOOK_ARGS} --custom-css"
خطاها و نحوه پنهان کردن آنها
هنگام استفاده از هسته چندزبانه، گاهاً هنگام اجرای یک سلول Kotlin خطایی ظاهر می شود. این خطا به صورت تصادفی نمایش داده می شود و اگرچه من هنوز نتوانسته ام منشا آن یا نحوه حل قطعی آن را شناسایی کنم، اما یک راه حل موقت برای بهبود تجربه کاربری پیدا کرده ام.
برای پنهان کردن این خطای آزاردهنده، تصمیم گرفتم از CSS استفاده کنم. خط زیر را به فایل اضافه کردم custom.css
در بالا ذکر شد:
div[class*="sos_lan__kotlin"] div[data-mime-type="application/vnd.jupyter.stderr"] {
display: none;
}
این خط از CSS پیام های خطای خاص Kotlin را در نوت بوک پنهان می کند. اگرچه راه حل ایده آلی نیست زیرا می تواند خطاهای مهم را پنهان کند، اما به طور قابل توجهی تجربه بصری را هنگام کار با نوت بوک های Kotlin بهبود می بخشد، به خصوص در هنگام مواجهه با این خطای مکرر و به ظاهر بی ضرر.
نتیجه گیری
در این پست، نحوه ایجاد یک محیط توسعه تعاملی برای Kotlin با استفاده از نوت بوک های Jupyter را بررسی کرده ایم.
ما با راه اندازی اولیه یک ظرف Docker با پشتیبانی Kotlin شروع می کنیم، سپس به سمت یک محیط پیچیده تر حرکت می کنیم که امکان اجرای کد به چندین زبان را در یک نوت بوک فراهم می کند.
علاوه بر این، ما دیدیم که چگونه ظاهر نوتبوکهایمان را سفارشی کنیم تا تجربه بصری و خوانایی را بهبود ببخشیم، و چگونه “پنهان کردن” برخی از خطاهای رایجی که ممکن است هنگام استفاده از این نوت بوک ها ایجاد شود.
این نه تنها یادگیری کاتلین را آسانتر میکند، بلکه امکان مقایسه مستقیم با زبانهای دیگر مانند پایتون را نیز فراهم میکند، که میتواند برای توسعهدهندگانی که در حال انتقال به Kotlin هستند یا به طور منظم با چندین زبان برنامهنویسی کار میکنند، بسیار مفید باشد.
منابع اضافی
برای کسانی که علاقه مند به کاوش بیشتر یا تکرار این محیط هستند، من تمام کدهای مورد استفاده در این پروژه را در مخزن GitHub خود در دسترس قرار داده ام.
امیدوارم این راهنما در سفر یادگیری خود با کاتلین و ژوپیتر برای شما مفید باشد.