برنامه نویسی

ساختن دفترچه یادداشت با 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"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوت بوک با 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 خود در دسترس قرار داده ام.

امیدوارم این راهنما در سفر یادگیری خود با کاتلین و ژوپیتر برای شما مفید باشد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا