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, proč jsme projekt spustili, jak probíhal a co nás během něj příjmeně i nepříjemně překvapilo. Dojde samozřejmě i na technické detaily. Na závěr naznačíme naše plány s architekturou YaSTu do budoucna.

Předneseno na LinuxDays 2013.

Detaily: http://bit.ly/15T2oNe

David Majda

October 06, 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 LinuxDays 2013, 6. října 2013
  2. Obsah • Úvod • Průběh • Architektura • Ukázky •

    Budoucnost
  3. Úvod

  4. None
  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. None
  12. None
  13. YCP (YaST Control Programming Language)

  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? Velká investice, riskantní
  25. Průběh

  26. 13.1 nebo vůbec

  27. Jan Feb Mar Apr May Jun Jul 2013 Aug

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

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

    Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013
  30. 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
  31. 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
  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 Instalátor 27. května 2013
  33. 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
  34. 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
  35. 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
  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 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
  37. Statistiky

  38. Statistiky 6 vývojářů

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

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

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

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

    YaSTích modulů 3 bugy
  43. Architektura

  44. Klíčová rozhodnutí

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

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

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

    jsme restrukturalizací ► Žádné chytristiky (překlad 1:1)
  48. 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
  49. https://github.com/yast/y2r

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

  51. Ruby Bindings https://github.com/yast/yast-ruby-bindings

  52. Ukázky

  53. Základy DEM O

  54. Operátory DEM O

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

  56. Break DEM O

  57. UI shortcuts DEM O

  58. Komentáře DEM O

  59. Budoucnost

  60. Přínosy

  61. Přínosy #1 Pohodlnější vývoj

  62. Přínosy #1 Pohodlnější vývoj #2 Snazší ladění

  63. Přínosy #1 Pohodlnější vývoj #2 Snazší ladění #3 Snazší testování

  64. Přínosy #1 Pohodlnější vývoj #2 Snazší ladění #3 Snazší testování

    #4 Zjednodušený build system
  65. Přínosy #1 Pohodlnější vývoj #2 Snazší ladění #3 Snazší testování

    #4 Zjednodušený build system #5 Lepší dokumentace
  66. Otevřenost

  67. Dokumentace Zdrojový kód Mailing list IRC http://en.opensuse.org/Portal:YaST http://github.com/yast yast-devel@opensuse.org #yast

    (freenode)
  68. Dokumentace Zdrojový kód Mailing list IRC http://en.opensuse.org/Portal:YaST http://github.com/yast yast-devel@opensuse.org #yast

    (freenode) David Majda @dmajda Josef Reidinger @pepareidinger