کوڈ کے بطور پریزنٹیشن، یا میں اب پاورپوائنٹ کیوں استعمال نہیں کرتا ہوں۔

کوڈ کے بطور پریزنٹیشن، یا میں اب پاورپوائنٹ کیوں استعمال نہیں کرتا ہوں۔

مجھے لگتا ہے کہ میں نے اپنے IT کیریئر میں ساتھیوں، کلائنٹس، اور عوامی تقریر میں درجنوں پیشکشیں دی ہیں۔ کئی سالوں سے، پاورپوائنٹ میرے لیے سلائیڈ پروڈکشن ٹول کے طور پر ایک قدرتی اور قابل اعتماد انتخاب رہا ہے۔ لیکن اس سال صورتحال کوالٹی طور پر بدل گئی ہے۔ فروری سے مئی تک مجھے پانچ کانفرنسوں میں بولنے کا موقع ملا اور رپورٹس کی سلائیڈیں کم وقت میں، لیکن اعلیٰ معیار کے ساتھ تیار کرنی تھیں۔ سلائیڈز کے بصری ڈیزائن کے حوالے سے کام کے اس حصے کو دوسرے لوگوں کو سونپنے کے بارے میں سوال پیدا ہوا۔ میں نے ایک بار ایک ڈیزائنر کے ساتھ کام کرنے کی کوشش کی، .pptx فائلیں بذریعہ ڈاک بھیج کر، لیکن یہ کام افراتفری میں بدل گیا: کوئی نہیں جانتا تھا کہ سلائیڈز کا کون سا ورژن "جدید ترین" ہے، اور پاورپوائنٹ میں فرق کی وجہ سے لے آؤٹ "چل رہا" تھا۔ ہماری مشینوں پر ورژن اور فونٹ۔ اور میں نے کچھ نیا کرنے کا فیصلہ کیا۔ میں نے اسے آزمایا، اور تب سے میں نے پاورپوائنٹ پر واپس جانے کے بارے میں نہیں سوچا۔

ہم کیا چاہتے ہیں

تقریباً ڈیڑھ سال پہلے، ہماری کمپنی نے پراجیکٹ دستاویزات بنانے کے لیے ورڈ کا استعمال بند کر دیا، اسی طرح کے مسائل کا سامنا کرنا پڑا: اگرچہ ورڈ ایک چھوٹی دستاویز کو ٹائپ کرنے کے لیے اچھا ہے، جیسے جیسے حجم بڑھتا ہے، تعاون اور اعلیٰ معیار کے حصول میں مشکلات پیدا ہوتی ہیں۔ متحد ڈیزائن. ہمارا انتخاب گر گیا۔ AsciiDoctor، اور ہم اس انتخاب پر خوش ہونے سے کبھی باز نہیں آتے، لیکن یہ ایک الگ مضمون کا موضوع ہے۔ اسی وقت، ہم نے "کوڈ کے طور پر سب کچھ" کے DevOps اصولوں میں سے ایک کی تاثیر کو سیکھا، لہذا پریزنٹیشن سلائیڈز بنانے کے لیے نئی ٹیکنالوجی کے تقاضوں کا انتخاب بالکل واضح تھا:

  1. پریزنٹیشن مارک اپ لینگویج میں ایک سادہ ٹیکسٹ فائل ہونی چاہیے۔
  2. ہماری سلائیڈز ترقیاتی منصوبوں کے بارے میں ہیں، اس لیے مارک اپ کو بیرونی سسٹمز کا سہارا لیے بغیر داخل کرنا آسان بنانا چاہیے۔
    • نحو کو نمایاں کرنے والے کوڈ کے ٹکڑے،
    • تیروں سے جڑے ہندسی اشکال کی شکل میں سادہ خاکے،
    • UML خاکے، فلو چارٹس اور بہت کچھ۔
  3. پریزنٹیشن کا مسودہ ایک ورژن کنٹرول سسٹم میں محفوظ ہونا چاہیے۔
  4. تیار شدہ سلائیڈوں کی توثیق اور اسمبلی کو CI سسٹم میں کیا جانا چاہیے۔

آج، مارک اپ لینگویجز میں سلائیڈز بنانے کے لیے دو بنیادی اختیارات ہیں: پیکیج پروجیکٹر LaTeX کے لیے یا HTML/CSS کا استعمال کرتے ہوئے سلائیڈز بنانے کے لیے فریم ورک میں سے ایک (انکشاف, تبصرہ, deck.js اور کئی دوسرے).

اگرچہ میری روح LaTeX میں ہے، لیکن میرے ذہن نے حکم دیا کہ ایک ایسے حل کا انتخاب جسے استعمال کرنے والا میں اکیلا نہیں ہوں لوگوں کے وسیع حلقے سے واقف حل کی طرف ہونا چاہیے۔ ہر کوئی LaTeX کو نہیں جانتا، اور اگر آپ کی روزمرہ کی مشق سائنسی مضامین لکھنے سے متعلق نہیں ہے، تو آپ کے پاس اس نظام کی بہت بڑی، پیچیدہ دنیا میں غرق ہونے کا امکان نہیں ہے۔

تاہم، ایچ ٹی ایم ایل/سی ایس ایس میں مہارت بالکل وسیع مہارت نہیں ہے: مثال کے طور پر، میں اس میں پوری طرح سے ماہر نہیں ہوں۔ خوش قسمتی سے، پہلے سے واقف AsciiDoctor بچاؤ کے لیے آتا ہے: ایک کنورٹر asciidoctor- انکشافات آپ کو AsciiDoctor مارک اپ کا استعمال کرتے ہوئے RevealJS سلائیڈیں بنانے کی اجازت دیتا ہے۔ اور یہ سیکھنا آسان ہے اور ہر ایک کے لیے قابل رسائی ہے!

سلائیڈز کو کوڈ کرنے کا طریقہ

AsciiDoctor پر کوڈنگ سلائیڈز کے جوہر کو سمجھنے کے لیے، سب سے آسان طریقہ مخصوص مثالیں دینا ہے۔ یہ سب اصل سلائیڈز سے ہیں جو میں نے اس سال اپنی کانفرنس پریزنٹیشنز کے لیے بنائی تھیں۔

عنوان کے ساتھ ایک سلائیڈ اور ایک کے بعد ایک کھلنے والی آئٹمز میں فہرست:

== Зачем нам Streams API?

[%step]
* Real-time stream processing
* Stream-like API (map / reduce)
* Под капотом:
** Автоматический offset commit
** Ребалансировка
** Внутреннее состояние обработчиков
** Легкое масштабирование

نتیجہ

کوڈ کے بطور پریزنٹیشن، یا میں اب پاورپوائنٹ کیوں استعمال نہیں کرتا ہوں۔

نحو کو نمایاں کرنے کے ساتھ ہیڈر اور سورس کوڈ کا ٹکڑا:

== Kafka Streams API: общая структура KStreams-приложения

[source,java]
----
StreamsConfig config = ...;
//Здесь устанавливаем всякие опции

Topology topology = new StreamsBuilder()
//Здесь строим топологию
....build();
----

نتیجہ

کوڈ کے بطور پریزنٹیشن، یا میں اب پاورپوائنٹ کیوں استعمال نہیں کرتا ہوں۔

کسی ٹاک کی تیاری میں، کوڈ ڈیمو بار بار نظرثانی اور بہتری سے گزرتے ہیں، اس لیے "را کوڈ" کو براہ راست سلائیڈ میں کاپی اور پیسٹ کرنے کی صلاحیت انمول ہے، اس بات کو یقینی بناتے ہوئے کہ ڈیمو نحو کو نمایاں کرنے کی فکر کیے بغیر تازہ ترین ہے۔

عنوان، مثال اور متن (سلائیڈ پر ترتیب سیلز میں کی جاتی ہے۔ AsciiDoctor میزیں۔):

== Kafka Streams in Action

[.custom-style]
[cols="30a,70a"]
|===
|image::KSIA.jpg[]
|
* **William Bejeck**, +
“Kafka Streams in Action”, November 2018
* Примеры кода для Kafka 1.0
|===

نتیجہ

کوڈ کے بطور پریزنٹیشن، یا میں اب پاورپوائنٹ کیوں استعمال نہیں کرتا ہوں۔

کبھی کبھی عنوان کی ضرورت نہیں ہوتی ہے، اور اپنی بات کو واضح کرنے کے لیے آپ کو صرف ایک فل سکرین تصویر کی ضرورت ہوتی ہے:

[%notitle]
== Жить в легаси нелегко

image::swampman.jpg[canvas, size=cover]

نتیجہ

کوڈ کے بطور پریزنٹیشن، یا میں اب پاورپوائنٹ کیوں استعمال نہیں کرتا ہوں۔

اکثر کسی خیال کو "تیر کے ذریعے جڑے ہوئے مربعوں" کی شکل میں ایک سادہ خاکہ سے سپورٹ کرنے کی ضرورت ہوتی ہے۔ خوش قسمتی سے، AsciiDoctor سسٹم کے ساتھ مربوط ہے۔ گرافویز — ایک ایسی زبان جو آپ کو عمودی خطوط اور ان کے درمیان کنکشن کی تفصیل کی بنیاد پر گراف ڈایاگرام کی وضاحت کرنے کی اجازت دیتی ہے۔ Graphviz سیکھنے کا منحنی خطوط اختیار کرتا ہے، لیکن فراہم کردہ مثالوں کی بنیاد پر، یہ کرنا بہت آسان ہے! یہ ایسا لگتا ہے:

== Пишем “Bet Totalling App”

Какова сумма выплат по сделанным ставкам, если сыграет исход?

[graphviz, "counting-topology.png"]
-----
digraph G {
graph [ dpi = 150 ];
rankdir="LR";
node [fontsize=18; shape="circle"; fixedsize="true"; width="1.1"];
Store [shape="cylinder"; label="Local Store"; fixedsize="true"; width="1.5"]
Source -> MapVal -> Sum -> Sink
Sum -> Store [dir=both; label=" n "]
{rank = same; Store; Sum;}
}
-----

نتیجہ

کوڈ کے بطور پریزنٹیشن، یا میں اب پاورپوائنٹ کیوں استعمال نہیں کرتا ہوں۔

ایسی صورت میں جب تصویر پر کیپشن میں ترمیم کرنا، تیر کی سمت تبدیل کرنا وغیرہ ضروری ہو، تو یہ تصویر کو کسی جگہ دوبارہ بنانے اور اسے سلائیڈ میں دوبارہ ڈالنے کے بجائے براہ راست پریزنٹیشن کوڈ میں کیا جا سکتا ہے۔ اس سے سلائیڈز پر کام کرنے کی رفتار میں نمایاں اضافہ ہوتا ہے۔

ایک زیادہ پیچیدہ مثال:

== Невоспроизводимая сборка
[graphviz, "unstable-update.png"]
-----
digraph G {
  rankdir="LR";
  graph [ dpi = 150 ];
  u -> r0;
  u[shape=plaintext; label="linter updaten+ 13 warnings"]
  r0[shape=point, width = 0]
  r1 -> r0[ arrowhead = none, label="master branch" ];
  r0-> r2 [];   b1 -> b4;  r1->b1
  r1[label="150nwarnings"]
  b1[label="± 0nwarnings"]
  b4[label="± 0nwarnings"]
  b4->r2
  r2[label="163nwarnings", color="red", xlabel=<<font color="red">merge blocked</font>>]
  {rank = same; u; r0; b4;}
}
-----

نتیجہ

کوڈ کے بطور پریزنٹیشن، یا میں اب پاورپوائنٹ کیوں استعمال نہیں کرتا ہوں۔

ویسے، گرافویز کے ساتھ تجربہ کرنا اور صفحہ پر تصاویر کو ڈیبگ کرنا آسان ہے۔ گرافویز آن لائن.

آخر میں، اگر آپ کو سلائیڈ میں فلو چارٹ، کلاس ڈایاگرام یا دیگر معیاری ڈایاگرام داخل کرنے کی ضرورت ہے، تو AsciiDoctor کے ساتھ مربوط ایک اور نظام بچ سکتا ہے، پلانٹ یو ایم ایل. میرے ساتھی نکولائی پوٹاشنکوف نے PlantUML کی وسیع صلاحیتوں کے بارے میں لکھا علیحدہ پوسٹ.

پریزنٹیشن پروجیکٹ کو ورژن کنٹرول سسٹم پر ذخیرہ شدہ کوڈ میں تبدیل کرنے سے پریزنٹیشن پر مشترکہ کام کو منظم کرنا ممکن ہو جاتا ہے، سب سے پہلے، مواد اور ڈیزائن بنانے کے کاموں کو الگ کرنا۔ RevealJS میں سلائیڈز (فونٹس، بیک گراؤنڈز، انڈینٹ) کا ڈیزائن CSS کا استعمال کرتے ہوئے بیان کیا گیا ہے۔ سی ایس ایس کے ساتھ میری ذاتی مہارت بہترین طریقے سے بتائی جاتی ہے۔ یہ gif - لیکن یہ خوفناک نہیں ہے جب ایسے لوگ ہوں جو CSS کے ساتھ مجھ سے کہیں زیادہ مہارت اور تیزی سے کام کرتے ہیں۔ نتیجے کے طور پر، یہ پتہ چلتا ہے کہ ایک پریزنٹیشن کے لیے تیزی سے قریب آنے والی آخری تاریخ کے ساتھ، ہم Git کے ذریعے ایک ساتھ مختلف فائلوں پر کام کر سکتے ہیں اور تعاون کی ایک ایسی رفتار تیار کر سکتے ہیں جو بذریعہ ڈاک .pptx فائلیں بھیجتے وقت ناممکن ہے۔

سلائیڈز کے ساتھ ایک HTML صفحہ بنانا

سادہ متن کے ذرائع بہت اچھے ہیں، لیکن آپ انہیں پریزنٹیشن میں کیسے مرتب کرتے ہیں؟

AsciiDoctor ایک پروجیکٹ ہے جو روبی میں لکھا گیا ہے، اور اسے چلانے کے کئی طریقے ہیں۔ سب سے پہلے، آپ روبی لینگویج انسٹال کر سکتے ہیں اور براہ راست asciidoctor چلا سکتے ہیں، جو شاید روبی ڈویلپرز کے لیے قریب ترین چیز ہے۔

اگر آپ روبی کو انسٹال کرنے میں گڑبڑ نہیں کرنا چاہتے ہیں، تو آپ ڈاکر امیج استعمال کر سکتے ہیں۔ asciidoctor/docker-asciidoctor، جس میں، لانچ ہونے پر، آپ فولڈر کو پراجیکٹ کے ذرائع سے VOLUME کے ذریعے منسلک کر سکتے ہیں اور ایک دی گئی جگہ پر نتیجہ حاصل کر سکتے ہیں۔

میں نے جو آپشن منتخب کیا ہے وہ کسی حد تک غیر متوقع معلوم ہو سکتا ہے، لیکن جاوا ڈویلپر کی حیثیت سے یہ میرے لیے سب سے زیادہ آسان ہے۔ اسے روبی یا ڈوکر کی تنصیب کی ضرورت نہیں ہے، لیکن یہ آپ کو Maven اسکرپٹ کا استعمال کرتے ہوئے سلائیڈز بنانے کی اجازت دیتا ہے۔

بات یہ ہے کہ پروجیکٹ جے آربی - روبی زبان کا جاوا نفاذ اتنا اچھا ہے کہ یہ آپ کو جاوا مشین میں روبی کے لیے بنائی گئی تقریباً ہر چیز کو چلانے کی اجازت دیتا ہے، اور AsciiDoctor چلانا JRuby کے سب سے عام استعمال میں سے ایک ہے۔

دستیابی asciidoctor-maven-plugin آپ کو AsciiDoctor دستاویزات جمع کرنے کی اجازت دیتا ہے جو جاوا پروجیکٹ کا حصہ ہے (جسے ہم فعال طور پر استعمال کرتے ہیں)۔ اسی وقت، AsciiDoctor اور JRuby Maven کے ذریعے خود بخود ڈاؤن لوڈ ہوتے ہیں، اور AsciiDoctor JRuby ماحول میں چلتا ہے: مشین پر کچھ بھی انسٹال کرنے کی ضرورت نہیں ہے! (پیکیج کو چھوڑ کر graphvizجس کی ضرورت ہے اگر آپ GraphViz یا PlantUML گرافکس استعمال کرنا چاہتے ہیں۔) بس اپنی .adoc فائلوں کو فولڈر میں رکھیں۔ src/main/asciidoc/. یہاں ایک pomnik کی مثالخاکوں کے ساتھ سلائیڈیں جمع کرنا۔

سلائیڈوں کو پی ڈی ایف میں تبدیل کریں۔

اگرچہ سلائیڈز کا HTML ورژن کافی حد تک خود کفیل ہے، پھر بھی سلائیڈز کا پی ڈی ایف ورژن ہونا ضروری ہے۔ سب سے پہلے، ایسا ہوتا ہے کہ کچھ کانفرنسوں میں جو اسپیکر کو اپنے لیپ ٹاپ سے منسلک کرنے کا موقع فراہم نہیں کرتی ہیں، انہیں سلائیڈز کی ضرورت ہوتی ہے "سختی سے pptx یا pdf فارمیٹ میں"، یہ توقع کیے بغیر کہ وہ HTML میں بھی ہیں۔ دوسری بات یہ ہے کہ منتظمین کو اپنی سلائیڈوں کا ایک غیر ترمیم شدہ ورژن بھیجنا اچھا ہے جیسا کہ وہ رپورٹ میں دکھایا گیا تھا، کانفرنس کے مواد میں فائل کی اشاعت کے لیے PDF فارمیٹ میں۔

خوش قسمتی سے، Node.js یوٹیلیٹی اس کام کو سنبھالتی ہے۔ ڈیک ٹیپ، بنیاد پر بنایا گیا ہے۔ کٹھ پتلی - کروم براؤزر کے انتظام کے لیے آٹومیشن سسٹم۔ آپ کمانڈ کے ساتھ RevealJS پریزنٹیشن کو PDF میں تبدیل کر سکتے ہیں۔

node decktape.js -s 3200x1800 --slides 1-500 
  reveal "file:///index.html?fragments=true" slides.pdf  

ڈیک ٹیپ لانچ کرتے وقت دو چالیں، جو ہمیں آزمائش اور غلطی کے ذریعے سامنے آنی پڑیں:

  • پیرامیٹر کے ذریعے ریزولوشن -s دوگنا مارجن کے ساتھ بیان کیا جانا چاہیے، ورنہ تبدیلی کے نتائج میں دشواری ہو سکتی ہے۔

  • پریزنٹیشن کے HTML ورژن کے URL میں آپ کو ایک پیرامیٹر پاس کرنے کی ضرورت ہے۔ ?fragments=true، جو آپ کی سلائیڈ کی ہر درمیانی حالت کے لیے ایک علیحدہ پی ڈی ایف صفحہ بنائے گا (مثال کے طور پر، پانچ بلٹ پوائنٹس کے لیے پانچ صفحات اگر وہ یکے بعد دیگرے دکھائے جائیں)۔ یہ آپ کو رپورٹ کے دوران ایک پریزنٹیشن کے طور پر اس طرح کی پی ڈی ایف کو خود استعمال کرنے کی اجازت دے گا۔

ویب پر خودکار اسمبلی اور اشاعت

جب ورژن کنٹرول سسٹم میں تبدیلیاں کی جائیں تو سلائیڈز خود بخود مرتب ہو جائیں، اور اس سے بھی زیادہ آسان جب خودکار طور پر مرتب شدہ سلائیڈیں انٹرنیٹ پر عوامی استعمال کے لیے پوسٹ کی جائیں۔ انٹرنیٹ سے سلائیڈز انٹرنیٹ سے منسلک کسی بھی مشین اور پروجیکٹر سے سامعین کے سامنے آسانی سے "چلائی" جا سکتی ہیں۔

چونکہ ہم اپنے کام میں GitHub استعمال کرتے ہیں، CI سسٹم کا فطری انتخاب ہے۔ TravisCIاور ریڈی میڈ پریزنٹیشنز کی میزبانی کے لیے - github.io. github.io کے پیچھے خیال یہ ہے کہ برانچ میں پوسٹ کیا گیا کوئی بھی جامد مواد gh-pages GitHub پر آپ کے پروجیکٹ کا، پر دستیاب ہوتا ہے۔ <ваше имя>.gihub.io/<ваш проект>.

TravisCI کنفیگریشن فائل کو مکمل کریں، بشمول Maven کا استعمال کرتے ہوئے صفحہ کے HTML ورژن کو مرتب کرنا، ڈیک ٹیپ کا استعمال کرتے ہوئے PDF میں تبدیل کرنا، اور نتائج کو تھریڈ میں اپ لوڈ کرنا gh-pages github.io پر اشاعت کے لیے، ایسا لگتا ہے۔ تو.

TravisCI کی طرف اس طرح کے منصوبے کی تعمیر کے لیے، آپ کو ماحولیاتی متغیرات کو ترتیب دینے کی ضرورت ہے۔

  • GH_REF — قدر جیسے github.com/inponomarev/csa-hb
  • GH_TOKEN - GitHub رسائی ٹوکن۔ آپ اسے اپنی پروفائل سیٹنگز، ڈیولپر سیٹنگز -> پرسنل ایکسیس ٹوکنز میں GitHub سے حاصل کر سکتے ہیں۔ اگر آپ کسی عوامی ذخیرے پر کوئی پریزنٹیشن اپ لوڈ کرتے ہیں، تو اس ٹوکن کے لیے صرف رسائی کی سطح "عوامی ذخیروں تک رسائی" کی وضاحت کرنا کافی ہے۔
  • GH_USER_EMAIL / GH_USER_NAME — نام/ای میل جوڑا جس کی جانب سے دھاگے کو آگے بڑھایا جائے گا۔ gh-pages.

اس طرح، GitHub پر پریزنٹیشن کوڈ کی ہر کمٹ کے نتیجے میں سلائیڈز خود بخود HTML اور PDF فارمیٹس میں دوبارہ بن جاتی ہیں اور github.io پر دوبارہ اپ لوڈ ہوجاتی ہیں۔ (یقینا، آپ کو صرف وہ پیشکشیں github.io پر اپ لوڈ کرنی چاہئیں جنہیں آپ بالآخر عوامی بنانا چاہتے ہیں۔)

منصوبوں کی مثالیں۔

آخر میں، یہاں اپنی مرضی کے مطابق Maven اسکرپٹس اور Travis-CI کے لیے CI کنفیگریشن کے ساتھ پریزنٹیشن پروجیکٹس کی چند مثالوں کے لنکس ہیں، جنہیں کلون کیا جا سکتا ہے اور آپ کے اپنے پریزنٹیشن پروجیکٹس بناتے وقت استعمال کیا جا سکتا ہے:

الوداع پاورپوائنٹ! مجھے نہیں لگتا کہ مجھے تکنیکی پیشکشوں کے لیے آپ کی ضرورت ہوگی :)

ماخذ: www.habr.com

نیا تبصرہ شامل کریں