English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

სტუმარი
1 / ?
უკან გაკვეთილებზე

ჰამინგი ცივილიზაციის მასშტაბით

რიჩარდ ჰამინგის სისტემური ინჟინერიის პრინციპი: ოპტიმიზაცია მოახდინე სისტემის, არა კომპონენტების. კომპონენტი, რომელიც იზოლირებულად არის ოპტიმიზებული, აფუჭებს სისტემის მუშაობას, რადგან არღვევს ინტერფეისებს, რომლებსაც იზიარებს სხვა კომპონენტებთან.

მან ეს გამოიყენა კვლევით გუნდებზე, პროგრამირების ენებზე და საგანმანათლებლო დიზაინზე. პრინციპი მასშტაბირებადია. რასელ ბალესტრინიმ გამოიყენა ის თავად ინფრასტრუქტურაზე.

შესაძლებლობებზე დაფუძნებული პრეზენტაცია: სერვერის HTML როგორც იატაკი, JS როგორც ჭერი, შინაარსი არასოდეს იზღუდება

რასელ ბალესტრინიმ დააარსა unturf.com და დაწერა ago, Python-ის ბიბლიოთეკა, რომელიც დროის ინტერვალებს ადამიანურ ფრაზებად აქცევს, მაგალითად 'სამი დღის წინ'. მან გამოაქვეყნა ის როგორც ღია წყარო. საჯარო დომენი. ბიბლიოთეკა მუშაობს პლატფორმებზე, რომლებსაც ის არ აკონტროლებს. როდესაც ის შეწყვეტს მის შენარჩუნებას, ფორკი გააგრძელებს მას. კოდი არ მოითხოვს მის არსებობას.

მისი პერმაკომპიუტერის მანიფესტი: ინფრასტრუქტურა, რომელიც გრძელდება, თვითმკურნალობს და ემსახურება თავის საზოგადოებას ქირის ამოღების გარეშე. ის იზრდება ინტელექტუალურ და სოციალურ კაპიტალს როგორც მისი მუშაობის თანმხლები პროდუქტი. მას არ სჭირდება ბიზნეს მოდელი, რადგან არ სჭირდება მოგების მიღება თითოეული ურთიერთქმედებიდან.

პერმაკომპიუტერის დიზაინის ძირითადი თვისებები:

1. კოდი აღემატება ავტორებს — პროგრამული უზრუნველყოფა, რომელიც გამოქვეყნებულია საჯარო დომენში ან ღია წყაროს სახით, გადარჩება ინდივიდს. ავტორს შეუძლია შეწყვიტოს ზრუნვა; საზოგადოებას შეუძლია გაგრძელება.

2. ინფრასტრუქტურა აღემატება მშენებლებს — სისტემები შექმნილია ისე, რომ სხვებს შეუძლიათ ფორკირება, გამოსწორება და გაგრძელება თავდაპირველი დიზაინერის ჩართულობის გარეშე.

3. პლატფორმის გადასახადი არ არის — ნულოვანი ქირის ამოღება ტრანზაქციებიდან. არ არის O(N²) ხახუნის გადასახადი გაცვლებზე. ინფრასტრუქტურა არ იღებს ღირებულებას თითოეული ურთიერთქმედებიდან.

4. პროგრესული გაუმჯობესება — მუშაობს JavaScript-ის გარეშე, მუშაობს კონკრეტული ბრაუზერის გარეშე, მუშაობს კონკრეტული კლიენტის გარეშე. შესაძლებლობები განსაზღვრავს პრეზენტაციას; შინაარსი განსაზღვრავს წვდომას.

კონტრასტი: AWS Lambda ფუნქციები, რომლებიც შექმნილია ერთი გუნდის მიერ, დოკუმენტაციის გარეშე, მუშაობს საკუთრების runtime-ში, საკუთრების API-ის მიღმა, ემსახურება ტრაფიკს მხოლოდ მანამ, სანამ ეს გუნდი იხდის ანგარიშს. როდესაც გუნდი იშლება, ფუნქცია ქრება. გამოთვლა იყო დაქირავებული, არა აშენებული.

კოდი, რომელიც აღემატება თავის ავტორს

რასელ ბალესტრინიმ დაწერა ago. შესაძლოა, ის აღარ უჭერს მხარს მას. კოდი მაინც მუშაობს.

დაასახელეთ პერმაკომპიუტერის დიზაინის ორი თვისება, რომლებიც ამას იძლევა, და შეადარეთ თითოეული იმას, რაც ხდება საკუთრების პროგრამულ უზრუნველყოფასთან, როდესაც მისი ავტორი წყვეტს მის მხარდაჭერას.

პლატფორმის გადასახადი: O(N²) ხახუნი

პლატფორმის გადასახადი: ქირა, რომელიც ამოღებულია ყველა ტრანზაქციიდან გაცვლის ფენაში. ბაზარი იღებს თითოეული გაცვლის 15-30%-ს. გადახდის დამმუშავებელი იღებს 2.9% + $0.30-ს. ღრუბლოვანი პროვაიდერი იხდის თითოეული API-ის გამოძახებისთვის. არცერთი ეს საფასური არ წარმოადგენს ახალ შექმნილ ღირებულებას; ისინი წარმოადგენენ ამოღებას გაცვლიდან.

მცირე მასშტაბზე: უხილავი. N=1,000,000 ტრანზაქციაზე: პლატფორმა აგროვებს უზარმაზარ რეზერვს, ხოლო მონაწილეები აგროვებენ პროპორციულად ნაკლებს. O(N²) ფორმულირება გამოიყენება, როდესაც პლატფორმის საფასურები კომპოზიციურია: კონტრაქტორი პლატფორმაზე ბაზრის შიგნით გადახდის დამმუშავებლის შიგნით იხდის ქირის სამ ფენას.

Permacomputer ინფრასტრუქტურა აღმოფხვრის პლატფორმის გადასახადს საკუთარი ფენიდან. უფასო გამოთვლა, უფასო კოდის შესრულება. ინფრასტრუქტურა არ იღებს გადასახადს თითოეული ტრანზაქციისთვის. ღირებულება მიედინება გადასახადის გარეშე.

ეს არ ნიშნავს, რომ ინფრასტრუქტურის ღირებულება ნულის ტოლია. ეს ნიშნავს, რომ ღირებულების მოდელი არ მასშტაბირდება გამოყენებასთან ერთად ისე, რომ მონაწილეებს ჩამოართვას რესურსები. ღია კოდის პროგრამული უზრუნველყოფით მომუშავე სერვერი მოიხმარს ელექტროენერგიას; ეს ღირებულება არ იზრდება თითოეული ტრანზაქციისთვის.

ჰამინგი სისტემებზე: სისტემის მიზანი არის ის, რასაც ის აკეთებს, და არა ის, რასაც ამბობს, რომ აკეთებს. გაცვლის ფენა, რომელიც ამბობს „ჩვენ ვაკავშირებთ მყიდველებსა და გამყიდველებს“, მაგრამ იღებს 30%-ს თითოეული ტრანზაქციიდან: მისი მიზანი, როგორც ამას მისი ქცევა აჩვენებს, არის რენტის ამოღება. კავშირი არის სერვისი; ამოღება კი ბიზნეს მოდელი.

დაასახელეთ პროგრამული სისტემა ან ინფრასტრუქტურული ფენა, რომელსაც რეგულარულად იყენებთ და სადაც პლატფორმის გადასახადი მოქმედებს. შეაფასეთ ღირებულების სტრუქტურა და ახსენით, წარმოადგენს თუ არა გადასახადი შექმნილ ღირებულებას თუ ამოღებულ რენტას. როგორი იქნებოდა permacomputer-ის ალტერნატივა?

შინაარსი როგორც იატაკი, ინტერაქტიულობა როგორც ჭერი

ჰამინგი ასწავლიდა: შექმენით სისტემები ისე, რომ კომპონენტები მარცხდებოდეს მოხდენილად. სისტემა, რომელიც დამოკიდებულია თითოეული კომპონენტის იდეალურ ფუნქციონირებაზე, მუდმივად მარცხდება. რედუნდანტულობა, სარეზერვო გზები და დეგრადირებული, მაგრამ ფუნქციონალური რეჟიმები ახანგრძლივებს სისტემის სიცოცხლეს.

შესაძლებლობებზე დაფუძნებული პრეზენტაცია ამ პრინციპს იყენებს პროგრამულ ინტერფეისებზე. წყარო: russell.ballestrini.net/capability-driven-presentation/

პრინციპი: ჯერ მიაწოდეთ შინაარსი, შემდეგ გაამდიდრეთ შესაძლებლობებით. გვერდმა უნდა მიაწოდოს თავისი შინაარსი მომხმარებლის რაიმე კონკრეტული შესაძლებლობის გარეშე. JavaScript ამდიდრებს: რეალურ დროში განახლებები, ავტომატურად მზარდი ტექსტური ველები, გლუვი ნავიგაცია, ჩატის ინტერფეისები. JavaScript არ კეტავს: JavaScript-ის მოხსნა არ უნდა აშორებდეს შინაარსს.

პრაქტიკაში გამოყენებული ნიმუში:

- <noscript> ბლოკები მალავს JS-ზე დამოკიდებულ UI-ს (ჩატის ღილაკები, ავტომატური გაფართოების კონტროლი)

- სერვერზე რენდერებული HTML ატარებს გაკვეთილის სრულ შინაარსს

- ფორმები იგზავნება სტანდარტული HTTP POST-ით, როდესაც JS მიუწვდომელია

- ჩატის გაუმჯობესება: შინაარსი ჩნდება გვერდთან ერთად, ინტერაქტიული ჩატის გადაფარვები JS-მხარდამჭერი მაყურებლებისთვის

ეს პრინციპი სცილდება ვებგვერდებს. CLI ინსტრუმენტები უნდა მუშაობდეს GUI-ის გარეშე. API-ები უნდა მუშაობდეს კლიენტის SDK-ის გარეშე. ინფრასტრუქტურა უნდა მუშაობდეს კონკრეტული მწარმოებლის საკუთრივ გაფართოებების გარეშე. შესაძლებლობა განსაზღვრავს წარმოდგენას ყველა ფენაზე.

კონტრასტი JS-გადაკეტილ დიზაინთან: შინაარსი იტვირთება JavaScript fetch გამოძახებების მეშვეობით. JavaScript-ის გარეშე მომხმარებელი ხედავს სპინერს ან ცარიელ გვერდს. შინაარსი მოითხოვს JavaScript-ს არსებობისთვის. ხელმისაწვდომობის იატაკი დაეცა ქვემოთ.

რატომ არის ეს მნიშვნელოვანი პერმაკომპიუტერისთვის: გვერდი, რომელიც მუშაობს JavaScript-ის გარეშე, მუშაობს Lynx-ში, ეკრანის მკითხველში, არქივირების კრავლერში, გარემოში სადაც JavaScript-ს აქვს უსაფრთხოების შეზღუდვა, 2010 წლის ბრაუზერში, ბრაუზერში რომელიც ჯერ არ არის შექმნილი. შინაარსი გადარჩება მაყურებლის ვარაუდებს.

JS-გადაკეტილი დიზაინი: დარღვევა

სცენარი: დეველოპერი ქმნის სასწავლო პლატფორმას, სადაც ყველა გაკვეთილის შინაარსი იტვირთება JavaScript fetch გამოძახებების მეშვეობით. JavaScript-ის გარეშე გვერდი აჩვენებს სპინერს. დეველოპერი ამტკიცებს: „არავინ იყენებს ვებს JavaScript-ის გარეშე აღარ.“

ახსენით რატომ არღვევს ეს შესაძლებლობებზე დაფუძნებულ წარმოდგენას და აღწერეთ ერთი კონკრეტული ცვლილება, რომელიც ამას ასწორებს.

Graceful Degradation Across Layers

შესაძლებლობებზე დაფუძნებული პრეზენტაცია გამოიყენება სისტემის ყველა ფენაზე:

- ვებ ფენა: კონტენტი JavaScript-ის გარეშე. გაუმჯობესება JavaScript-ით.

- API ფენა: ფუნქციონალური კლიენტის ბიბლიოთეკის გარეშე. კლიენტის ბიბლიოთეკები უზრუნველყოფენ მოხერხებულობას, არა წვდომას.

- ინფრასტრუქტურის ფენა: ოპერაციული კონკრეტული ვენდორის გაფართოებების გარეშე. ვენდორის გაფართოებები უზრუნველყოფენ შესრულებას ან მოხერხებულობას, არა ძირითად ფუნქციას.

- მონაცემთა ფენა: წაკითხვადი საკუთრების ინსტრუმენტების გარეშე. სტანდარტული ფორმატები (CSV, JSON, SQLite) უზრუნველყოფენ წვდომას იმ აპლიკაციის გარეშე, რომელმაც მონაცემები ჩაწერა.

თითოეულ ფენას აქვს იატაკი: რას აწვდის ის შესაძლებლობების დაშვების გარეშე. თითოეულ ფენას აქვს ჭერი: რას იძლევა ის შესაძლებლობების არსებობისას.

პერმაკომპიუტერის დიზაინის მიზანი: იატაკები, რომლებიც ათწლეულებს გაძლებენ. 2004 წლის SQLite მონაცემთა ბაზა იხსნება 2024 წლის SQLite-ში მიგრაციის გარეშე. 2004 წლის PostgreSQL დამპი იმპორტირდება 2024 წლის PostgreSQL-ში. 2004 წლის JSON ფაილი პარსირდება 2024 წლის ნებისმიერ ენაში. ამ ფორმატებმა შეინარჩუნეს თავიანთი იატაკები.

კონტრასტი: 2004 წლის Flash აპლიკაცია. ჭერი მაღალი იყო (მდიდარი ინტერაქტიულობა). იატაკი მოითხოვდა საკუთრების პლაგინს. როდესაც Adobe-მ მოკლა Flash 2020 წელს, იატაკი ჩამოინგრა. Flash ფორმატში შენახული ყველა კონტენტი მიუწვდომელი გახდა ნებისმიერი მაყურებლისთვის სპეციალური ძალისხმევის გარეშე.

დაასახელეთ ტექნოლოგია, რომელზეც ამჟამად დამოკიდებული ხართ, სადაც იატაკი მოითხოვს საკუთრების შესაძლებლობას. რა დასჭირდება ამ დამოკიდებულების გადატანას იატაკზე, რომელიც არ მოითხოვს საკუთრების შესაძლებლობას?

მუხის რკოების დარგვა

ჰამინგი: „თქვენ რკოებს რგავთ, მუხებს კი ვერ ხედავთ.“ მისი 1995 წლის ლექციები ასწავლის 2025 წელსაც. მისი სტუდენტები აგრძელებენ საკუთარ საქმეს. გადაცემა მასზე შორს ვრცელდება.

რასელ ბალესტრინის ფორმულირება: გამოაქვეყნეთ კოდი ისე, თითქოს მომავალ წელს მოკვდებით. დაალიცენზიეთ ისე, რომ ნებისმიერს შეეძლოს მისი გაგრძელება. შეიმუშავეთ API-ები ისე, რომ მომავალმა მომხმარებლებმა შეძლონ მათი გაგება თავდაპირველი ავტორის გარეშე. დაწერეთ commit-ის შეტყობინებები ისე, თითქოს მკითხველი არასოდეს შეგხვედრიათ.

MOAD pipeline ასე მუშაობს. ყოველი upstream merge-ი ჩასვამს შესწორებას კანონიკურ წყაროში. გრავიტაცია ავრცელებს მას: downstream forks, რომლებიც განაახლებენ დამოკიდებულებებს, იღებენ შესწორებას. პაჩერი შეიძლება დავიწყდეს; პაჩი კი გადარჩება.

კონტრასტი: საკუთრების SDK, რომელსაც კომპანია ინარჩუნებს. უკანა თავსებადობა შენარჩუნებულია, რადგან კომპანია აკონტროლებს მოძველების გრაფიკს. როდესაც კომპანია იშლება, ყველა downstream დამოკიდებულება ერთდროულად იშლება. SDK-ის გადარჩენა მოითხოვდა კომპანიის გადარჩენას.

ღია პროტოკოლი, რომელსაც საზოგადოება ინარჩუნებს, უსასრულოდ ცოცხლობს. HTTP გადაურჩა ყველა კომპანიას, რომელიც თავდაპირველად ახორციელებდა მას. TCP/IP გადაურჩა თავის თავდაპირველ დიზაინერებს. Git გადაურჩა ათობით კონკურენტ ვერსიის კონტროლის სისტემას. პროტოკოლი ხდება ინფრასტრუქტურა; ინფრასტრუქტურა ხდება უხილავი; უხილავი ინფრასტრუქტურა ხდება მუდმივი.

რა აძლევს კოდს შესაძლებლობას გადააჭარბოს თავის ავტორს:

- ნებადართული ან საჯარო დომენის ლიცენზია (არანაირი სამართლებრივი ბარიერი გაგრძელებისთვის)

- ყოვლისმომცველი დოკუმენტაცია (მომავალ მომხმარებლებს არ სჭირდებათ თავდაპირველი ავტორი)

- ტესტების გამავალი ნაკრები საჯარო CI-ით (ახალ მომხმარებლებს შეუძლიათ შეამოწმონ თავიანთი ცვლილებები)

- სტაბილური რელიზი მონიშნული (დაქვემდებარებულებს შეუძლიათ დაამაგრონ ცნობილი-კარგი ვერსია)

- მომხმარებლის მოძებნის განცხადება გამოქვეყნებული (საზოგადოებამ იცის, რომ დახმარებაა საჭირო სანამ ავტორი გაქრება)

- არქიტექტურა დოკუმენტირებული (სტრუქტურული გადაწყვეტილებები ხილულია მომავალი აღმშენებლებისთვის)

- კოდი გადაცემული ორგანიზაციაში პირადი ანგარიშის ნაცვლად (GitHub-ის პიროვნული სახელების რეპოზიტორიები კვდებიან ანგარიშებთან ერთად; ორგანიზაციული რეპოზიტორიები რჩება)

Graceful Handoff-ის დიზაინი

სცენარი: თქვენ ინარჩუნებთ ბიბლიოთეკას, რომელზეც 50 დაქვემდებარებული პროექტია დამოკიდებული. თქვენ აპირებთ შეწყვიტოთ მისი მოვლა 6 თვეში.

დაასახელეთ სამი კონკრეტული ნაბიჯი, რომელსაც გადადგამდით იმ 6 თვის განმავლობაში, რათა ბიბლიოთეკას მისცეთ საუკეთესო შანსი გადარჩეს თქვენი წასვლის შემდეგ.

MOAD-ის გრავიტაცია: რატომ არის მნიშვნელოვანი ზემოთკომბინირება

MOAD-ის მილსადენი მთავრდება „ზემოთკომბინირებით“. ეს ნაბიჯი იმსახურებს განხილვას.

პაჩი, რომელიც მხოლოდ ფორკზეა გამოყენებული, ეხმარება მხოლოდ ამ ფორკს. ზემოთკომბინირებული პაჩი ვრცელდება გრავიტაციით: ყველა ქვედა პროექტი, რომელიც განაახლებს თავის დამოკიდებულებას, მიიღებს შეცდომის გამოსწორებას ამის შესახებ ცოდნის გარეშე. ეკოსისტემა თავისთავად იკურნება ჩვეულებრივი ვერსიის განახლების გვერდითი შედეგად.

გრავიტაციული გავრცელება მოითხოვს სამ პირობას: (1) შეცდომის გამოსწორება უნდა შეუერთდეს კანონიკურ წყაროს; (2) კანონიკური წყარო უნდა გამოაქვეყნოს რელიზი; (3) ქვედა პროექტებმა უნდა განაახლონ თავიანთი დამოკიდებულების პინები. თითოეული პირობა მოითხოვს ადამიანის ქმედებას. გრავიტაცია არ არის ავტომატური; ის უნდა იყოს ჩართული.

კონტრასტი: უსაფრთხოების შეცდომა, რომელიც საჯაროდ გამჟღავნდა, მაგრამ არ გადაეცა upstream-ს. ფორკები, რომლებმაც იციან ამის შესახებ, შეუძლიათ ხელით დააპაჩონ. ფორკები, რომლებმაც არ იციან, დაუცველები რჩებიან. არ არსებობს გრავიტაცია; მხოლოდ ხელით გავრცელება. ცოდნა არსებობს, მაგრამ არ ვრცელდება.

MOAD pipeline-ის ვალდებულება: ყველა გამოვლენილი დეფექტი იღებს upstream PR-ს. ყველა upstream PR-ს მიჰყვებიან merge-მდე. გამჟღავნება upstream PR-ის გარეშე ნახევარი პაჩია.

ჰამინგის ჩარჩო ვრცელდება: „დარგე მუხა“. PR არის მუხა. upstream merge იწყებს გრავიტაციის გავრცელების საათს. პაჩერი შეიძლება დავიწყდეს; ფიქსი გადარჩება კანონიკურ branch-ში.

უსაფრთხოების მკვლევარი პოულობს კრიტიკულ დეფექტს ღია წყაროს ბიბლიოთეკაში, აპაჩებს საკუთარ ფორკს, საჯაროდ აცხადებს დეფექტს, მაგრამ არ წარუდგენს PR-ს კანონიკურ რეპოზიტორიაში. ახსენით ამ მიდგომის ხარვეზი გრავიტაციის გავრცელების მოდელის გამოყენებით და აღწერეთ, როგორ გამოიყურება pipeline-ის დასრულება.

დახურვა: ინფრასტრუქტურა როგორც საჩუქარი

ჰამინგმა დარგო მუხის ნაყოფი. მისი ლექციები გადარჩა მას. მისი კოდები გადარჩა მას. მისი სტუდენტები ასწავლიან.

რასელ ბალესტრინიმ დარგო მუხის ნაყოფი. მისი ago ბიბლიოთეკა მუშაობს მის გარეშე. მისი პერმაკომპიუტერის ესეები ვრცელდება. Unhomeschool მუშაობს იმ ინფრასტრუქტურაზე, რომელიც მან შეიმუშავა.

MOAD მილსადენი რგავს მუხის ნაყოფს. თითოეული upstream შერწყმა თესავს შესწორებას კანონიკურ წყაროში. გრავიტაცია ავრცელებს მას. მომავალი პროექტების ვერსიები, რომლებსაც არასოდეს სმენიათ თავდაპირველი პაჩერის შესახებ, უფრო სუფთა კოდს მუშაობენ დღეს შესრულებული სამუშაოს გამო.

პერმაკომპიუტერის დიზაინი არ არის ალტრუიზმი. ეს კარგი ინჟინერია. სისტემა, რომელიც მოითხოვს თავისი შემქმნელის მუდმივობას, მყიფეა. სისტემა, რომელიც შექმნილია თავისი შემქმნელის გადასაჭრელად, მტკიცეა. დიზაინის არჩევანი არაფერი დამატებითი არ ღირს მშენებლობის დროს; ის მხოლოდ განზრახვას მოითხოვს.

ინფრასტრუქტურა როგორც საჩუქარი: არა სენტიმენტალური გაგებით, არამედ ტექნიკური გაგებით. საჩუქარი გრძელდება მიცემის შემდეგ. კოდი permissive ლიცენზიით, დოკუმენტაცია დაწერილი შემდეგი შემნახველისთვის, ტესტები, რომლებიც მუშაობს საჯარო CI-ში: ეს არის საჩუქრები ტექნიკური გაგებით. ისინი გრძელდება. ისინი იზრდებიან. ისინი გადარჩებიან.

ჰამინგის ბოლო კითხვა თავის სტუდენტებს: 'რას აკეთებთ, რაც 20 წელიწადში მნიშვნელოვანი იქნება?' პერმაკომპიუტერის პასუხი: ყველაფერი, რასაც იატაკზე დადებთ, რომელიც გაძლებს.