Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jak jsme přeložili 594 680 řádků kódu z YCP do Ruby

Jak jsme přeložili 594 680 řádků kódu z YCP do Ruby

Parsery, generátory kódu a podobné hračky člověk nepíše každý den. V SUSE jsme s jejich pomocí za 6 měsíců zkonvertovali konfigurační a instalační nástroj YaST z nevyhovujícího jazyka YCP do Ruby. V přednášce si povíme, jak takový překladač vypadá a jak jsme propojili svět Ruby a YaSTu. Součástí bude živá ukázka překladu jednotlivých konstrukcí.

Předneseno na pražském Ruby srazu.

Detaily:
http://srazy.info/prvni-streda-ruby-on-rails/3907
https://www.facebook.com/events/525876690830912/

David Majda

October 02, 2013
Tweet

More Decks by David Majda

Other Decks in Programming

Transcript

  1. Jak jsme přeložili 594 680 řádků kódu z YCP do

    Ruby David Majda @dmajda Josef Reidinger @pepareidinger Pražský Ruby meetup, 2. října 2013
  2. Obsah • Úvod • Průběh • Architektura • Ukázky •

    Proč jsme uspěli?
  3. Úvod

  4. None
  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. None
  12. None
  13. SCR UI YCP Ruby Perl Python Komponentový framework YaST

  14. /* Dialog contents */ term contents = `HBox(`HSpacing(1), `VBox( `VSpacing(0.2),

    /* ComboBox label */ `ComboBox(`id(`device), `opt(`editable), _("Select the Serial &Interface to Use:"), [ `item(`id("/dev/ttyS0"), "/dev/ttyS0", device == "/dev/ttyS0"), `item(`id("/dev/ttyS1"), "/dev/ttyS1", device == "/dev/ttyS1"), ]), `VSpacing(1), `HBox( /* PushButton label */ `PushButton(`id(`next), `opt(`default), _("&Launch")), `HStretch(), `PushButton(`id(`cancel), Label::CancelButton()) ) ), `HSpacing(1)); UI::OpenDialog(contents); UI::SetFocus(`id(`device)); /* Main cycle */ any ret = nil; while(true) { ret = UI::UserInput(); if(ret == `abort || ret == `cancel || ret == `back) { /* if(ReallyAbort()) break; else continue; */ break; } else if(ret == `next) { /* FIXME check_* device!="" and device exists */ break; } else { y2error("Unexpected return code: %1", ret); continue; } }
  15. Problémy

  16. Problémy #1 Další jazyk

  17. Problémy #1 Další jazyk #2 Špatná platforma

  18. Problémy #1 Další jazyk #2 Špatná platforma #3 Údržba

  19. Problémy #1 Další jazyk #2 Špatná platforma #3 Údržba #4

    Žádný vývoj
  20. Řešení

  21. Řešení ► Přepsat ručně?

  22. Řešení ► Přepsat ručně? Příliš práce, příliš těžké

  23. Řešení ► Přepsat ručně? Příliš práce, příliš těžké ► Přepsat

    automaticky?
  24. Řešení ► Přepsat ručně? Příliš práce, příliš těžké ► Přepsat

    automaticky? Zvažováno minimálně od 2007
  25. Řešení ► Přepsat ručně? Příliš práce, příliš těžké ► Přepsat

    automaticky? Zvažováno minimálně od 2007 (což jsme nevěděli)
  26. Průběh

  27. 13.1 nebo vůbec

  28. Jan Feb Mar Apr May Jun Jul 2013 Aug

  29. Jan Feb Mar Apr May Jun Jul 2013 Aug CSM

    Workshop 21.-25. ledna 2013
  30. Jan Feb Mar Apr May Jun Jul 2013 Aug CSM

    Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013
  31. Jan Feb Mar Apr May Jun Jul 2013 Aug Hack

    Week 9 8.-12. dubna 2013 CSM Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013
  32. 100 % přeloženo 22. dubna 2013 Jan Feb Mar Apr

    May Jun Jul 2013 Aug Hack Week 9 8.-12. dubna 2013 CSM Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013
  33. 100 % přeloženo 22. dubna 2013 Jan Feb Mar Apr

    May Jun Jul 2013 Aug Hack Week 9 8.-12. dubna 2013 CSM Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013 Instalátor 27. května 2013
  34. OpenSUSE 13.1 M2 13. června 2013 (plán) 100 % přeloženo

    22. dubna 2013 Jan Feb Mar Apr May Jun Jul 2013 Aug Hack Week 9 8.-12. dubna 2013 CSM Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013 Instalátor 27. května 2013
  35. OpenSUSE 13.1 M3 11. července 2013 (plán) OpenSUSE 13.1 M2

    13. června 2013 (plán) 100 % přeloženo 22. dubna 2013 Jan Feb Mar Apr May Jun Jul 2013 Aug Hack Week 9 8.-12. dubna 2013 CSM Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013 Instalátor 27. května 2013
  36. Finální překlad 30.-31. července 2013 OpenSUSE 13.1 M3 11. července

    2013 (plán) OpenSUSE 13.1 M2 13. června 2013 (plán) 100 % přeloženo 22. dubna 2013 Jan Feb Mar Apr May Jun Jul 2013 Aug Hack Week 9 8.-12. dubna 2013 CSM Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013 Instalátor 27. května 2013
  37. Finální překlad 30.-31. července 2013 OpenSUSE 13.1 M3 11. července

    2013 (plán) OpenSUSE 13.1 M2 13. června 2013 (plán) 100 % přeloženo 22. dubna 2013 Jan Feb Mar Apr May Jun Jul 2013 Aug Hack Week 9 8.-12. dubna 2013 OpenSUSE 13.1 M4 8. srpna 2013 (plán) CSM Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013 Instalátor 27. května 2013
  38. Statistiky

  39. Statistiky 6 vývojářů

  40. Statistiky 6 vývojářů 594,680 řádků YCP

  41. Statistiky 6 vývojářů 594,680 řádků YCP 724,687 řádků Ruby

  42. Statistiky 6 vývojářů 594,680 řádků YCP 724,687 řádků Ruby 96

    YaSTích modulů
  43. Statistiky 6 vývojářů 594,680 řádků YCP 724,687 řádků Ruby 96

    YaSTích modulů 3 bugy
  44. Architektura

  45. Klíčová rozhodnutí

  46. Klíčová rozhodnutí ► Jen překlad, žádné další změny

  47. Klíčová rozhodnutí ► Jen překlad, žádné další změny ▪ Porušili

    jsme restrukturalizací
  48. Klíčová rozhodnutí ► Jen překlad, žádné další změny ▪ Porušili

    jsme restrukturalizací ► Žádné chytristiky (překlad 1:1)
  49. Klíčová rozhodnutí ► Jen překlad, žádné další změny ▪ Porušili

    jsme restrukturalizací ► Žádné chytristiky (překlad 1:1) ▪ Předpokládalo pozdější refaktorizaci
  50. https://github.com/yast/y2r DEM O

  51. https://github.com/yast/ycp-killer

  52. Ruby Bindings https://github.com/yast/yast-ruby-bindings DEM O

  53. Ukázky

  54. Základy DEM O

  55. Operátory DEM O

  56. Sémantika přiřazení DEM O

  57. Lexikální scoping DEM O

  58. Reference (funkce) DEM O

  59. Reference (argumenty) DEM O

  60. Break DEM O

  61. UI shortcuts DEM O

  62. Komentáře DEM O

  63. Proč jsme uspěli?

  64. #1 Tým snů

  65. #1 Tým snů #2 Zaujetí pro věc

  66. #1 Tým snů #2 Zaujetí pro věc #3 Příznivé „politické“

    klima
  67. #1 Tým snů #2 Zaujetí pro věc #3 Příznivé „politické“

    klima #4 Soustředění na jednu věc
  68. #1 Tým snů #2 Zaujetí pro věc #3 Příznivé „politické“

    klima #4 Soustředění na jednu věc #5 „Startupový“ management
  69. #1 Tým snů #2 Zaujetí pro věc #3 Příznivé „politické“

    klima #4 Soustředění na jednu věc #5 „Startupový“ management #6 Kvalitní tooling
  70. #1 Tým snů #2 Zaujetí pro věc #3 Příznivé „politické“

    klima #4 Soustředění na jednu věc #5 „Startupový“ management #6 Kvalitní tooling #7 Důkladné testování
  71. Otázky?