I’m taking a month of vacation. Today is my last working day for March, and I will be back on April 30th. While I won’t be totally incommunicado, for the most part I won’t be reading email. While I’m gone, any management-type inquiries can be passed on to Naveed Ihsannullah.
This is a report about the Mozilla March IRC Meeting (see the announcement here). The topics of the meeting can be found in this PAD (local copy of the PAD) and the IRC log (local copy of the IRC log) is also available.
VR Cinema's third event will showcase new and exciting films for virtual reality. Come see these groundbreaking projects before they're released to the public and...
In a slew of case studies, reviewers reckoned that a GPWS may have prevented crashes by giving pilots additional time to act before they smashed into the ground. Often, the GPWS's signature "Whoop, Whoop: Pull Up!" would have sounded a full fifteen seconds before any other alarms triggered.
Instruments like this are indispensable to aviation because pilots operate in an environment outside of any realm where human intuition is useful. Lacking augmentation, our bodies and minds are simply not suited to the task of flying airliners.
For the same reason, thick layers of instrumentation and early warning systems are necessary for managing technical infrastructure. Like pilots, without proper tooling, system administrators often plow their vessels into the earth....
The St. Patrick's Day Massacre
Case in point, on Saint Patrick's Day we suffered two outages which could have likely been avoided via some additional alerts and a slightly modified deployment process.
The first outage was caused by the accidental removal of a variable from a config file which one of our utilities depends on. Our utilities are all managed by a dependency system called runner, and when any task fails the machine is prevented from doing work until it succeeds. This all-or-nothing behavior is correct, but should not lead to closed trees....
On our runner dashboards, the whole event looked like this (the smooth decline on the right is a fix being rolled out with ansible):
The second, and most severe, outage was caused by an insufficient wait time between retries upon failing to pull from our mercurial repositories.
There was a temporary disruption in service which led to slaves failing to clone a repository, and, unfortunately, a large number of slaves were affected and began retrying the task. As a result, we ended up DDoSing ourselves.
From the repository's point of view, the explosion looked like this:
Then, from runner's point of view, the retrying task:
In both of these cases, despite having the data (via runner logging), we missed the opportunity to catch the problem before it caused system downtime. Furthermore, especially in the first case, we could have avoided the issue even earlier by testing our updates and rolling them out gradually.
Avoiding Future Massacres
After these fires went out, I started working on a RelEng version of the Ground Proximity Warning System, to keep us from crashing in the future. Here's the plan:
1.) Bug 1146974 - Add automated alerting for abnormally high retries (in runner).
In both of the above cases, we realized that things had gone amiss based on job backlog alerts. The problem is, once we have a large enough backlog to trigger those alarms, we're already hosed.
The good news is, the backlog is preceded by a spike in runner retries. Setting up better alerting here should buy us as much as an extra hour to respond to trouble.
We're already logging all task results to influxdb, but, alerting via that data requires a custom nagios script. Instead of stringing that together, I opted to write runner output to syslog where it's being aggregated by papertrail.
Using papertrail, I can grep for runner retries and build alarms from the data. Below is a screenshot of our runner data in the papertrail dashboard:
2.) Add automated testing, and tiered roll-outs to golden ami generation
Finally, when we update our slave images the new version is not rolled out in a precise fashion. Instead, as old images die (3 hours after the new image releases) new ones are launched on the latest version. Because of this, every deploy is an all-or-nothing affair.
By the time we notice a problem, almost all of our hosts are using the bad instance and rolling back becomes a huge pain. We also do rollbacks by hand. Nein, nein, nein.
My plan here is to launch new instances with a weighted chance of picking up the latest ami. As we become more confident that things aren't breaking -- by monitoring the runner logs in papertrail/influxdb -- we can increase the percentage.
The new process will work like this:
- 00:00 - new AMI generated
00:01 - new slaves launch with a 12.5% chance of taking the latest version.
00:45 - new slaves launch with a 25% chance of taking the latest version.
01:30 - new slaves launch with a 50% chance of taking the latest version.
02:15 - new slaves launch with a 100% chance of taking the latest version.
The intention being, any failure within the first 90 minutes will trigger a rollback and keep the doors open....
The original DruCall was based on SIPml5 and released in 2013 as a proof-of-concept.
It would be great to take DruCall further in 2015, here are some of the possibilities that are achievable in GSoC:
- Updating it for Drupal 8
- Support for logged-in users (currently it just makes anonymous calls, like a phone box)
- Support for relaying shopping cart or other session cookie details to the call center operative who accepts the call
My background is in real-time and server-side infrastructure and I'm providing all the WebRTC SIP infrastructure that the student may need. However, for the project to have the most impact, it would also be helpful to have some input from a second mentor who knows about UI design, the Drupal way of doing things and maybe some Drupal 8 experience. Please contact me ASAP if you would be keen to participate either as a mentor or as a student. The deadline for student applications is just hours away but there is still more time for potential co-mentors to join in.WebRTC at mini-DebConf Lyon in April
The next mini-DebConf takes place in Lyon, France on April 11 and 12. On the Saturday morning, there will be a brief WebRTC demo and there will be other opportunities to demo or test it and ask questions throughout the day. If you are interested in trying to get WebRTC into your web site, with or without Drupal, please see the RTC Quick Start guide.
NOTE: I did a 0.3.1 release but the right number should have been 0.4.0
This release does not add any major features, however, it fixes many issues and has much better performance.
Many thanks to @adusca, @jmaher and @vaibhavmagarwal for their contributions.
- An alltalos.py script has been added
- Issue #69 - Generate graph of builds to testers
- Added flake8 support - Remove pyflakes and pep8
- Allow skipping revisions on a list (09f7138)
- Issue #61 - Rename trigger_range.py to trigger.py
- All the documentation and roadmap have been polished
- Issue #90 - Do not trigger builds multiple times if we are intending the test jobs to be triggered multiple times
- Issue #94 - Load list of repositories from disk only once
- Issue #117 - gaia-try builders are always upstream builders
- Determine a running job correctly (068b5ee)
- Issue #142 - Loading buildjson files from disk is now only done once
- Issue #135 - Remove buildjson files which have fallen out of date
- Issue #146 - If the buildapi information about a build is corrupted, trigger that build again
- Some DONTBUILD pushes can have buildapi support (dcb942f)
- Issue #120 - Prevent triggering more build jobs than necessary
For all changes visit: 0.3.0...0.4.0
This work by Zambrano Gasparnian, Armen is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
Zweiwöchentliches Meeting der deutschsprachigen Community. ==== German speaking community bi-weekly meeting.
Woyciech Danilo from flowbox.io talks about their new programming language, Luna. Flowbox develops professional video compositing software, which is powered by a new programming language...
Super excited to share my post published on opensource.com for Open Education Week: “Mozilla cares for community with educational resources“.
Dear Reps Planet,
The council is excited to share with you, our second group of new Mozilla Rep Mentors this Year.
These are Reps council has recognized as being equally good at inspiring and empowering others, as they are leading globally and locally in their communities.
As mentorship is core to the program, we are very grateful they have agreed to take on this new responsibility.
A crucial role in the Mozilla Reps ecosystem is that of a mentor. We strive for every Rep to become a mentor for the program to become self-sustaining and for Reps to play a central role in our ambitious goals for growing and enabling the Mozilla Community. We’ve just accepted eight new mentors, bringing the current total to 54.
Our new mentors are:
- Rajesh Ranjan
- Irvin Chen
- Diwanshi Pandey
- T.M. van den Broek
- István Szmozsánszky ‘Flaki’
- Sara Khan
- Bahy Mohammed
- Umesh Agarwal
Please join us in congratulating our new Mozilla Rep Mentors – via this thread on Discourse
Reps Mentor Role Description:
- Mozilla Reps recognizes that our primary goals are best reached through the support, encouragement, and empowerment of community through mentorship. Mentoring is a process for the informal transmission of knowledge, made possible through regular and supportive interaction.
- We encourage mentors to be as open to learning from their mentees, as they are to teaching, for the benefit and growth of both individuals and the program as a whole.
Welcome New Reps Mentors!
The Community Education Working Group exists to merge ideas, opportunities, efforts and impact across the entire project through Education & Training.
Monty Montgomery: Daala Blog-Like Update: Bug or feature? [or, the law of Unintentionally Intentional Behaviors]
Codec development is often an exercise in tracking down examples of "that's funny... why is it doing that?" The usual hope is that unexpected behaviors spring from a simple bug, and finding bugs is like finding free performance. Fix the bug, and things usually work better.
Often, though, hunting down the 'bug' is a frustrating exercise in finding that the code is not misbehaving at all; it's functioning exactly as designed. Then the question becomes a thornier issue of determining if the design is broken, and if so, how to fix it. If it's fixable. And the fix is worth it.
What’s happening at the Mozilla Foundation? This post contains the presentation slides from our recent Board Meeting, plus an audio interview with Executive Director Mark Surman. It provides highlights from 2014, a brief summary of Mozilla’s 2015 plan, and a progress report on what we’ve achieved over the past three months.
- Learn more about Mozilla
- Attend the Mozilla Community Call. Open to all, every Monday.
- Learn more about the Mozilla Foundation’s 2015 plan
- Grew contributors and ground game. (10,077 active contributors total.)
- Prototyped new Webmaker mobile product
- Expanded community programs by 3x
Mozilla-wide goals: grow long-term relationships that help people and promote the open web. By building product and empowering people.
Webmaker+ goal: Expand participation in Webmaker through new software and on the ground clubs.Building Mozilla Learning
By 2017, we’ve built Mozilla Learning: a global classroom and lab for the citizens of the web. Part community, part academy, people come to Mozilla Learning to unlock the power of the web for themselves, their organizations and the world.
2015 Mozilla Foundation goals
- Deepen learning networks (500 cities)
- B uild mass appeal learning product (250k Monthly Active Users)
- Craft ambitious Mozilla Learning and community strategy
- Major victory in US net neutrality, with Mozilla getting 330k people to sign a petition.
- Launched Webmaker app at Mobile World Congress. Strong interest from partners, possible link to Orange FirefoxOS launch in Africa and Middle East.
Q: My hard disk seems to be getting smaller! There is a megabyte less free space than there was a month ago, yet I have not saved anywhere near 1MB’s worth of files. What’s going on?
A: This is quite a common problem, but most sufferers don’t realise they’ve got it. What happens is that some of the free space gets allocated to a non-existent file.
In other words the disk filing system has, in your case, a megabyte allocated to one or more files that don’t have a directory entry. They cannot therefore be seen with the DIR command, nor deleted.
Fortunately it is possible to turn these lost chains, as they are called, back into real files which can then be seen and deleted in the normal way. Simply type this command:
If you have any lost chains, Chkdsk will tell you so and ask you if you want to convert them into files. Answer ‘Y’.
FILE0000.CHK, FILE0001.CHK, FILE0002.CHK…
Mozilla Science Lab: Ask Us Anything: Lessons from the Local Research Coding Groups Panel Discussion
On Tuesday, the the Science Lab conducted its first Ask Us Anything on the MSL Forum, organized by Noam Ross. The topic was lessons learned in running local study groups, user’s groups, hacky hours and other meetups for researchers using and writing code; many thanks go out to the seven panelists who were available to answer questions:
- Rayna Harris, Center for Computational Biology and Bioinformatics, UT Austin
- Jeff Hollister, US EPA
- Isabell Kiko, Research Bazaar
- Fiona Tweedie, Research Bazaar
- Erika Mudrak, Cornell Statistical Consulting Unit
- Noam Ross, Davis R Users’ Group, UC Davis
- Matt Davis, Software Carpentry
This was a tremendously successful event, with a sustained conversation of more than a post per minute on the topic for two full hours; a lot of interesting ideas came out of the discussion, a few of which I summarize here, followed by detailed discussion below; also, be sure to check out the full thread.Summary
A few great ideas for study groups can be distilled from this event:
- Get your event information in front of a few hundred people regularly; 10% attendance is normal.
- Involve your institution in communicating about your event if possible.
- Always have an exit strategy: how will you pass the baton to the next cohort of organizers?
And for online AMA-style events:
- Make it a panel discussion; this creates the space for the community to ask questions, but keeps the thread lively and substantial with discussions between experienced community members.
- Make it a time-limited event; this encourages active participation and re-creates some of the energy usually found only at conferences and in-person meetups.
One of the first things the thread discussed, was one of the most common problems for any regular community event: sustainability. How do we get people coming out and participating, month after month, and maintain momentum?
The panel quickly zeroed in on an interesting challenge: will interest be inspired and sustained by highly targeted skills and tools trainings, or will keeping things as general as possible appeal to a wide audience? Highly specific material will be the most attractive to the small group of people already interested in it, while general topics might seem vague or unclear to a potential attendee on how relevant they’ll be, even if they, in principle, apply to a wider range of people.
This led to an important observation: the bigger the pool of people a study group is communicating with, the better its attendance will be. Panelists seemed to have a bit more success with the specific and clearly practically applicable; what allowed these groups to keep attendance up despite getting into the nitty gritty, was developing a large audience of people aware of their activities. Numbers seemed to hover around 10% attendance, if we compare number of actual attendees to size of mailing lists; but with a large audience (critical mass seemed to be around 200 people), there’s sure to be a cohort of people interested in whichever specific topic the group wants to take up.
But what about the early days, before a new group has gotten in front of that first 200? Fiona and Jeff made a key observation: stick to it, even if the first couple of events are just you and one or two other people. It takes time for word of mouth to spread, time for people to make up their minds that they’re comfortable dipping their toe into something like a meetup group – and, worst case, you’ve set aside some time to get some of your own work done and have a beer.
Finally on the topic of sustainability, another common concern that came up was the relationship of organizers to the host institution; post-docs and students move on after only a few short years, and without someone to pick up the torch, efforts can fizzle out. The panel agreed that it’s crucial for senior organizers to cultivate relationships with people who they can hand off to in future, but this calls out another key design question: how can we design a really smooth hand-off procedure between generations of organizers? This is a long term goal a bit beyond the concerns of groups just getting started, but I think with some savvy design, this process can be made quite smooth; more of my own ideas on this will be forthcoming on this blog very soon.Communication
We need that pool of 200 people thinking about our event – how do we assemble them to begin with?
Organizers found, perhaps surprisingly, that their attendees were pretty quiet on Twitter, and didn’t generate much conversation there, although Twitter might be more effective as a ‘push’ platform, to let people know about events and content. More successful were blogs and mailing lists; panelists cited the familiarity of these formats to most researchers.
A novel approach that a few of the groups based at universities took, was to approach departments for inclusion in departmental news letters and welcome packages for new students. Not only do these communication channels typically already exist in most institutions, they can put a group in front of a large number of potentially interested people quickly, and lend a degree of inclusion into the establishment that helps catch peoples’ attention.Novel Ideas
One thing I love about getting a bunch of people together to talk, is that novel ideas always come out. One of my favorites was a whole other flavor of event that a study group could put on; Fiona Tweedie described ‘Research Speed Dating’, an event where a bunch of people set up short demos of tools they use in their research, and attendees circulate among them, exploring the tools in short, five-minute introductions to see if they might be interested in looking deeper into them at a future meetup. Topics that garner a lot of interest are chosen for deeper dives at future events, and prospective participants get to meet organizers and start developing connections in a relatively no-pressure atmosphere.
Another observation I found compelling from the discussion came from Rayna Harris – graduate school often involves working on the same project for years, and the singular focus can be maddening after a while. It’s really refreshing to have a project that comes in little, month-long bites; from announcing a meetup to delivering can easily occupy only a few weeks, giving a sense of delivery and completion on a much faster cadence than research naturally provides.Meta-AMA
A number of people also asked me about the AMA format itself; I think it was a big success, and it was largely thanks to some design decisions Noam Ross made when we were setting this event up:
- Have a panel of people to discuss the topic at hand. This worked very well, since even when there weren’t newcomers to ask questions, the panelists all talked amongst themselves, which led to some really deep and insightful questions and answers from old hands in the space. We had a seven-person panel, and everyone participated and seemed heard.
- Put it all on one thread. I admit, I had some misgivings about having seven parallel conversations in one thread. It was about as chaotic as I imagined, but Noam was right, it was actually a good thing; it enhanced the panel’s ability to interact and make this as much a panel discussion as an AMA – call it an open panel discussion.
A remarkable thing about this event, was that the same sort of skill and knowledge sharing that happens so naturally at a conference and that I’ve been trying to produce online came out in this event; by sitting a half dozen people down around a topic in a finite time window (we did two hours and it didn’t drag at all), the same sort of connections and mutual understanding came out.Conclusion
A number of interesting ideas, metrics and goals for study groups came out of this conversation, which we’ll be folding in to our forthcoming support for setting up your own meetup – watch this space for news and opportunities in that project coming very soon, and in the meantime, make sure your local study group is on the map!Map of Study Groups & Hacky Hours
Given what a great time and what a productive discussion everyone had on the forum on Tuesday, I’m looking forward to making these panel AMAs a regular event at the Lab; if you have a topic you’d like to suggest, post it in the Events section of the forum, or tweet it to us at @MozillaScience and @billdoesphysics. I hope you’ll join us!
Due to the short cycle (5 weeks instead of 6), we landed more changes than we used to in the RC build.
We took some stability fixes for graphic issues.
- 22 changesets
- 229 files changed
- 724 insertions
- 4356 deletions
ExtensionOccurrences h17 cpp17 ini7 py3 list2 js2 html2 sh1 json1 ipdlh1 hgtags1 build1
ModuleOccurrences storage17 dom14 mobile12 gfx8 widget4 testing3 layout3 docshell2 security1 editor1 browser1
List of changesets:Chris ManchesterBug 1145444. r=jmaher, a=test-only - 1efc8c39543c Jeff GilbertBug 1143218 - Use mochitest subsuites to specify webgl tests. r=jmaher, r=gbrown, a=test-only - a58b8b594396 Kyle HueyBug 1145870. r=bz, a=lmandel - 0725e4cfa3c3 CykesiopkaBug 1121117 - Add fuzz time to workaround non-monotonicity of Date(). r=keeler, a=test-only - 8358c6c2c417 Tim TaubertBug 1088163 - Fix intermittent browser_offlineQuotaNotification.js timeouts by properly waiting for a notification to show. r=markh, a=test-only - 72912a71fb98 Ehsan AkhgariBug 1142360 - Move the mochitests for bugs 441782, 467672 and 570378 to the reftest framework. r=dbaron, a=test-only - 62a72d33d16b Neil DeakinBug 942411 - Change the frame height to force a reflow and renable the test on Linux to see if it helps. r=smaug, a=test-only - b8ec30b0a437 James WillcoxBug 1090300 - Repopulate input buffers when necessary in Android media decoder. r=gcp, a=lmandel - 2cca5b090036 Ryan VanderMeulenBug 1146061 - Skip test_peerConnection_basicH264Video.html on Windows debug. a=test-only - 19b630388dda Ryan VanderMeulenBacked out changeset 72912a71fb98 (Bug 1088163) because it depends on BrowserTestUtils, which isn't available on 37. - 196c6575593d Matt WoodrowBacked out changeset 0c23dcbc6bf7 (Bug 1138967) for causing crashes - 6d7a2555b021 Matt WoodrowBacked out changeset 0c23dcbc6bf7 (Bug 1138967) for causing crashes. CLOSED TREE - 2592523e1eb0 Olli PettayBug 1146339 - Do anchor scrolling right before dispatching popstate/hashchange. r=bz, a=lmandel - 4d306a83ae1b Marco BonardoBug 1005991 - mozStorage should not use XPCVariant off the main thread. r=asuth, a=lmandel - b8c1a399905d Marco BonardoBug 1005991 - Trivial fixes for non-unified builds. r=me, a=lmandel - fadc9f270e9f Ryan VanderMeulenMerge beta to m-r. a=merge - 07c827be741f Steven MichaudBug 1137229 - Keyboard input can stop working in a window. r=smaug a=lmandel CLOSED TREE - 45961b7d67dc Shih-Chiang ChienBug 1080130 - Unreferenced socket might be closed before opened. r=khuey, a=test-only - b6a4dca0edc9 Jeff MuizelaarBug 1137716 - Try blacklisting Optimus w/ Intel Ironlake Graphics. r=bas, a=lmandel - d56b6d648c01 Matt WoodrowBug 1145585 - Hold a ref to the right texture. r=jmuizelaar, a=lmandel - e35deaa85d21 Ehsan AkhgariBug 1146883 - Null check the node passed to GetGoodSelPointForNode. r=smaug, a=lmandel - 8fda35675a3f Ryan VanderMeulenMerge beta to m-r. a=merge - 7ec23d08cf32
Through discussions on whatwg, I learned (or I had just forgotten) about the Refresh HTTP header. Let's cut strait to the syntax:HTTP/1.1 200 OK Refresh: 5; url=http://www.example.org/fresh-as-a-summer-breeze
- 5 means here 5 seconds.
- url= gives the destination where the client should head after 5 seconds.
Simon Pieters (Opera) is saying in that mail:
I think Refresh as an HTTP header is not specified anywhere, so per spec
it shouldn't work. However I think browsers all support it, so it would be
good to specify it.
Eric Law (ex-Microsoft) has written about The Performance Impact of META REFRESH. If we express the previous HTTP header in HTML, we get:<meta http-equiv="refresh" content="5;url=http://www.example.org/fresh-as-a-summer-breeze" />
In his blog post, Eric is talking about people using refresh to… well refresh the page. He means loading the same exact page over and over again. And indeed it means for the browser to create a certain number of "unconditional and conditional HTTP requests to revalidate the page’s resources" for each reload (refresh).
On the Web Compatibility side of things, I see the <meta http-equiv="refresh" …/> used quite often.<meta http-equiv="refresh" content="0;url=http://example.com/there" />
Note the 0. Probably the result of sysadmins not willing to touch the configuration of the servers, and so front-end developers taking the lead to "fix it", instead of using HTTP 302 or HTTP 301. Anyway, it is something which is being used for most of the time, redirecting to another domain name or uri. Refresh HTTP Header on the other hand, I don't remember seeing it that often.Should it be documented?
Simon is saying: "it would be good to specify it." I'm not so sure. First things first.Testing
Let's create a test, by making a page sending a Refresh.Header set Refresh "0;url=https://www.youtube.com/watch?v=sTJ1XwGDcA4"
which givesHTTP/1.1 200 OK Accept-Ranges: bytes Connection: Keep-Alive Content-Length: 200 Content-Type: text/html; charset=utf-8 Date: Thu, 26 Mar 2015 05:48:57 GMT ETag: "c8-5122a67ec0240" Expires: Thu, 02 Apr 2015 05:48:57 GMT Keep-Alive: timeout=5, max=100 Last-Modified: Thu, 26 Mar 2015 05:37:05 GMT Refresh: 0;url=https://www.youtube.com/watch?v=sTJ1XwGDcA4
This should redirect to this Fresh page
- Yes - Firefox 36.0.4
- Yes - Opera 29.0.1795.26
- Yes - Safari 8.0.4 (10600.4.10.7)
If someone could test for IE and Chrome at least.Browser Bugs?
On Mozilla bug tracker, there are a certain number of bugs around refresh. This bug about inline resources is quite interesting and might indeed need to be addressed if there was a documentation. The bug is what the browser should do when the Refresh HTTP header is on an image included in a Web page (this could be another test). For now, the refresh is not done for inline resources. Then what about scripts, stylesheets, JSON files, HTML document in iframes, etc? For the SetupRefreshURIFromHeader code, there are Web Compatibility hacks in the source code of Firefox. We can read:// Also note that the seconds and URL separator can be either // a ';' or a ','. The ',' separator should be illegal but CNN // is using it."
also:// Note that URI should start with "url=" but we allow omission
and… spaces!// We've had at least one whitespace so tolerate the mistake // and drop through. // e.g. content="10 foo"
On Webkit bug tracker, I found another couple of bugs but about meta refresh and not specifically Refresh:. But I'm not sure it's handled by WebCore or if it's handled elsewhere in MacOSX (NSURLRequest, NSURLConnection, …). If someone knows, tell me. I didn't explore yet the source code.
On Chromium bug tracker, another couple of bugs for meta refresh, with some interesting such as this person complaining that a space doesn't work instead of a ;. This is also tracked on WebKit. Something like:<meta http-equiv="refresh" content="0 url=http://example.com/there" />
Also what should be done with a relative URL.<meta http-equiv="refresh" content="0;url=/there" />
But for Chromium, I have not found anything really specific to Refresh header. I didn't explore yet the source code.
On Opera bug tracker, it is still closed. We tried to open it when I was working there, and it didn't work.Competition Of Techniques
Then you can also imagine the hierarchy of commands in a case like this:HTTP/1.1 301 Permanent Redirect Refresh: 0;url=http://example.net/refresh-header Location: http://example.net/location <!DOCTYPE html> <html> <title>Fresh</title> <meta http-equiv="refresh" content="0;url=http://example.net/meta" /> <body onload="document.location.replace('http://example.net/body')"> </body> </html>
My guess is the 301 always win with the Location HTTP header, or at least it's what I hope.History
I can find very early references of meta refresh such as in Netscape Developer documentation.
The earliest mention seems to be An Exploration Of Dynamic Documents I can't find anywhere the documentation for Refresh HTTP header on old Netscape Web sites. (Thanks to SecuriTeam Web site and Amit Klein)
So another thing you obviously want to do, in addition to causing the current document to reload, is to cause another document to be reloaded in n seconds in place of the current document. This is easy. The HTTP response header will look like this:
Refresh: 12; URL=http://foo.bar/blatz.html
In June 1996, Jerry Jongerius posted about HTTP/1.1 Refresh header field comments
My concern with "Refresh" is that I do not want it to be a global concept (a browser can only keep track of one refresh)--it looks to be implemented this way in Netscape 2.x. I would like "Refresh" to apply to individual objects (RE: the message below to netscape).
which Roy T. Fielding replied to:
Refresh is no longer in the HTTP/1.1 document -- it has been deferred to HTTP/1.2 (or later).
Should it be documented? Well, there are plenty of issues, there are plenty of hacks around it. I have just touched the surface of it. Maybe it would be worth to document indeed how it is working as implemented now and how it is supposed to be working when there's no interoperability. If I was silly enough, maybe I would do this. HTTP, Archeology and Web Compatibility issues that seems to be close enough from my vices.
A few tips on computer science paper titles:
Titles of the form Catchy Project Name: What Our Project Is About are stilted. Show some imagination.
Titles of the form Towards [Some Goal We Totally Failed To Reach] are an obvious attempt to dress up failure as success. Don't do that.
Do write bold papers about negative results. Call your paper [Our Idea] Doesn't Work (And Here's Why) and I'll be excited to read it.
[Goal] Is Harder Than You Think would also get my attention.
If your paper title contains the word Aristotelian, I will never read your work again and skip the conference too --- but you get points for chutzpah.
Note: following this advice may harm your career. Consider a career where you don't have to publish or perish.
As the leader of our global human resource team at Mozilla, Allison will be responsible, above all, for ensuring our people have what they need to help move our mission forward. Specifically, her team will develop and execute the people-related strategies and activities that will help to foster growth, innovation, and our overall organizational effectiveness.
With over 20 years of experience, Allison joins us most recently from GoPro where she served as Sr. Director of HR overseeing the hiring of 900 people, opening offices in seven countries, integrating acquisitions and building the HR processes and systems required to support a dynamic global organization. Prior to GoPro, she developed her HR expertise and track record for inspiring and supporting people at Perforce Software, Citibank, and Ingres.
Allison’s background, experience and passion for the human side of business is an exceptional fit for Mozilla.
Please join me in welcoming Allison to Mozilla!
Allison Banks, Vice President of People, Mozilla