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. /* 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; } }
  3. Jan Feb Mar Apr May Jun Jul 2013 Aug CSM

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

    Workshop 21.-25. ledna 2013 Sysconfig březen/duben 2013
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. Klíčová rozhodnutí ► Jen překlad, žádné další změny ▪ Porušili

    jsme restrukturalizací ► Žádné chytristiky (překlad 1:1)
  13. 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
  14. Přínosy #1 Pohodlnější vývoj #2 Snazší ladění #3 Snazší testování

    #4 Zjednodušený build system #5 Lepší dokumentace