مقدمهای بر اسکریپتنویسی
۱. راهاندازی محیط اسکریپتنویسی شما
اسکریپتنویسی روشی قدرتمندتر برای تعامل با OghmaNano ارائه میدهد. بهجای استفاده از رابط کاربری گرافیکی، شما میتوانید از زبان برنامهنویسی مورد علاقه خود برای تعامل با OghmaNano استفاده کنید. این کار به شما امکان میدهد شبیهسازیها را به شکلی بسیار قدرتمندتر از آنچه تنها با رابط گرافیکی ممکن است هدایت کنید. در ادامه مثالهایی از استفاده از MATLAB و python برای هدایت OghmaNano ارائه میدهم، اما شما میتوانید از هر زبانی که بخواهید و دارای json reader/writer باشد استفاده کنید. Pearl و Java دو زبانی هستند که به ذهن میرسند.
پیش از آنکه اسکریپتنویسی OghmaNano را آغاز کنید، باید به windows بگویید که OghmaNano در کجا نصب شده است. بهطور پیشفرض OghmaNano در C:\Program files x86 \OghmaNano نصب میشود. در آن شاخه دو فایل اجرایی windows خواهید دید؛ یکی با نام oghma.exe که رابط کاربری گرافیکی است، و فایل .exe دومی با نام oghma_core.exe. شما میتوانید oghma_core.exe را از خط فرمان و بدون oghma.exe اجرا کنید. تنها کافی است به شاخهای بروید که یک پوشه sim.oghma دارد و oghma_core.exe را فراخوانی کنید. این کار را میتوان از خط فرمان windows، matlab، python یا هر زبان اسکریپتنویسی دیگری انجام داد. با این حال، پیش از آنکه بتوانید این کار را در windows انجام دهید، باید C:\Program files x86 \OghmaNano را به windows path خود اضافه کنید تا windows بداند OghmaNano کجا نصب شده است. نمونهای از چگونگی انجام این کار در یک نسخه مدرن از windows در پیوند https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ee537574(v=office.14) آمده است.
بهنظر میرسد هر نسخه جدید windows گزینههای پیکربندی را جابهجا میکند، بنابراین ممکن است لازم باشد دستورالعملهای مربوط به نسخه windows خود را پیدا کنید.
۲. نکات بیشتر درباره اسکریپتنویسی
sim.json را بهصورت یک درخت قابل پیمایش نشان میدهد.
به GUI بهعنوان یک نمایشگر JSON ساختاریافته فکر کنید
یک مدل ذهنی مفید هنگام اسکریپتنویسی در OghmaNano این است که کل GUI را بهعنوان یک
نمایشگر و ویرایشگر ساختاریافته برای فایل sim.json زیربنایی در نظر بگیرید.
هر ویجت، اسلایدر، جدول، و پنجره محاورهای در نهایت از این فایل میخواند و در آن مینویسد.
هیچ «وضعیت GUI» جداگانهای وجود ندارد - JSON همان وضعیت است. در ریبون Automation، JSON Explorer (شکل
??)
به شما امکان میدهد فایل sim.json را مستقیماً بهصورت یک درخت سلسلهمراتبی مرور کنید. این کار اغلب
سریعترین راه برای درک این است که یک پارامتر در کجای JSON «قرار دارد»، و برای تأیید اینکه یک عمل GUI
در فیلدی که انتظار دارید مینویسد.
بررسی اشیا از طریق copy-and-paste
تکنیک مفید دیگر این است که از نحوه کار copy-and-paste در سراسر GUI استفاده کنید. هنگامی که یک شیء را کپی میکنید - برای مثال، با راستکلیک و کپیکردن یک لایه در layer editor، یا کپیکردن یک شیء انتخابشده در نمای سهبعدی - OghmaNano میتواند ساختار JSON زیربنایی مسئول تولید آن شیء را مستقیماً روی clipboard قرار دهد.
اگر محتوای clipboard را در یک ویرایشگر متن ساده (Notepad، Notepad++، VS Code، و غیره) paste کنید، میتوانید بلوک دقیق JSON مورد استفاده برای تعریف آن شیء یا ورودی جدول را بررسی کنید. این کار یک نمای مستقیم و بدون ابهام از نحوه نمایش داخلی آن شیء فراهم میکند، و اغلب سریعترین مسیر برای شناسایی کلیدهای مرتبط برای اسکریپتنویسی است.
بسیاری از منوهای زمینه نیز گزینههایی مانند Copy JSON، Copy JSON path، یا Copy scripted path را ارائه میکنند. این فرمانها مکان دقیق یک شیء را در سلسلهمراتب JSON آشکار میکنند، و پیدا کردن و تغییر ورودی متناظر در اسکریپتها را بسیار آسانتر میسازند.
اگر واقعاً گیر کردهاید: از یک ابزار diff استفاده کنید
اگر هر زمان مطمئن نبودید که یک کنترل خاص در GUI چگونه به فایل sim.json نگاشت میشود، یک
روش ساده و مؤثر برای اشکالزدایی استفاده از یک ابزار مقایسه فایل (diff) است.
- یک نسخه پشتیبان از فایل شبیهسازی خود تهیه کنید، مثلاً
sim.json→sim.back. - یک پارامتر منفرد را در GUI تغییر دهید.
-
فایل تغییریافته
sim.jsonرا با نسخه پشتیبان خود با استفاده از یک ابزار diff مانند KDiff3 مقایسه کنید. - خروجی diff دقیقاً به شما نشان میدهد که کدام خط (یا بلوک) در JSON تغییر کرده است، و آشکار میکند که آن کنترل GUI چگونه در داخل نمایش داده میشود.
این کار اغلب سریعترین راه برای نگاشت یک کنترل UI به یک فیلد مشخص JSON است، بهویژه در درختهای پارامتری بزرگ.
استفاده از شناسههای اشیا برای پیدا کردن ورودیها در sim.json
بیشتر اشیای ساختاریافته در OghmaNano - مانند لایهها، شکلها، parameter scanها، و دیگر موجودیتهای سلسلهمراتبی - یک شناسه یکتا (ID) دارند که معمولاً یک رشته تصادفی هگزادسیمال با طول تقریبی 16 کاراکتر است.
شناسه شیء اغلب مستقیماً در GUI نمایش داده میشود. برای مثال، در
شکل ??،
شناسه در گوشه پایین-چپ پنجره ویرایشگر شیء نشان داده شده است. همین شناسه
در ورودی متناظر در فایل sim.json نیز ظاهر میشود.
این شناسهها هنگام پیمایش ساختارهای JSON بزرگ یا عمیقاً تودرتو بسیار مفید هستند.
با جستوجوی رشته شناسه در sim.json، میتوانید فوراً شیء دقیق
مرتبط با یک عنصر GUI مشخص را پیدا کنید، حتی زمانی که سلسلهمراتب اطراف پیچیده باشد.