easy hacks to get you into - membershipcommittee ...michael/data/2012-02-04-easy-hacks.pdf · easy...

16
1 Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks [email protected] “Stand at the crossroads and look; ask for the ancient paths, ask where the good way is, and walk in it, and you will find rest for your souls...” - Jeremiah 6:16

Upload: habao

Post on 28-Feb-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

1

Easy Hacks to get you into:

How beginners (as well as experts) can help ...

Michael [email protected]

“Stand at the crossroads and look; ask for the ancient paths, ask where the good way is, and walk

in it, and you will find rest for your souls...” - Jeremiah 6:16

Page 2: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

2

The message in a nutshell ...

Easy(to create & to hack on)

SignificantThey make a real impact in the project

You can do themThere is nothing to stop you hacking today

Lets look at some from easy → hard.

Page 3: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

3

Easy: Translating German Comments ...

Admittedly much easier if you are a Germangit clone git://anongit.freedesktop.org/libreoffice/core

Beautiful tool tool help out with this:cd clone

bin/find-german-comments cppuhelper # random directory

cppuhelper/source/propshlp.cxx:706:

Ueber alle Listener iterieren und Events senden cppuhelper/source/propshlp.cxx:763:

Ueber alle Listener iterieren und Events senden

cppuhelper/source/unourl.cxx:264:

c != 0x2F && c != 0x3A && c != 0x3D

Only two (identical) strings detected – to clean an entire module

Page 4: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

4

Significant: Translating Comments ...

It makes things significantly easier for non-Germans …We removed or translated ~20k lines of these so farWe still have 32k to go: done mostly by new guys …

Thanks to all who helped !

3.3 3.4 3.50

10,000

20,000

30,000

40,000

50,000

60,000

Detected lines of German commentThanks to (recent translators):Philipp WeissenbacherLuc CastermansMike WhiteleyChristina RossmanithWinfried DonkersMichael StahlTim HardeckNoel GrandinMatteo CasalinCor Nouwsand many more !

Page 5: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

5

Easy: Removing totally unused code ...

Inherited code, has a big technical debt: needs paying ...git clone git://anongit.freedesktop.org/libreoffice/core

cd core

Load up unusedcode.easy ...EditView::GetSelectionMode() const

EditView::SetCursor(Cursor const&)

EditView::SetPointer(Pointer const&)

...

Find these methods:git grep EditView::GetSelectionMode

editeng/source/editeng/editview.cxx:EESelectionMode EditView::GetSelectionMode() const

Remove the method (don't forget the header)If it looks -really- useful: #ifdef TOMORROW / #endif ...

Page 6: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

6

Significant: Removing totally unused code ...

Shrinking the LibreOffice's memory footprintWe're making real progress … 5k- to less than 2k

2011-07-112011-07-19

2011-07-262011-08-03

2011-08-102011-08-15

2011-08-202011-08-24

2011-08-292011-09-01

2011-09-072011-09-21

2011-09-302011-10-13

2011-10-302011-11-07

2011-11-182011-12-02

2011-12-162012-01-10

2012-01-192012-01-27

0

1000

2000

3000

4000

5000

6000

Remaining unused method count

Page 7: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

7

Easy: Using git ...

Git can sound scary – but it's not -so- bad …One off setup your of name / E-mail (we like real ones)

git config user.name “Jim Bob”

git config user.email “[email protected]

Checkout the code:git clone git://anongit.freedesktop.org/libreoffice/core

Edit a file you likegit diff # will show you your diff

git commit -a # commit all changesgit format-patch -1 HEAD # create a patch to E-mail us ...git pull -r # get the latest changes from othersgit stash # squirrel away your changes, giving a clean tree.git stash pop # get them back again ...

Page 8: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

8

Easy: Removing old, crufty conditionals ...

We used to compile with some horribly broken compilersWe still have conditionals around the place for themWe should remove all checks for __GNUC__ < 3

So checkout:git clone git://anongit.freedesktop.org/libreoffice/core

Then:git grep __GNUC__…cppu/inc/cppu/macros.hxx: #if defined(__GNUC__) && (__GNUC__ >= 3)sal/osl/unx/file_stat.cxx: #if defined(__GNUC__) && (__GNUC__ < 3)

Remove conditionals and associated code

Page 9: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

9

Significant: cleaner code, easier to grep/read

Makes it easier to hack on LibreOfficeContinue reducing our (bogus) LOC countSocially rewarding turning pig ugliness into beauty

1k to 10k 100 to 1k 10 to 100 1 to 100

50

100

150

200

250

Developers

Tot

al #

of

com

mits

Distribution of developers and commits

Plenty of scope for shining in the project – with only 10+ commits.

Page 10: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

10

Easy: fixing all SvStream operators ...

So:git clone git://anongit.freedesktop.org/libreoffice/core

Load up: tools/inc/tools/stream.hxxSvStream& operator<<( sal_Int16 nInt16 );

SvStream& operator<<( sal_Int32 nInt32 ); ...

Remove / re-compile with:'void WriteInt16(sal_Int16 nInt)' style methodsUpdate all calling code & remove operator overload.

if( pPiece->IsUnicode() )

- Strm() << c;

+ Strm().WriteInt32(c);

else

- Strm() << (sal_uInt8)c;

+ Strm().WriteuInt8(c);

Page 11: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

11

Significant: improves security & hackability

Operator overloading / Magic type selection & inferenceripple/format problems from ~unrelated code change

Nail security bugs from lame impl. of read operators:SvStream& SvStream::operator>>(sal_uInt32& r)

{

sal_uInt32 n = 0;

READNUMBER_WITHOUT_SWAP(sal_uInt32, n)

if (good())

{

if (bSwap)

SwapULong(n);

r = n;

}

return *this;

}

Ergo 'read' operator changes need some degree of auditing

Page 12: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

12

Easy: using fsync where possible – a harder one

The task is this:git clone git://anongit.freedesktop.org/libreoffice/core

Lots of detail in the hack:https://bugs.freedesktop.org/show_bug.cgi?id=40607

Checkout:sal/osl/unx/file.cxx (sal_oslSyncFile)

Integrate a tweaked patch.Call fsync only when it doesn't cripple the machine

Find, and add sal_oslSyncFileat last stage of document write.

Page 13: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

13

Significant: why it's worth doing

Only a few dozen lines of code producedLinux only too of course.

We have ~35 million Linux desktop usersSomewhere, someone is about to swap their battery

Knowing they are safely on mains power …Only to discover that they are not as the yank it.

Without this patch on ext4/btrfs …by-bye data …

With an 'obvious' 'fsync always' patchTrash innumerable CDR's and judder audio etc.

Help a friend in need ! ...

Page 14: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

14

Easy: To create your own easy hacks ...

Head to bugzilla:https://bugs.freedesktop.org/enter_bug.cgi?product=LibreOffice

Summary: “EasyHack: …..”Component: “LibreOffice” or …Description:

a clear set of code pointersEnough detail to jump immediately into the code / taskie. do the leg-work, a good EasyHack takes time to file.

[Submit]One more step:

Add Whiteboard: see list of names or just use:EasyHack,DifficultyBeginner,SkillCpp,TopicCleanup

Page 15: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

15

Conclusions ...

Page 16: Easy Hacks to get you into - MembershipCommittee ...michael/data/2012-02-04-easy-hacks.pdf · Easy Hacks to get you into: How beginners (as well as experts) can help ... Michael Meeks

All text and image content in this document, unless otherwise specified, is licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the LibreOffice name, logo, or icon.

16

Easy ! (or hard if you want)Significant

they make a real differencethey strike a dis-proportionate blow for freedom

You can do them ...Thanks for all of your help and support !

we rely on you, to prove the power of Freedom with us.get people excited about Free Software they use …

Please do get involved and help us ...

Oh, that my words were recorded, that they were written on a scroll, that they were inscribed with an iron tool on lead, or engraved in rock for ever! I know that my Redeemer lives, and that in the end he will stand upon the earth. And though this body has been destroyed yet in my flesh I will see God, I myself will see him, with my own eyes - I and not another. How my heart yearns within me. - Job 19: 23-27

Easy Hacks → Conclusions