mozilla

Mozilla Nederland LogoDe Nederlandse
Mozilla-gemeenschap

Abonneren op feed Mozilla planet
Planet Mozilla - http://planet.mozilla.org/
Bijgewerkt: 1 min 26 sec geleden

Nick Alexander: Smoother Landings: How to update and test Fennec feature build flags

vr, 13/02/2015 - 20:30

First, have you read my earlier blog post Bumpy Landings? No? Go read it now! I’ll wait.

Good, you’ve read Bumpy Landings, so you’re familiar with adding and updating Fennec build flags.

The first major point: changing build settings — your mozconfig file, the configure.in script, sundry .m4 files, application-specific configuration files like mobile/android/confvars.sh — requires re-configuration to recognize your changes. You need to run:

mach configure

Unfortunately, after re-configuration, you really need to rebuild your entire tree. The issue is that mach configure updates a variety of build settings and information (including your feature flag) and the build system does not track, at a fine-grained level, what is the minimal set of things that need to rebuilt when such settings change. Hence, you need to rebuild everything to be safe, which is termed a clobber build.

The good news is that you can avoid clobber builds in some situations. First, let’s see how to find the value of a build flag. Then we’ll see how to update a value and do a limited re-build of the impacted source code.

Interrogating the build settings

The build system maintains the settings you see in Makefile.in and moz.build files in $OBJDIR/config.status. The only time that config.status is written is by mach configure (which may, on occasion, be triggered by other mach commands, including mach build). So to verify that your config.status is up-to-date, you can always re-run mach configure manually.

The config.status file is just a specially formatted Python script. Open it up and you’ll see there’s no magic:

#!/Users/nalexander/Mozilla/gecko/objdir-droid/_virtualenv/bin/python # coding=utf-8 import os import types topsrcdir = '''/Users/nalexander/Mozilla/gecko''' if not os.path.isabs(topsrcdir): rel = os.path.join(os.path.dirname(__file__), topsrcdir) topsrcdir = os.path.abspath(rel) topsrcdir = os.path.normpath(topsrcdir) topobjdir = os.path.abspath(os.path.dirname(__file__)) defines = [(name[1:-1], value[1:-1]) for name, value in [ (''' ANDROID ''', ' 1 '), ... ] ] substs = [(name[1:-1], value[1:-1] if isinstance(value, types.StringTypes) else value) for name, value in [ (''' SHELL ''', r''' /bin/sh '''), ... ] __all__ = ['topobjdir', 'topsrcdir', 'defines', 'non_global_defines', 'substs'] if __name__ == '__main__': args = dict([(name, globals()[name]) for name in __all__]) from mozbuild.config_status import config_status config_status(**args)

The second major point: you can always determine what the build system thinks a build setting by extracting values from either the defines or the substs list of $OBJDIR/config.status. The substs list corresponds to the CONFIG dictionary in moz.build files. (It’s less obvious how defines works.)

Tweaking a build setting

I’m going to take a work-in-progress patch from Bug 1132185 as my example. I’ve applied the patch locally and pushed it to the review mercurial repository. You can view the commit or fetch it with:

hg pull https://reviewboard-hg.mozilla.org/review -r 006d3619a5da

The changeset itself is small and self-contained — exactly how we like build system changes. The patch:

  • declares a new flag, MOZ_ANDROID_TAB_QUEUE, in configure.in;
  • exposes that flag to the preprocessor in mobile/android/base/moz.build;
  • consumes the flag in the preprocessed source input mobile/android/base/AppConstants.java.in;
  • and turns the flag on, for all builds and all trains, in mobile/android/confvars.sh.

There’s a weirdness here in the way that mozconfig options are interpolated into configure.in which means that setting a default value does not do what you would expect. So let’s remove the default in configure.in:

diff --git a/configure.in b/configure.in --- a/configure.in +++ b/configure.in @@ -3938,17 +3938,16 @@ MOZ_WEBSMS_BACKEND= MOZ_ANDROID_NEW_TABLET_UI= -MOZ_ANDROID_TAB_QUEUE= ACCESSIBILITY=1

For the purposes of testing, that last is not desirable. So let’s go into mobile/android/confvars.sh and comment out those lines:

diff --git a/mobile/android/confvars.sh b/mobile/android/confvars.sh --- a/mobile/android/confvars.sh +++ b/mobile/android/confvars.sh @@ -75,17 +75,17 @@ MOZ_WEBGL_CONFORMANT=1 # Enable the tab queue. This will go away in Bug 1132507. -MOZ_ANDROID_TAB_QUEUE=1 +# MOZ_ANDROID_TAB_QUEUE=1

Now, let’s run mach configure and check the build settings in config.status:

chocho:gecko nalexander$ ./mach configure && grep MOZ_ANDROID_TAB_QUEUE objdir-chrome/config.status 0:00.23 /usr/bin/make -f client.mk -s configure 0:01.00 Generating /Users/nalexander/Mozilla/gecko/configure using autoconf 0:01.28 cd /Users/nalexander/Mozilla/gecko/objdir-chrome 0:01.28 /Users/nalexander/Mozilla/gecko/configure 0:01.64 Adding configure options from /Users/nalexander/Mozilla/gecko/mozconfig-chrome 0:01.64 --target=arm-linux-androideabi 0:01.64 --enable-application=mobile/android 0:01.64 --with-android-ndk=/usr/local/Cellar/android-ndk/r8e-darwin-x86_64 0:01.64 --with-android-sdk=/usr/local/Cellar/android-sdk/22.3/platforms/android-21 0:01.77 loading cache ./config.cache ... (''' MOZ_ANDROID_TAB_QUEUE ''', r''' '''),

Observe that we see a match for MOZ_ANDROID_TAB_QUEUE, but there’s an empty value. This match is in the substs list — it means the variable is known, but not set. When we test for existence, we’ll look for a non-empty value.

Now let’s add it to our local mozconfig:

diff --git a/mozconfig b/mozconfig --- a/mozconfig 2015-02-13 12:29:09.000000000 -0800 +++ b/mozconfig 2015-02-13 12:29:05.000000000 -0800 @@ -8,2 +8,4 @@ mk_add_options MOZ_OBJDIR=./objdir-chrome + +mk_add_options MOZ_ANDROID_TAB_QUEUE=1

Re-run configure, and you should see the variable have a value:

chocho:gecko nalexander$ ./mach configure && grep MOZ_ANDROID_TAB_QUEUE objdir-chrome/config.status ... (''' MOZ_ANDROID_TAB_QUEUE ''', ' 1 '), (''' MOZ_ANDROID_TAB_QUEUE ''', r''' 1 '''),

(The first value is in the substs list; the second in the defines list. There’s a technical difference that I won’t get into here.)

Selective rebuilds in mobile/android

For the purposes of this section, I’m going to assume that we’re experimenting with a new build flag that is Firefox for Android (Fennec) only. That means we expect all impacts of the new build flag to be localized to the mobile/android directory, and in turn that lets us rebuild less of the tree.

In the mobile/android directory, we’re very careful to preprocess as little as possible, and we maintain our build dependencies quite actively, which makes testing mobile/android-only changes generally straight-forward. That brings us to the third major point: you should always see your build changes after running mach build mobile/android.

You can verify by manually inspecting the following generated files in the object directory:

  • $(OBJDIR)/mobile/android/base/AndroidManifest.xml
  • $(OBJDIR)/mobile/android/base/res/values/strings.xml
  • $(OBJDIR)/mobile/android/base/generated/preprocessed/org/mozilla/gecko/AppConstants.java
  • $(OBJDIR)/dist/bin/modules/AppConstants.jsm

For example, adding and removing the MOZ_ANDROID_TAB_QUEUE=1 line in my mozconfig toggles the boolean in the following block of AppConstants.java for me:

public static final boolean MOZ_ANDROID_TAB_QUEUE = //@line 178 "/Users/nalexander/Mozilla/gecko/mobile/android/base/AppConstants.java.in" true; //@line 182 "/Users/nalexander/Mozilla/gecko/mobile/android/base/AppConstants.java.in" Conclusion

The Firefox for Android team is always making things better for contributors — including shining light on the dark corners of the build system. Get involved with Firefox for Android or help build and test Firefox for iOS.

Discussion is best conducted on the mobile-firefox-dev mailing list and I’m nalexander on irc.mozilla.org and @ncalexander on Twitter.

Categorieën: Mozilla-nl planet

Air Mozilla: Webmaker Demos February 13 2015

vr, 13/02/2015 - 19:00

Webmaker Demos February 13 2015 Webmaker Demos February 13 2015

Categorieën: Mozilla-nl planet

Michael Kaply: CCK2 2.0.20 Available

vr, 13/02/2015 - 18:54

I've just made version 2.0.20 of the CCK2 available. It contains the following changes:

  • Multiple CCK2s can now coexist
  • Rework of how Hidden UI works, including hiding UI on chrome pages (about:addons)
  • Can completely disable Firefox Health Report
  • Add the ability to disable the extension compatibility check at startup
  • Add support for adding security devices
  • Add the ability to disable search plugin installs from web pages and the search menu
  • Add a tooltip to the menu that shows the ID and version of a config
  • Disable the Firefox Refresh button on webpages
  • Bug Fix: Hiding help menu items didn't remove them from the help popup in the Firefox menu
  • Bug Fix: Autoconfig only, sometimes extensions wouldn't install
  • Bug Fix: Sometimes telemetry prefs didn't migrate correctly from old CCK
  • Bug Fix: Default browser error on Mac OS X Yosemite
  • Bug Fix: CCK2 Wizard didn't work on Firefox menu
  • Bug Fix: Adding Extensions with international characters in their install.rdf didn't work

If you find bugs, please report them at cck2.freshdesk.com.

Priority support is given to folks with support subscriptions. If the CCK2 is important to your company, please consider purchasing one.

Categorieën: Mozilla-nl planet

Doug Belshaw: Weeknote 07/2015

vr, 13/02/2015 - 18:06

This week I’ve been:

Mozilla Dynamic Skillset
  • Working on pricing for on-demand, one-off, and ongoing consultancy.
  • Dealing with enquiries from various people/organisations.
Other

I’m going to be away on holiday from Monday 16th to Monday 23rd (inclusive) with my family in Dubai. I can’t tell you how much I’m looking forward to that! :)

Image CC BY-SA Alan Levine

Categorieën: Mozilla-nl planet

Armen Zambrano: Mozilla CI tools 0.2.1 released - Trigger multiple jobs for a range of revisions

vr, 13/02/2015 - 17:14
Today I have released a major release of mozci which includes the following:

  • trigger_range(buildername, repo_name, start_revision, end_revision, times, dry_run=False)
    • It allows you to trigger a buildername between two revisions as many times as you indicate.
    • This is handy if you want to backfill jobs
  • It fixes a major issue when trying to relate scheduling information with job execution data
    • We needed to use UTC instead of localtime
    • We needed to use the completion time of a job instead of the claiming time
  • Added pushlog support
  • Added buildbot job status interpretation 
    • Found in mozci.sources.buildapi.query_job_status()

PyPi:       https://pypi.python.org/pypi/mozci
Source:   https://github.com/armenzg/mozilla_ci_tools

Creative Commons License
This work by Zambrano Gasparnian, Armen is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
Categorieën: Mozilla-nl planet

Kim Moir: Mozilla pushes - January 2015

vr, 13/02/2015 - 17:13
Here's January 2015's monthly analysis of the pushes to our Mozilla development trees. You can load the data as an HTML page or as a json file.

Trends
We're back to regular volume after the holidays. Also, it's really cold outside in some parts of the of the Mozilla world.  Maybe committing code > going outside.


Highlights
10798 pushes
348 pushes/day (average)
Highest number of pushes/day: 562 pushes on Jan 28, 2015
18.65 pushes/hour (highest)

General Remarks
Try had around around 42% of all the pushes
The three integration repositories (fx-team, mozilla-inbound and b2g-inbound) account around 24% of all of the pushes

Records
August 2014 was the month with most pushes (13,090  pushes)
August 2014 has the highest pushes/day average with 422 pushes/day
July 2014 has the highest average of "pushes-per-hour" with 23.51 pushes/hour
October 8, 2014 had the highest number of pushes in one day with 715 pushes 




Categorieën: Mozilla-nl planet

Mozilla Reps Community: Expanding the scope of the Mozilla Reps program

vr, 13/02/2015 - 16:23

reps-walking

This story started in 2011. A group of passionate Mozillians created the Reps program, their goal was to empower Mozilla volunteers all around the world to support the Mozilla mission. They provided visibility to the work of volunteers, created process to have access to resources and a better way to communicate within the community and with staff. It was the Reps themselves, especially the Council and the mentors who shaped this program. Now, counting 457 Reps, the program has evolved to be a powerful platform for community building where leaders from all around the world can emerge.

The Reps program proved to be very successful in building healthy local and regional communities. It also provided a structured connection to Mozilla functional activities when the work is inherently regional, for example with the Firefox OS launches. But as Mozilla grew and became more professional it was harder for volunteers to participate in the global nature of the project: volunteers could run local and regional activities much more easily, but participating in projects aimed at global impact became increasingly difficult.

Now fast Forward to 2015: We have a new participation plan that aims to bring back the balance and revive the participatory nature of Mozilla. Mark Surman’s blog post is a great read: we don’t only want to enable more participation but we want this participation to have value both for Mozilla and for the individual volunteers. And that means that we will empower many more volunteers to take the lead and participate much more deeply in Mozilla to have both local and global impact.

And here is where Reps come in. Our challenge is to make Mozilla much more participatory again, to partner with functional areas and take the lead. To make this successful in the long run we will work on new participation and leadership pathways connecting with functional teams. And we will work on the things that matter the most and make a difference. These pathways will of course provide more opportunities for personal and collective development as well as new leadership opportunities for Mozillians and Reps.

15665913852_aae2cfd30d_z

How will this be different from the past? We used to have “Special Interest Groups”, loose groups with an interest in a functional area, but not too many concrete projects or learning opportunities. We want to build on what was working there but shift to “Impact teams”: teams of staff and volunteers who will work hand in hand and where volunteers will be able to get real value out of their participation and will have a clear leadership pathway.

This new approach brings of course a whole new set of challenges: we’ll need to rethink the way we organize the Reps program, the way we empower Reps, mentors and Council and the way we do things in general. Education will be a fundamental part of this. We will need to work all together, Council, Mentors and Reps, to make this happen. And although it will be a lot of hard work I couldn’t be more excited for the changes coming: we’ll be investing so much energy and resources in empowering volunteers and offering new avenues for personal development while having a tangible impact bringing the Mozilla mission forward. I think 2015 will be a great year for Mozilla and the Reps program, join us in shaping this third era of Mozilla and writing the next chapter of the Mozilla Reps history.

Categorieën: Mozilla-nl planet

Rosana Ardila: Expanding the scope of the Mozilla Reps program

vr, 13/02/2015 - 16:21

reps-walking

This story started in 2011. A group of passionate Mozillians created the Reps program, their goal was to empower Mozilla volunteers all around the world to support the Mozilla mission. They provided visibility to the work of volunteers, created process to have access to resources and a better way to communicate within the community and with staff. It was the Reps themselves, especially the Council and the mentors who shaped this program. Now, counting 457 Reps, the program has evolved to be a powerful platform for community building where leaders from all around the world can emerge.

The Reps program proved to be very successful in building healthy local and regional communities. It also provided a structured connection to Mozilla functional activities when the work is inherently regional, for example with the Firefox OS launches. But as Mozilla grew and became more professional it was harder for volunteers to participate in the global nature of the project: volunteers could run local and regional activities much more easily, but participating in projects aimed at global impact became increasingly difficult.

Now fast Forward to 2015: We have a new participation plan that aims to bring back the balance and revive the participatory nature of Mozilla. Mark Surman’s blog post is a great read: we don’t only want to enable more participation but we want this participation to have value both for Mozilla and for the individual volunteers. And that means that we will empower many more volunteers to take the lead and participate much more deeply in Mozilla to have both local and global impact.

And here is where Reps come in. Our challenge is to make Mozilla much more participatory again, to partner with functional areas and take the lead. To make this successful in the long run we will work on new participation and leadership pathways connecting with functional teams. And we will work on the things that matter the most and make a difference. These pathways will of course provide more opportunities for personal and collective development as well as new leadership opportunities for Mozillians and Reps.

15665913852_aae2cfd30d_z

How will this be different from the past? We used to have “Special Interest Groups”, loose groups with an interest in a functional area, but not too many concrete projects or learning opportunities. We want to build on what was working there but shift to “Impact teams”: teams of staff and volunteers who will work hand in hand and where volunteers will be able to get real value out of their participation and will have a clear leadership pathway.

This new approach brings of course a whole new set of challenges: we’ll need to rethink the way we organize the Reps program, the way we empower Reps, mentors and Council and the way we do things in general. Education will be a fundamental part of this. We will need to work all together, Council, Mentors and Reps, to make this happen. And although it will be a lot of hard work I couldn’t be more excited for the changes coming: we’ll be investing so much energy and resources in empowering volunteers and offering new avenues for personal development while having a tangible impact bringing the Mozilla mission forward. I think 2015 will be a great year for Mozilla and the Reps program, join us in shaping this third era of Mozilla and writing the next chapter of the Mozilla Reps history.


Categorieën: Mozilla-nl planet

Johnathan Nightingale: Five

vr, 13/02/2015 - 15:26

Saturday morning light. #lilyHi sweets,

Today you turn 5, which makes this the tenth one of these letters I’ve written (A letter, 6 months, 1 year old, 18 months, 2 years old, Two and a Half, 3 years old, Three and a Half, Four, Four and a Half). Every time I write a new one, I read all the other ones and then I fall down the rabbit hole of looking at old pictures of you, and I land in a big pile of feels. That happened again this morning, and I’m sitting in the Mozilla office sniffling like a goober.

You’re the coolest little kid, Lil. You’re big into Monopoly Junior right now, and you cackle a little when something good happens, but when you’re winning by too much, you give everyone else some of your money, “so that we all have a nice time.” You’ve got friends on the street and go over to hang out with them, which is totally normal and great, but also a hard thing to get used to. You’re developing all these mannerisms that are so big kid that it hurts, even though it’s awesome. There’s a lot of that in parenthood – heart-swelling-to-painful awesomeness. When you need my help to undo a button at the back of your dress, you gather up all your hair in your hands and tip your neck forward and I’d swear you were 17.

You’re working through having two homes, just like I did when I was your age. Which is expected and normal and still heart-achy. So far you’re just curious and trying to puzzle it out. For our part, as we muddle through it, we talk to other “bonus moms” who have been at it longer than we have, and try to pay it forward by talking to friends who are becoming step parents for the first time, to share what little we’ve learned. Take it from me, kid, there’s no quick road to the other side of this one – you’ll spend a lot of time thinking about it, well into adulthood. But I’ll always be here, if you want to talk about it.

You refuse to go to sleep. You sleep like a cat, you’re out for 9-10 hours a night at least, but getting you to close your eyes is a daily, ridiculous struggle. A few months ago I taught you the word, “stalling”, but naming it hasn’t eliminated it. You want another story. You want to pee. You want to cuddle. Your newest trick is to ask wide open questions about the world. Smart, thoughtful questions and they are my achilles heel, because of course I will talk to you about stars and planets and plants and animals and dinosaurs. Last week’s 9pm gambit was, “Daddy, how does light work?”

I pretend to get annoyed, and tell you to go to sleep, but I’m not really annoyed at all. I love our conversations. They’re the best part of my day. I love watching you experience the world, and watching you grow. It hurts sometimes, but in the best way.

I love you, Lil. Happy birthday.

Categorieën: Mozilla-nl planet

Mozilla Release Management Team: Firefox 36 beta8 to beta9

vr, 13/02/2015 - 15:01

Just this once, we built a beta 9 for mobile and the Desktop & Mobile beta have been built from different changes (69a8d311ddd6 for mobile). We disabled D2D 1.1 to experiment the effect on the crash rate. We also stopped the Flash protected mode experiment. Finally, we landed some patches to fix regressions on image diplay.

  • 24 changesets
  • 37 files changed
  • 518 insertions
  • 191 deletions

ExtensionOccurrences js12 cpp9 h6 jsm4 xml2 java2 jsx1 cxx1

ModuleOccurrences browser15 mobile4 layout4 js4 dom4 media2 xpcom1 modules1 gfx1 extensions1

List of changesets:

Mark FinkleBug 1117186 - fix geo-specific search default perferences (bad merge) r=margaret a=sylvestre - ff6bff2f5694 Ryan VanderMeulenBug 1120993 - Backout changesets 6dbb4d7aa57d (Bug 1125891) and 78a8db05e964 (Bug 1119941) to enable Flash protected-mode. a=sledru - d02e363ecb6f Bas SchoutenBug 1083245 - Pop all clips before copying to the destination blending surface. r=jrmuizel, a=sledru - 33a2305f846a Dan GohmanBug 1129088 - IonMonkey: Revert Bug 1100685 and add a comment. r=jandem, a=sledru - 3ef577b545b8 Dan GohmanBug 1117165 - IonMonkey: After replacing an instruction and deleting it, check whether the replacement has been deleted too. r=nbp, a=sledru - a00e758a0460 Yury DelendikBug 1130032 - Missing plugin UI is broken. r=mconley, a=sledru - 5cfeb5068e2b Mike ConnorBug 1126511 - Update Yahoo search plugins to use per-access point tags for better reporting/analysis, Fennec portion. r=margaret, r=mfinkle, a=lmandel - 6e32981aaf6d Mike ConnorBug 1126511 - Update Yahoo search plugins to use per-access point tags for better reporting/analysis, Desktop portion. r=gavin, a=lmandel - 519db3f2d282 Jan de MooijBug 1128196 - Don't relazify scripts with a TypeScript. r=till, a=lmandel - 2f97ce37f5c4 Mike de BoerBug 1113896: toggle the Loop panel upon clicking the toolbar button. r=MattN, a=sylvestre - 3287468f6460 Milan SreckovicBug 1128972 - Disable D2D 1.1 on Fx36. r=bschouten, a=sledru - 7c472ea5e3b3 Justin WoodBug 1129388 - Define MSRangeRemovalAction in MediaSource.h where it is exposed. r=jya, a=sledru - e95df19f3b70 James WillcoxBug 1126454 - Load mozglue in PasswordsProvider.onCreate() instead of constructor and install crash handler. r=rnewman, a=sledru - 61a56699e22d L. David BaronBug 983817 - Pad heap allocations passed to flag_qsort() on x86 Linux to work around gcc bug affecting Ubuntu packages. r=froydnj, a=sledru - ca56ab5d9989 Mike ConnorBug 1131825 - Fennec distribution code doesn't handle localized preferences correctly. r=rnewman, a=sledru - 9295bf4a3442 Paul AdenotBug 1131768 - Unlock before tearing down the stream in case of error, to avoid recursive locking. r=kinetik, a=sledru - 69a8d311ddd6 Kan-Ru Chen (陳侃如)Bug 1121558 - Remove message listener after test-success. r=smaug, a=test-only - 8b7f4835bd47 Tim TaubertBug 1123344 - Request a longer timeout for browser_cookies.js. r=yoric, a=test-only - 6d2cd80ee4e9 Jean-Yves AvenardBug 1128939 - Part 1: Ensure we have any space in the media buffer before writing. r=k17e, a=abillings - 783f63db37da Nathan FroydBug 1036515 - Narrow the scope of unlocking mMonitor in nsTimerImpl::PostTimerEvents. r=bsmedberg, a=abillings - 78815ed2e606 Mike de BoerBug 1121210: notify UITour when the active tab changes and don't show the get started info panel when the rooms tab is not selected. r=MattN, a=sylvestre - 6c0ded9eb9aa Seth FowlerBug 1130328 - Part 1: Add support for an optional frame-space damage rect to nsIFrame::InvalidateLayer. r=mattwoodrow, a=sledru - eb77152f1233 Seth FowlerBug 1130328 - Part 2: Update nsImageFrame to always use InvalidateLayer when handling FRAME_UPDATE. r=tn, a=sledru - 95d83f3422fc Matthew GreganBug 1131788 - cubeb: Unable to use InterlockedAdd64 on MSVC2010 (and mingw). r=padenot, a=sledru - 57f79302248f

Categorieën: Mozilla-nl planet

Mozilla Reps Community: Reps Weekly Call – February 12th 2015

vr, 13/02/2015 - 13:20

Last Thursday we had our weekly call about the Reps program, where we talk about what’s going on in the program and what Reps have been doing during the last week.

fox-tatto

Summary
  • Word of Mouth Marketing Program
  • Southeast Asian meeting.
  • Paris Reps Leadership meetup.
  • Impact teams.
  • Education.
  • Mozilla Romania & Mozilla Balkans update.

Detailed notes

AirMozilla video

Don’t forget to comment about this call on Discourse and we hope to see you next week!

Categorieën: Mozilla-nl planet

Pagina's