text:
Giorgos Logiotatidis: Build and Test against Docker Images in Travis
The road towards the absolute CI/CD pipeline goes through building Docker images and deploying them to production. The code included in the images gets unit tested, both locally during development and after merging in master branch using Travis.
But Travis builds its own environment to run the tests on which could be different from the environment of the docker image. For example Travis may be running tests in a Debian based VM with libjpeg version X and our to-be-deployed docker image runs code on-top of Alpine with libjpeg version Y.
To ensure that the image to be deployed to production is OK, we need to run the tests inside that Docker image. That still possible with Travis with only a few changes to .travis.yml:Sudo is required sudo: required
Start by requesting to run tests in a VM instead of in a container.Request Docker service: services: - docker
The VM must run the Docker daemon.Add TRAVIS_COMMIT to Dockerfile (Optional) before_install: - docker --version - echo "ENV GIT_SHA ${TRAVIS_COMMIT}" >> Dockerfile
It's very useful to export the git SHA of HEAD as a Docker environment variable. This way you can always identify the code included, even if you have .git directory in .dockerignore to reduce size of the image.
The resulting docker image gets also tagged with the same SHA for easier identification.Build the image install: - docker pull ${DOCKER_REPOSITORY}:last_successful_build || true - docker pull ${DOCKER_REPOSITORY}:${TRAVIS_COMMIT} || true - docker build -t ${DOCKER_REPOSITORY}:${TRAVIS_COMMIT} --pull=true .
Instead of pip installing packages, override the install step to build the Docker image.
Start by pulling previously built images from the Docker Hub. Remember that Travis will run each job in a isolate VMs therefore there is no Docker cache. By pulling previously built images cache gets seeded.
Travis' built-in cache functionality can also be used, but I find it more convenient to push to the Hub. Production will later pull from there and if debug is needed I can pull the same image locally too.
Each docker pull is followed by a || true which translates to "If the Docker Hub doesn't have this repository or tag it's OK, don't stop the build".
Finally trigger a docker build. Flag --pull=true will force downloading the latest versions of the base images, the ones from the FROM instructions. For example if an image is based on Debian this flag will force Docker to download the latest version of Debian image. The Docker cache has been already populated so this is not superfluous. If skipped the new build could use an outdated base image which could have security vulnerabilities.Run the tests script: - docker run -d --name mariadb -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -e MYSQL_DATABASE=foo mariadb:10.0 - docker run ${DOCKER_REPOSITORY}:${TRAVIS_COMMIT} flake8 foo - docker run --link mariadb:db -e CHECK_PORT=3306 -e CHECK_HOST=db giorgos/takis - docker run --env-file .env --link mariadb:db ${DOCKER_REPOSITORY}:${TRAVIS_COMMIT} coverage run ./manage.py test
First start mariadb which is needed for the Django tests to run. Fork to the background with -d flag. The --name flag makes linking with other containers easier.
Then run flake8 linter. This is run after mariadb - although it doesn't depend on it - to allow some time for the database to download and initialize before it gets hit with tests.
Travis needs about 12 seconds to get MariaDB ready which is usually more than the time the linter runs. To wait for the database to become ready before running the tests, run Takis. Takis waits for the container named mariadb to open port 3306. I blogged in detail about Takis before.
Finally run the tests making sure that the database is linked using --link and that environment variables needed for the application to initialize are set using --env-file.Upload built images to the Hub deploy: - provider: script script: bin/dockerhub.sh on: branch: master repo: foo/bar
And dockerhub.shdocker login -e "$DOCKER_EMAIL" -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD" docker push ${DOCKER_REPOSITORY}:${TRAVIS_COMMIT} docker tag -f ${DOCKER_REPOSITORY}:${TRAVIS_COMMIT} ${DOCKER_REPOSITORY}:last_successful_build docker push ${DOCKER_REPOSITORY}:last_successful_build
The deploy step is used to run a script to tag images, login to Docker Hub and finally push those tags. This step is run only on branch: master and not on pull requests.
Pull requests will not be able to push to Docker Hub anyway because Travis does not include encrypted environment variables to pull requests and therefore, there will be no $DOCKER_PASSWORD. In the end of the day this is not a problem because you don't want pull requests with arbitrary code to end up in your Docker image repository.Set the environment variables
Set the environment variables needed to build, test and deploy in env section:env: global: # Docker - DOCKER_REPOSITORY=example/foo - DOCKER_EMAIL="firstname.lastname@example.com" - DOCKER_USERNAME="example" # Django - DEBUG=False - DISABLE_SSL=True - ALLOWED_HOSTS=* - SECRET_KEY=foo - DATABASE_URL=mysql://root@db/foo - SITE_URL=http://localhost:8000 - CACHE_URL=dummy://
and save them to .env file for the docker daemon to access with --env-filebefore_script: - env > .env
Variables with private data like DOCKER_PASSWORD can be added through Travis' web interface.That's all!
Pull requests and merges to master are both tested against Docker images and successful builds of master are pushed to the Hub and can be directly used to production.
You can find a real life example of .travis.yml in the Snippets project.
Mozilla Addons Blog: Multi-process Firefox and AMO
In Firefox 48, which reaches the release channel on August 1, 2016, multi-process support (code name "Electrolysis", or "e10s") will begin rolling out to Firefox users without any add-ons installed.
In preparation for the wider roll-out to users with add-ons installed, we have implemented compatibility checks on all add-ons uploaded to addons.mozilla.org (AMO).
There are currently three possible states:
- The add-on is a WebExtension and hence compatible.
- The add-on has marked itself in the install.rdf as multi-process compatible.
- The add-on has not marked itself compatible, so the state is currently unknown.
If a new add-on or a new version of an old add-on is not multi-process compatible, a warning will be shown in the validation step. Here is an example:
In future releases, this warning might become more severe as the feature nears full deployment.
For add-ons that fall into the third category, we might implement a more detailed check in a future release, to provide developers with more insight into the "unknown" state.
After an add-on is uploaded, the state is shown in the Developer Hub. Here is an example:
Once you verify that your add-on is compatible, be sure to mark it as such and upload a new version to AMO. There is documentation on MDN on how to test and mark your add-on.
If your add-on is not compatible, please head to our resource center where you will find information on how to update it and where to get help. We're here to support you!
John O'Duinn: RelEng Conf 2016: Call for papers
(Suddenly, its June! How did that happen? Where did the year go already?!? Despite my recent public silence, there's been a lot of work going on behind the scenes. Let me catchup on some overdue blogposts – starting with RelEngConf 2016!)
We've got a venue and a date for this conference sorted out, so now its time to start gathering presentations, speakers and figuring out all the other "little details" that go into making a great, memorable, conference. This means two things:
1) RelEngCon 2016 is now accepting proposals for talks/sessions. If you have a good industry-related or academic-focused topic in the area of Release Engineering, please have a look at the Release Engineering conference guidelines, and submit your proposal before the deadline of 01-jul-2016.
2) Like all previous RelEng Conferences, the mixture of attendees and speakers, from academia and battle-hardened industry, makes for some riveting topics and side discussions. Come talk with others of your tribe, swap tips-and-gotchas with others who do understand what you are talking about and enjoy brainstorming with people with very different perspectives.
For further details about the conference, or submitting proposals, see http://releng.polymtl.ca/RELENG2015/html/index.html. If you build software delivery pipelines for your company, or if you work in a software company that has software delivery needs, I recommend you follow @relengcon, block off November 18th, 2016 on your calendar and book your travel to Seattle now. It will be well worth your time.
I'll be there – and look forward to seeing you there!
Michael Comella: Enhancing Articles Through Hyperlinks
When reading an article, I often run into a problem: there are links I want to open but now is not a good time to open them. Why is now not a good time?
- If I open them and read them now, I'll lose the context of the article I'm currently reading.
- If I open them in the background now and come back to them later, I won't remember the context that this page was opened from and may not remember why it was relevant to the original article.
I prototyped a solution – at the end of an article, I attach all of the links in the article to the end of the article with some additional context. For example, from my Android thread annotations post:
To remember why I wanted to open the link, I provide the sentence the link appeared in.
To see if the page is worth reading, I access the page the link points to and include some of its data: the title, the host name, and a snippet.
There is more information we can add here as well, e.g. a "trending" rating (a fake implementation is pictured), a favicon, or a descriptive photo.And vice versa
You can also provide the original article's context on a new page after you click a link:
This context can be added for more than just articles.
Shout-out to Chenxia & Stefan for independently discovering this idea and a context graph brainstorming group for further fleshing this out.
Note: this is just a mock-up – I don't have a prototype for this.Themes
The web is a graph. In a graph, we can access new nodes, and their content, by traversing backwards or forwards. Can we take advantage of this relationship?
Alan Kay once said, people largely use computers "as a convenient way of getting at old media…" This is prevalent on the web today – many web pages fill fullscreen browser windows that allow you to read the news, create a calendar, or take notes, much like we can with paper media. How can we better take advantage of the dynamic nature of computers? Of the web?
Can we mix and match live content from different pages? Can we find clever ways to traverse & access the web graph?
This blog & prototype provide two simple examples of traversing the graph and being (ever so slightly) more dynamic: 1) showing the context of where the user is going to go and 2) showing the context of where they came from. Wikipedia (with a certain login-needed feature enabled) has another interesting example when mousing over a link:
They provide a summary and an image of the page the hyperlink will open. Can we use this technique, and others, to provide more context for hyperlinks on every page on the web?
To summarize, perhaps we can solve user problems by considering:
- The web as a graph – accessing content backwards & forwards from the current page
- Computers & the web as a truly dynamic medium, with different capabilities than their print predecessors
For the source and a chance to run it for yourself, check out the repository on github.
Mozilla Reps Community: RepsNext – Introduction Video
At the 2015 Reps Leadership Meeting in Paris it became clear that the program was ready for "a version 2". As the Reps Council had recently become a formal part of Mozilla Leadership, it was time to bring the program to the next level. Literally building on that idea, the RepsNext initiative was born.
Since then several working groups were formed to condense reflections on the past and visions for the future into new program proposals.
At our last Council meetup from 14-17 April 2016 in Berlin we recorded interviews with Council and Peers explaining RepsNext and summarizing our current status.
You can find a full transcript at the end of this blog post. Thanks to Yofie for editing the video!
Please share this video broadly, creating awareness for the exciting future of the Reps program.
Getting involved
We will focus our work at the London All Hands from June 12th to June 17th to work on open questions around the working groups. We will share our outcomes and open up for discussions after that. For now, there are several discussions to jump in and shape the future of the Reps program:
- How should visibility of Reps activities look like?
- How can we convert communication into aligned action?
- How can we keep Reps accountable?
Additionally, you can help out and track our Council efforts on the Reps GitHub repository.
Moving beyond RepsNext
It took us a little more than a year to come up with this "new release" of the Reps program. For the future we plan to take smaller steps improving the program beyond RepsNext. So expect experiments and tweaks arriving in smaller bits and with a higher clockspeed (think Firefox Rapid Release Model).
Video transcript
Question: What is RepsNext?
[Arturo] I think we have reached a point of maturity in the program that we need to reinvent ourselves to be adaptors of Mozilla's will and to the modern times.
Question: How will the Reps program change?
[Pierros] What we're really interested in and picking up as a highlight are the changes on the governance level. There are a couple of things that are coming. The Council has done really fanstastic work on bringing up and framing really interesting conversations around what RepsNext is, and PeersNext as a subset of that, and how do we change and adapt the leadership structure of Mozilla Reps to be more representative of the program that we would like to see.
[Brian] The program will still remain a grassroots program, run by volunteers for volunteers.
[Henrik] We've been working heavily on it in various working groups over the last year, developed a very clear understanding of the areas that need work and actually got a lot of stuff done.
[Konstantina] I think that the program has a great future ahead of it. We're moving to a leadership body where our role is gonna be to empower the rest of the volunteer community and we're gonna try to minimize the bureacracy that we already have. So the Reps are gonna have the same resources that they had but they are gonna have tracks where they can evolve their leadership skills and with that empower the volunteer communities. Reps is gonna be the leadership body for the volunteer community and I think that's great. We're not only about events but we're something more and we're something the rest of Mozilla is gonna rely on when we're talking about volunteers.
Question: What's important about this change?
[Michael] We will have the Participation team's support to have meetings together, to figure out the strategy together.
[Konstantina] We are bringing the tracks where we specialize the Reps based on their interest.
Question: Why do we need changes?
[Christos] There is the need of that. There is the need to reconsider the mentoring process, reconsidering budgets, interest groups inside of Reps. There is a need to evolve Reps and be more impactful in our regions.
Question: Is this important for Mozilla?
[Arturo] We're going to have mentors and Reps specialized in their different contribution areas.
Question: How is RepsNext helping local communities?
[Guillermo] Our idea, what we're planning with the changes on RepsNext is to bring more people to the program. More people is more diversity, so we're trying to find new people, more people with new interests.
Question: What excites you about RepsNext?
[Faisal] We have resources for different types of community, for example if somebody needs hardware or somebody training material, a variety of things not just what we used to have. So it will open up more ways on how we can support Reps for more impactful events and making events more productive.
QMO: Firefox 48 Beta 3 Testday, June 24th
Hello Mozillians,
We are happy to announce that next Friday, June 24th, we are organizing Firefox 48 Beta 3 Testday. We'll be focusing our testing on the New Awesomebar feature, bug verifications and bug triage. Check out the detailed instructions via this etherpad.
No previous testing experience is required, so feel free to join us on #qa IRC channel where our moderators will offer you guidance and answer your questions.
Join us and help us make Firefox better! See you on Friday!
Tanvi Vyas: Contextual Identities on the Web
The Containers Feature in Firefox Nightly enables users to login to multiple accounts on the same site simultaneously and gives users the ability to segregate site data for improved privacy and security.
We all portray different characteristics of ourselves in different situations. The way I speak with my son is much different than the way I communicate with my coworkers. The things I tell my friends are different than what I tell my parents. I'm much more guarded when withdrawing money from the bank than I am when shopping at the grocery store. I have the ability to use multiple identities in multiple contexts. But when I use the web, I can't do that very well. There is no easy way to segregate my identities such that my browsing behavior while shopping for toddler clothes doesn't cross over to my browsing behavior while working. The Containers feature I'm about to describe attempts to solve this problem: empowering Firefox to help segregate my online identities in the same way I can segregate my real life identities.
With Containers, users can open tabs in multiple different contexts – Personal, Work, Banking, and Shopping. Each context has a fully segregated cookie jar, meaning that the cookies, indexeddb, localStorage, and cache that sites have access to in the Work Container are completely different than they are in the Personal Container. That means that the user can login to their work twitter account on twitter.com in their Work Container and also login to their personal twitter on twitter.com in their Personal Container. The user can use both mail accounts in side-by-side tabs simultaneously. The user won't need to use multiple browsers, an account switcher[1], or constantly log in and out to switch between accounts on the same domain.
Note that the inability to efficiently use "Contextual Identities" on the web has been discussed for many years[2]. The hard part about this problem is figuring out the right User Experience and answering questions like:
- How will users know what context they are operating in?
- What if the user makes a mistake and uses the wrong context; can the user recover?
- Can the browser assist by automatically assigning websites to Containers so that users don't have to manage their identities by themselves?
- What heuristics would the browser use for such assignments?
We don't have the answers to all of these questions yet, but hope to start uncovering some of them with user research and feedback. The Containers implementation in Nightly Firefox is a basic implementation that allows the user to manage identities with a minimal user interface.
We hope to gather feedback on this basic experience to see how we can iterate on the design to make it more convenient, elegant, and usable for our users. Try it out and share your feedback by filling out this quick form or writing to email@example.com How do I use Containers?
You can start using Containers in Nightly Firefox 50 by opening a New Container Tab. Go the File Menu and select the "New Container Tab" option. (Note that on Windows you need to hit the alt key to access the File Menu.) Choose between Personal, Work, Shopping, and Banking.
Notice that the tab is decorated to help you remember which context you are browsing in. The right side of the url bar specifies the name of the Container you are in along with an icon. The very top of the tab has a slight border that uses the same color as the icon and Container name. The border lets you know what container a tab is open in, even when it is not the active tab.
You can open multiple tabs in a specific container at the same time. You can also open multiple tabs in different containers at the same time:
Your regular browsing context (your "default container") will not have any tab decoration and will be in a normal tab. See the next section to learn more about the "default container"
Containers are also accessible via the hamburger menu. Customize your hamburger menu by adding in the File Cabinet icon. From there you can select a container tab to open. We are working on adding more access points for container tabs; particularly on long-press of the plus button.
How does this change affect normal tabs and the site data already stored in my browser?
The containers feature doesn't change the normal browsing experience you get when using New Tab or New Window. The normal tab will continue to access the site data the browser has already stored in the past. The normal tab's user interface will not change. When browsing in the normal context, any site data read or written will be put in what we call the "default container".
If you use the containers feature, the different container tabs will not have access to site data in the default container. And when using a normal tab, the tab won't have access to site data that was stored for a different container tab. You can use normal tabs along side other containers:What browser data is segregated by containers?
In principle, any data that a site has read or write access to should be segregated.
Assume a user logins into example.com in their Personal Container, and then loads example.com in their Work Container. Since these loads are in different containers, there should be no way for the example.com server to tie these two loads together. Hence, each container has its own separate cookies, indexedDB, localStorage, and cache.
Assume the user then opens a Shopping Container and opens the History menu option to look for a recently visited site. example.com will still appear in the user's history, even though they did not visit example.com in the Shopping Container. This is because the site doesn't have access to the user's locally stored History. We only segregate data that a site has access to, not data that the user has access to. The Containers feature was designed for a single user who has the need to portray themselves to the web in different ways depending on the context in which they are operating.
By separating the data that a site has access to, rather than the data that a user has access to, Containers is able to offer a better experience than some of the alternatives users may be currently using to manage their identities.Is this feature going to be in Firefox Release?
This is an experimental feature in Nightly only. We would like to collect feedback and iterate on the design before the containers concept goes beyond Nightly. Moreover, we would like to get this in the hands of Nightly users so they can help validate the OriginAttribute architecture we have implemented for this feature and other features. We have also planned a Test Pilot study for the Fall.
To be clear, this means that when Nightly 50 moves to Aurora/DevEdition 50, containers will not be enabled.How do users manage different identities on the web today?
What do users do if they have two twitter accounts and want to login to them at the same time? Currently, users may login to one twitter account using their main browser, and another using a secondary browser. This is not ideal, since then the user is running two browsers in order to accomplish their tasks.
Alternatively, users may open a Private Browsing Window to login to the second twitter account. The problem with this is that all data associated with Private Browsing Windows is deleted when they are closed. The next time the user wants to use their secondary twitter account, they have to login again. Moreover, if the account requires two factor authentication, the user will always be asked for the second factor token, since the browser shouldn't remember that they had logged in before when using Private Browsing.
Users may also use a second browser if they are worried about tracking. They may use a secondary browser for Shopping, so that the trackers that are set while Shopping can't be associated with the tasks on their primary browser.Can I disable containers on Nightly?
Yes, by following these steps:
- Open a new window or tab in Firefox.
- Type about:config and press enter.
- You will get to a page that asks you to promise to be careful. Promise you will be.
- Set the privacy.userContext.enabled preference to false.
Although the privacy.userContext.enabled preference described above may be present in other versions of Firefox, the feature may be incomplete, outdated, or buggy. We currently only recommend enabling the feature in Nightly, where you'll have access to the newest and most complete version.How is Firefox able to Compartmentalize Containers?
An origin is defined as a combination of a scheme, host, and port. Browsers make numerous security decisions based on the origin of a resource using the same-origin-policy. Various features require additional keys to be added to the origin combination. Examples include the Tor Browser's work on First Party Isolation, Private Browsing Mode, the SubOrigin Proposal, and Containers.
Hence, Gecko has added additional attributes to the origin called OriginAttributes. When trying to determine if two origins are same-origin, Gecko will not only check if they have matching schemes, hosts, and ports, but now also check if all their OriginAttributes match.
Containers adds an OriginAttribute called userContextId. Each container has a unique userContextId. Stored site data (i.e. cookies) is now stored with a scheme, host, port, and userContextId. If a user has https://example.com cookies with the userContextId for the Shopping Container, those cookies will not be accessible by https://example.com in the Banking Container.
Note that one of the motivations in enabling this feature in Nightly is to help ensure that we iron out any bugs that may exist in our OriginAttribute implementation before features that depend on it are rolled out to users.How does Containers improve user privacy and security?
The Containers feature offers users some control over the techniques websites can use to track them. Tracking cookies set while shopping in the Shopping Container won't be accessible to sites in the Personal Container. So although a tracker can easily track a user within their Shopping Container, they would have to use device fingerprinting techniques to link that tracking information with tracking information from the user's Personal Container.
Containers also offers the user a way to compartmentalize sensitive information. For example, users could be careful to only use their Banking Container to log into banking sites, protecting themselves from potential XSS and CSRF attacks on these sites. Assume a user visits attacker.com in an non-banking-container. The malicious site may try to use a vulnerability in a banking site to obtain the user's financial data, but wouldn't be able to since the user's bank's authentication cookies are shielded off in a separate container that the malicious site can't touch.Is there any chance that a tracker will be able to track me across containers?
There are some caveats to data separation with Containers.
The first is that all requests by your browser still have the same IP address, user agent, OS, etc. Hence, fingerprinting is still a concern. Containers are meant to help you separate your identities and reduce naive tracking by things like cookies. But more sophisticated trackers can still use your fingerprint to identify your device. The Containers feature is not meant to replace the Tor Browser, which tries to minimize your fingerprint as much as possible, sometimes at the expense of site functionality. With Containers, we attempt to improve privacy while still minimizing breakage.
There are also some bugs still open related to OriginAttribute separation. Namely, the following areas are not fully separated in Containers yet:
- Some favicon requests use the default container cookies even when you are in a different container – Bug 1277803
- The about:newtab page makes network requests to recently visited sites using the default container's cookies even when you are in a different container – Bug 1279568
- Awesome Bar search requests use the default container cookies even when you are in a different container – Bug 1244340
- The Forget About Site button doesn't forget about site data from Container tabs – Bug 1238183
- The image cache is shared across all containers – Bug 1270680
We are working on fixing these last remaining bugs and hope to do so during this Nightly 50 cycle.How can I provide feedback?
I encourage you to try out the feature and provide your feedback via:
- 2 minute survey
- Email firstname.lastname@example.com
- File a bug
Thanks to everyone who has worked to make this feature a reality! Special call outs to the containers team:
Andrea Marchesini
Kamil Jozwiak
David Huseby
Bram Pitoyo
Yoshi Huang
Tim Huang
Jonathan Hao
Jonathan Kingston
Steven Englehardt
Ethan Tseng
Paul Theriault
[1] Some websites provide account switchers in their products. For websites that don't support switching, users may install addons to help them switch between accounts.
[2] http://www.ieee-security.org/TC/W2SP/2013/papers/s1p2.pdf, https://blog.mozilla.org/ladamski/2010/07/contextual-identity/
[3] Containers Slide Deck
David Burns: The final major player is set to ship WebDriver
It was nearly a year ago that Microsoft shipped their first implementation of WebDriver. I remember being so excited as I wrote a blog post about it.
This week, Apple have said that they are going to be shipping a version of WebDriver that will allow people to drive Safari 10 in macOS. In the release notes they have created safari driver that will be shipping with the OS.
In addition to new Web Inspector features in Safari 10, we are also bringing native WebDriver support to macOS. https://t.co/PfwmkRIBIV— WebKit (@webkit) June 15, 2016
If you have ever wondered why this is important? Have a read of my last blog post. In Firefox 47 Selenium caused Firefox to crash on startup. The Mozilla implementation of WebDriver, called Marionette and GeckoDriver, would never have hit this problem because test failures and crashes like this would lead to patches being reverted and never shipped to end users.
Many congratulations to the Apple team for making this happen!
Yunier José Sosa Vázquez: Conoce los complementos destacados para junio
Como cada mes, les traemos de primera mano los complementos recomendamos para los usuarios de Firefox.
Anjana Vakil: I want to mock with you
This post brought to you from Mozilla's London All Hands meeting - cheers!
When writing Python unit tests, sometimes you want to just test one specific aspect of a piece of code that does multiple things.
For example, maybe you're wondering:
- Does object X get created here?
- Does method X get called here?
- Assuming method X returns Y, does the right thing happen after that?
Finding the answers to such questions is super simple if you use mock: a library which "allows you to replace parts of your system under test with mock objects and make assertions about how they have been used." Since Python 3.3 it's available simply as unittest.mock, but if you're using an earlier Python you can get it from PyPI with pip install mock.
So, what are mocks? How do you use them?
Well, in short I could tell you that a Mock is a sort of magical object that's intended to be a doppelgänger for some object in your code that you want to test. Mocks have special attributes and methods you can use to find out how your test is using the object you're mocking. For example, you can use Mock.called and .call_count to find out if and how many times a method has been called. You can also manipulate Mocks to simulate functionality that you're not directly testing, but is necessary for the code you're testing. For example, you can set Mock.return_value to pretend that an function gave you some particular output, and make sure that the right thing happens in your program.
But honestly, I don't think I could give a better or more succinct overview of mocks than the Quick Guide, so for a real intro you should go read that. While you're doing that, I'm going to watch this fantastic Michael Jackson video:
Oh you're back? Hi! So, now that you have a basic idea of what makes Mocks super cool, let me share with you some of the tips/tips/trials/tribulations I discovered when starting to use them.Patches and namespaces
tl;dr: Learn where to patch if you don't want to be sad!
When you import a helper module into a module you're testing, the tested module gets its own namespace for the helper module. So if you want to mock a class from the helper module, you need to mock it within the tested module's namespace.
For example, let's say I have a Super Useful helper module, which defines a class HelperClass that is So Very Helpful:# helper.py class HelperClass(): def __init__(self): self.name = "helper" def help(self): helpful = True return helpful
And in the module I want to test, tested, I instantiate the Incredibly Helpful HelperClass, which I imported from helper.py:# tested.py from helper import HelperClass def fn(): h = HelperClass() # using tested.HelperClass return h.help()
Now, let's say that it is Incredibly Important that I make sure that a HelperClass object is actually getting created in tested, i.e. that HelperClass() is being called. I can write a test module that patches HelperClass, and check the resulting Mock object's called property. But I have to be careful that I patch the right HelperClass! Consider test_tested.py:# test_tested.py import tested from mock import patch # This is not what you want: @patch('helper.HelperClass') def test_helper_wrong(mock_HelperClass): tested.fn() assert mock_HelperClass.called # Fails! I mocked the wrong class, am sad :( # This is what you want: @patch('tested.HelperClass') def test_helper_right(mock_HelperClass): tested.fn() assert mock_HelperClass.called # Passes! I am not sad :)
OK great! If I patch tested.HelperClass, I get what I want.
But what if the module I want to test uses import helper and helper.HelperClass(), instead of from helper import HelperClass and HelperClass()? As in tested2.py:# tested2.py import helper def fn(): h = helper.HelperClass() return h.help()
In this case, in my test for tested2 I need to patch the class with patch('helper.HelperClass') instead of patch('tested.HelperClass'). Consider test_tested2.py:# test_tested2.py import tested2 from mock import patch # This time, this IS what I want: @patch('helper.HelperClass') def test_helper_2_right(mock_HelperClass): tested2.fn() assert mock_HelperClass.called # Passes! I am not sad :) # And this is NOT what I want! # Mock will complain: "module 'tested2' does not have the attribute 'HelperClass'" @patch('tested2.HelperClass') def test_helper_2_right(mock_HelperClass): tested2.fn() assert mock_HelperClass.called
In short: be careful of which namespace you're patching in. If you patch whatever object you're testing in the wrong namespace, the object that's created will be the real object, not the mocked version. And that will make you confused and sad.
I was confused and sad when I was trying to mock the TestManifest.active_tests() function to test BaseMarionetteTestRunner.add_test, and I was trying to mock it in the place it was defined, i.e. patch('manifestparser.manifestparser.TestManifest.active_tests').
Instead, I had to patch TestManifest within the runner.base module, i.e. the place where it was actually being called by the add_test function, i.e. patch('marionette.runner.base.TestManifest.active_tests').
So don't be confused or sad, mock the thing where it is used, not where it was defined!Pretending to read files with mock_open
One thing I find particularly annoying is writing tests for modules that have to interact with files. Well, I guess I could, like, write code in my tests that creates dummy files and then deletes them, or (even worse) just put some dummy files next to my test module for it to use. But wouldn't it be better if I could just skip all that and pretend the files exist, and have whatever content I need them to have?
It sure would! And that's exactly the type of thing mock is really helpful with. In fact, there's even a helper called mock_open that makes it super simple to pretend to read a file. All you have to do is patch the builtin open function, and pass in mock_open(read_data="my data") to the patch to make the open in the code you're testing only pretend to open a file with that content, instead of actually doing it.
To see it in action, you can take a look at a (not necessarily great) little test I wrote that pretends to open a file and read some data from it:def test_nonJSON_file_throws_error(runner): with patch('os.path.exists') as exists: exists.return_value = True with patch('__builtin__.open', mock_open(read_data='[not {valid JSON]')): with pytest.raises(Exception) as json_exc: runner._load_testvars() # This is the code I want to test, specifically to be sure it throws an exception assert 'not properly formatted' in json_exc.value.message Gotchya: Mocking and debugging at the same time
See that patch('os.path.exists') in the test I just mentioned? Yeah, that's probably not a great idea. At least, I found it problematic.
I was having some difficulty with a similar test, in which I was also patching os.path.exists to fake a file (though that wasn't the part I was having problems with), so I decided to set a breakpoint with pytest.set_trace() to drop into the Python debugger and try to understand the problem. The debugger I use is pdb++, which just adds some helpful little features to the default pdb, like colors and sticky mode.
So there I am, merrily debugging away at my (Pdb++) prompt. But as soon as I entered the patch('os.path.exists') context, I started getting weird behavior in the debugger console: complaints about some ~/.fancycompleterrc.py file and certain commands not working properly.
It turns out that at least one module pdb++ was using (e.g. fancycompleter) was getting confused about file(s) it needs to function, because of checks for os.path.exists that were now all messed up thanks to my ill-advised patch. This had me scratching my head for longer than I'd like to admit.
What I still don't understand (explanations welcome!) is why I still got this weird behavior when I tried to change the test to patch 'mymodule.os.path.exists' (where mymodule.py contains import os) instead of just 'os.path.exists'. Based on what we saw about namespaces, I figured this would restrict the mock to only mymodule, so that pdb++ and related modules would be safe - but it didn't seem to have any effect whatsoever. But I'll have to save that mystery for another day (and another post).
Still, lesson learned: if you're patching a commonly used function, like, say, os.path.exists, don't forget that once you're inside that mocked context, you no longer have access to the real function at all! So keep an eye out, and mock responsibly!Mock the night away
Those are just a few of the things I've learned in my first few weeks of mocking. If you need some bedtime reading, check out these resources that I found helpful:
- An intro to mocking in Python on Toptal
- Mozilla dev Armen Z.G.'s blog post on better Python tests
I'm sure mock has all kinds of secrets, magic, and superpowers I've yet to discover, but that gives me something to look forward to! If you have mock-foo tips to share, just give me a shout on Twitter!
Chris Ilias: Who uses voice control?
Voice control (Siri, Google Now, Amazon Echo, etc.) is not a very useful feature to me, and wonder if I'm in the minority.
Why it is not useful:
- I live with other people.
- Sometimes one of the people I live with or myself may be sleeping. If someone speaks out loud to the TV or phone, that might wake the other up.
- Even when everyone is awake, that doesn't mean we are together. It annoys me when someone talks to the TV while watching basketball. I don't want to find out how annoying it would be to listen to someone in another room tell the TV or their phone what to do.
- I work with other people.
- If I'm having lunch, and a co-worker wants to look something up on his/her phone, I don't want to hear them speak their queries out loud. I actually have coworkers that use their phones as boomboxes to listen to music while eating lunch, as if no-one else can hear it, or everyone has the same taste in music, or everyone wants to listen to music at all during lunch.
The only times I use Siri are:
- When I am in the car.
- When I am speaking with others in a social setting, like a pub, and we want to look something up pertaining to the conversation.
- When I'm alone
When I saw Apple introduce tvOS, the dependence on Siri turned me off from upgrading my Apple TV.
Am I in the minority here?
I get the feeling I'm not. I cannot recall anyone I know using Siri for other anything than entertainment with friends. Controlling devices with your voice in public must be Larry David's worst nightmare.
Jen Kagan: day 18: the case of the missing vine api and the add-on sdk
i'm trying to add vine support to min-vid and realizing that i'm still having a hard time wrapping my head around the min-vid program structure.
what does adding vine support even mean? it means that when you're on vine.co, i want you to be able to right click on any video on the website, send it to the corner of your browser, and watch vines in the corner while you continue your browsing.
i'm running into a few obstacles. one obstacle is that i can't find an official vine api. what's an api? it stands for "application programming interface" (maybe? i think? no, i'm not googling) and i don't know the official definition, but my unofficial definition is that the api is documentation i need from vine about how to access and manipulate content they have on their website. i need to be able to know the pattern for structuring video URLs. i need to know what functions to call in order to autoplay, loop, pause, and mute their videos. since this doesn't exist in an official, well-documented way, i made a gist of their embed.js file, which i think/hope maybe controls their embedded videos, and which i want to eventually make sense of by adding inline comments.
another obstacle is that mozilla's add-on sdk is really weirdly structured. i wrote about this earlier and am still sketching it out. here's what i've gathered so far:
- the page you navigate to in your browser is a page. with its own DOM. this is the page DOM.
- the firefox add-on is made of content scripts (CS) and page scripts (PS).
- the CS talks to the page DOM and the PS talks to the page DOM, but the CS and the PS don't talk to each other.
- with min-vid, the CS is index.js. this controls the context menu that comes up when you right click, and it's the thing that tells the panel to show itself in the corner.
- the two PS's in min-vid are default.html and controls.js. the default.html PS loads the stuff inside the panel. the controls.js PS lets you control the stuff that's in the panel.
so far, i can get the vine video to show up in the panel, but only after i've sent a youtube video to the panel. i can't the vine video to show up on its own, and i'm not sure why. this makes me sad. here is a sketch:
Doug Belshaw: Why we need 'view source' for digital literacy frameworks
Apologies if this post comes across as a little jaded, but as someone who wrote their doctoral thesis on this topic, I had to stifle a yawn when I saw that the World Economic Forum have defined 8 digital skills we must teach our children.
In a move so unsurprising that it's beyond pastiche, they've also coined a new term:
Digital intelligence or "DQ" is the set of social, emotional and cognitive abilities that enable individuals to face the challenges and adapt to the demands of digital life.
I don't mean to demean what is obviously thoughtful and important work, but I do wonder how (and who!) came up with this. They've got an online platform which helps develop the skills they've identified as important, but it's difficult to fathom why some things were included and others left out.
An audit-trail of decision-making is important, as it reveals both the explicit and implicit biases of those involved in the work, as well as lazy shortcuts they may have taken. I attempted to do this in my work as lead of Mozilla's Web Literacy Map project through the use of a wiki, but even that could have been clearer.
What we need is the equivalent of 'view source' for digital literacy frameworks. Specifically, I'm interested in answers to the following 10 questions:
- Who worked on this?
- What's the goal of the organisation(s) behind this?
- How long did you spend researching this area?
- What are you trying to achieve through the creation of this framework?
- Why do you need to invent a new term? Why do very similar (and established) words and phrases not work well in this context?
- How long is this project going to be supported for?
- Is your digital literacy framework versioned?
- If you've included skills, literacies,and habits of mind that aren't obviously 'digital', why is that?
- What were the tough decisions that you made? Why did you come down on the side you did?
- What further work do you need to do to improve this framework?
I'd be interested in your thoughts and feedback around this post. Have you seen a digital literacy framework that does this well? What other questions would you add?
Note: I haven't dived into the visual representation of digital literacy frameworks. That's a whole other can of worms…
Get in touch! I'm @dajbelshaw and you can email me: firstname.lastname@example.com
Mozilla Open Policy & Advocacy Blog: A Step Forward for Net Neutrality in the U.S.
We're thrilled to see the D.C. Circuit Court upholding the FCC's historic net neutrality order, and the agency's authority to continue to protect Internet users and businesses from throttling and blocking. Protecting openness and innovation is at the core of Mozilla's mission. Net neutrality supports a level playing field, critical to ensuring a healthy, innovative, and open Web.
Leading up to this ruling Mozilla filed a joint amicus brief with CCIA supporting the order, and engaged extensively in the FCC proceedings. We filed a written petition, provided formal comments along the way, and engaged our community with a petition to Congress. Mozilla also organized global teach-ins and a day of action, and co-authored a letter to the President.
We're glad to see this development and we remain steadfast in our position that net neutrality is a critical factor to ensuring the Internet is open and accessible. Mozilla is committed to continuing to advocate for net neutrality principles around the world.
Daniel Stenberg: No websockets over HTTP/2
There is no websockets for HTTP/2.
By this, I mean that there's no way to negotiate or upgrade a connection to websockets over HTTP/2 like there is for HTTP/1.1 as expressed by RFC 6455. That spec details how a client can use Upgrade: in a HTTP/1.1 request to switch that connection into a websockets connection.
Note that websockets is not part of the HTTP/1 spec, it just uses a HTTP/1 protocol detail to switch an HTTP connection into a websockets connection. Websockets over HTTP/2 would similarly not be a part of the HTTP/2 specification but would be separate.
(As a side-note, that Upgrade: mechanism is the same mechanism a HTTP/1.1 connection can get upgraded to HTTP/2 if the server supports it – when not using HTTPS.)
There's was once a draft submitted that describes how websockets over HTTP/2 could've been done. It didn't get any particular interest in the IETF HTTP working group back then and as far as I've seen, there has been very little general interest in any group to pick up this dropped ball and continue running. It just didn't go any further.
This is important: the lack of websockets over HTTP/2 is because nobody has produced a spec (and implementations) to do websockets over HTTP/2. Those things don't happen by themselves, they actually require a bunch of people and implementers to believe in the cause and work for it.
Websockets over HTTP/2 could of course have the benefit that it would only be one stream over the connection that could serve regular non-websockets traffic at the same time in many other streams, while websockets upgraded on a HTTP/1 connection uses the entire connection exclusively.Instead
So what do users do instead of using websockets over HTTP/2? Well, there are several options. You probably either stick to HTTP/2, upgrade from HTTP/1, use Web push or go the WebRTC route!
If you really need to stick to websockets, then you simply have to upgrade to that from a HTTP/1 connection – just like before. Most people I've talked to that are stuck really hard on using websockets are app developers that basically only use a single connection anyway so doing that HTTP/1 or HTTP/2 makes no meaningful difference.
Sticking to HTTP/2 pretty much allows you to go back and use the long-polling tricks of the past before websockets was created. They were once rather bad since they would waste a connection and be error-prone since you'd have a connection that would sit idle most of the time. Doing this over HTTP/2 is much less of a problem since it'll just be a single stream that won't be used that much so it isn't that much of a waste. Plus, the connection may very well be used by other streams so it will be less of a problem with idle connections getting killed by NATs or firewalls.
The Web Push API was brought by W3C during 2015 and is in many ways a more "webby" way of doing push than the much more manual and "raw" method that websockets is. If you use websockets mostly for push notifications, then this might be a more convenient choice.
Also introduced after websockets, is WebRTC. This is a technique introduced for communication between browsers, but it certainly provides an alternative to some of the things websockets were once used for.Future
Websockets over HTTP/2 could still be done. The fact that it isn't done just shows that there isn't enough interest.Non-TLS
Recall how browsers only speak HTTP/2 over TLS, while websockets can also be done over plain TCP. In fact, the only way to upgrade a HTTP connection to websockets is using the HTTP/1 Upgrade: header trick, and not the ALPN method for TLS that HTTP/2 uses to reduce the number of round-trips required.
If anyone would introduce websockets over HTTP/2, they would then probably only be possible to be made over TLS from within browsers.
David Burns: Selenium WebDriver and Firefox 47
With the release of Firefox 47, the extension based version FirefoxDriver is no longer working. There was a change in Firefox that when Selenium started the browser it caused it to crash. It has been fixed but there is a process to get this to release which is slow (to make sure we don't break anything else) so hopefully this version is due for release next week or so.
This does not mean that your tests need to stop working entirely as there are options to keep them working.Marionette
Firstly, you can use Marionette, the Mozilla version of FirefoxDriver to drive Firefox. This has been in Firefox since about 24 as we, slowly working against Mozilla priorities, getting it up to Selenium level. Currently Marionette is passing ~85% of the Selenium test suite.
I have written up some documentation on how to use Marionette on MDN
I am not expecting everything to work but below is a quick list that I know doesn't work.
- No support for self-signed certificates
- No support for actions
- No support logging endpoint
- I am sure there are other things we don't remember
It would be great if we could raise bugs.Firefox 45 ESR or Firefox 46
If you don't want to worry about Marionette, the other option is to downgrade to Firefox 45, preferably the ESR as it won't update to 47 and will update in about 6-9 months time to Firefox 52 when you will need to use Marionette.
Marionette will be turned on by default from Selenium 3, which is currently being worked on by the Selenium community. Ideally when Firefox 52 comes around you will just update to Selenium 3 and, fingers crossed, all works as planned.
Robert O'Callahan: Nastiness Works
One thing I experienced many times at Mozilla was users pressuring developers with nastiness --- ranging from subtle digs to vitriolic abuse, trying to make you feel guilty and/or trigger an "I'll show you! (by fixing the bug)" response. I know it happens in most open-source projects; I've been guilty of using it myself.
I particularly dislike this tactic because it works on me. It really makes me want to fix bugs. But I also know one shouldn't reward bad behavior, so I feel bad fixing those bugs. Maybe the best I can do is call out the bad behavior, fix the bug, and avoid letting that same person use that tactic again.
Perhaps you're wondering "what's wrong with that tactic if it gets bugs fixed?" Development resources are finite so every bug or feature is competing with others. When you use nastiness to manipulate developers into favouring your bug, you're not improving quality generally, you're stealing attention away from other issues whose proponents didn't stoop to that tactic and making developers a little bit miserable in the process. In fact by undermining rational triage you're probably making quality worse overall.
Mitchell Baker: Expanding Mozilla's Boards
This post was originally published on the Mozilla Blog.
In a post earlier this month, I mentioned the importance of building a network of people who can help us identify and recruit potential Board level contributors and senior advisors. We are also currently working to expand both the Mozilla Foundation and Mozilla Corporation Boards.
The role of a Mozilla Board member
I've written a few posts about the role of the Board of Directors at Mozilla.
At Mozilla, we invite our Board members to be more involved with management, employees and volunteers than is generally the case. It's not that common for Board members to have unstructured contacts with individuals or even sometimes the management team. The conventional thinking is that these types of relationships make it hard for the CEO to do his or her job. We feel differently. We have open flows of information in multiple channels. Part of building the world we want is to have built transparency and shared understandings.
We also prefer a reasonably extended "get to know each other" period for our Board members. Sometimes I hear people speak poorly of extended process, but I feel it's very important for Mozilla. Mozilla is an unusual organization. We're a technology powerhouse with a broad Internet openness and empowerment mission at its core. We feel like a product organization to those from the nonprofit world; we feel like a non-profit organization to those from the Internet industry.
It's important that our Board members understand the full breadth of Mozilla's mission. It's important that Mozilla Foundation Board members understand why we build consumer products, why it happens in the subsidiary and why they cannot micro-manage this work. It is equally important that Mozilla Corporation Board members understand why we engage in the open Internet activities of the Mozilla Foundation and why we seek to develop complementary programs and shared goals.
I want all our Board members to understand that "empowering people" encompasses "user communities" but is much broader for Mozilla. Mozilla should be a resource for the set of people who care about the open Internet. We want people to look to Mozilla because we are such an excellent resource for openness online, not because we hope to "leverage our community" to do something that benefits us.
These sort of distinctions can be rather abstract in practice. So knowing someone well enough to be comfortable about these takes a while. We have a couple of ways of doing this. First, we have extensive discussions with a wide range of people. Board candidates will meet the existing Board members, members of the management team, individual contributors and volunteers. We've been piloting ways to work with potential Board candidates in some way. We've done that with Cathy Davidson, Ronaldo Lemos, Katharina Borchert and Karim Lakhani. We're not sure we'll be able to do it with everyone, and we don't see it as a requirement. We do see this as a good way to get to know how someone thinks and works within the framework of the Mozilla mission. It helps us feel comfortable including someone at this senior level of stewardship.
What does a Mozilla Board member look like
Job descriptions often get long and wordy. We have those too but, for the search of new Board members, we've tried something else this time: a visual role description.
Here is a short explanation of how to read these visuals:
- The horizontal lines speaks to things that every Board member should have. For instance, to be a Board member, you have to care about the mission and you have to have some cultural sense of Mozilla, etc. They are a set of things that are important for each and every candidate. In addition, there is a set of things that are important for the Board as a whole. For instance, we could put international experience in there or whether the candidate is a public spokesperson. We want some of that but it is not necessary that every Board member has that.
- In the vertical green columns, we have the particular skills and expertise that we are looking for at this point.
- We would expect the horizontal lines not to change too much over time and the vertical lines to change depending on who joins the Board and who leaves.
I invite you to look at these documents and provide input on them. If you have candidates that you believe would be good Board members, send them to the firstname.lastname@example.com mailing list. We will use real discretion with the names you send us.
We'll also be designing a process for how to broaden participation in the process beyond other Board members. We want to take advantage of the awareness and the cluefulness of the organization. That will be part of a future update.
The Mozilla Blog: Expanding Mozilla's Boards
In a post earlier this month, I mentioned the importance of building a network of people who can help us identify and recruit potential Board level contributors and senior advisors. We are also currently working to expand both the Mozilla Foundation and Mozilla Corporation Boards.
The role of a Mozilla Board member
I've written a few posts about the role of the Board of Directors at Mozilla.
At Mozilla, we invite our Board members to be more involved with management, employees and volunteers than is generally the case. It's not that common for Board members to have unstructured contacts with individuals or even sometimes the management team. The conventional thinking is that these types of relationships make it hard for the CEO to do his or her job. We feel differently. We have open flows of information in multiple channels. Part of building the world we want is to have built transparency and shared understandings.
We also prefer a reasonably extended "get to know each other" period for our Board members. Sometimes I hear people speak poorly of extended process, but I feel it's very important for Mozilla. Mozilla is an unusual organization. We're a technology powerhouse with a broad Internet openness and empowerment mission at its core. We feel like a product organization to those from the nonprofit world; we feel like a non-profit organization to those from the Internet industry.
It's important that our Board members understand the full breadth of Mozilla's mission. It's important that Mozilla Foundation Board members understand why we build consumer products, why it happens in the subsidiary and why they cannot micro-manage this work. It is equally important that Mozilla Corporation Board members understand why we engage in the open Internet activities of the Mozilla Foundation and why we seek to develop complementary programs and shared goals.
I want all our Board members to understand that "empowering people" encompasses "user communities" but is much broader for Mozilla. Mozilla should be a resource for the set of people who care about the open Internet. We want people to look to Mozilla because we are such an excellent resource for openness online, not because we hope to "leverage our community" to do something that benefits us.
These sort of distinctions can be rather abstract in practice. So knowing someone well enough to be comfortable about these takes a while. We have a couple of ways of doing this. First, we have extensive discussions with a wide range of people. Board candidates will meet the existing Board members, members of the management team, individual contributors and volunteers. We've been piloting ways to work with potential Board candidates in some way. We've done that with Cathy Davidson, Ronaldo Lemos, Katharina Borchert and Karim Lakhani. We're not sure we'll be able to do it with everyone, and we don't see it as a requirement. We do see this as a good way to get to know how someone thinks and works within the framework of the Mozilla mission. It helps us feel comfortable including someone at this senior level of stewardship.
What does a Mozilla Board member look like
Job descriptions often get long and wordy. We have those too but, for the search of new Board members, we've tried something else this time: a visual role description.
Here is a short explanation of how to read these visuals:
- The horizontal lines speaks to things that every Board member should have. For instance, to be a Board member, you have to care about the mission and you have to have some cultural sense of Mozilla, etc. They are a set of things that are important for each and every candidate. In addition, there is a set of things that are important for the Board as a whole. For instance, we could put international experience in there or whether the candidate is a public spokesperson. We want some of that but it is not necessary that every Board member has that.
- In the vertical green columns, we have the particular skills and expertise that we are looking for at this point.
- We would expect the horizontal lines not to change too much over time and the vertical lines to change depending on who joins the Board and who leaves.
I invite you to look at these documents and provide input on them. If you have candidates that you believe would be good Board members, send them to the email@example.com mailing list. We will use real discretion with the names you send us.
We'll also be designing a process for how to broaden participation in the process beyond other Board members. We want to take advantage of the awareness and the cluefulness of the organization. That will be part of a future update.


text:
Looking for a solid jumper? well this is it. This mare can jump, she is a 10 years old Appendix. 15.3 hands and has a heart of gold. Will jump anything…$4,500
Chico is truly an all around horse would be great in a lesson program or as a 4H or pony club horse. is very friendly perfect ground manners and comfy…$3,500
6 year old 15.2 hh bay OTTB gelding. He is as quiet as you can get. He is green and is not yet suitable for beginners, but he will be in the near future…$2,500
Jasmin is a pure Cartujano Andalusian stallion. He has beautiful gaits and would be anyone DREAM horse. He is the gentlest stallion you've ever met. Never…$25,000
Billy is a 4 year old, unraced (too big and slow) TB gelding by Afleet Alex currently standing 16.2 hands. Big, floaty, uphill mover that will do well…$7,000
Here is your next best friend! Sweet and ready to go! Black QH mare, not registered but paperwork showing her parents Midnight Rebel Man and Rebel Jane…$2,500
My Silhouette, barn name "Louie" is a lovely mover who is a powerful, bold, scopey and athletic jumper. Perfect auto changes, rhythmic, adjustable, and…$15,000
In your pocket Sweet and Stout 11 yr old gelding. 15.3 hds. Loads, ties, bathes, stands for farrier. Stocky and sound. Walk, Trot, canter. UTD on everything…SOLD

subset: commoncrawl


text:
0 of 1 people found the following review helpful
George's Cosmic Treasure Hunt,
Verified Purchase(What is this?)
This review is from: George's Cosmic Treasure Hunt (Hardcover)
I have not read the entire book yet, though I am being pressured to do so by a grandson, for whom the book was purchased. His life was put on hold once he started reading and I am told it is "awesome" - the highest acolade used by 11 year olds, I am informed.
Now I believeGeorge's Secret Key to the Universeis being "devoured" as avidly
Review Details
(35 customer reviews)
Location: England
Top Reviewer Ranking: 527,108


text:
Content not available in English. Sorry for the inconvenience
Comienza el I Certamen SantiAutor para Artista Noveles, un proyecto que nace de la colaboración entre SónaR Pub y la Concellería de Xuventude de Santiago de Compostela.
Apertura de puertas a las 21:30 h | Comienzo de los conciertos a las 22:00 h.
- Fátima - Nota Atlántica
- Pablo Navas Medina (YEYO)
- Adan Jorge
- Rubén Artabe
Entrada libre y gratuita hasta completar aforo.
Info available in Spanish and Galician. Sorry for the inconvenience.
Since 1999, the town of Silleda has held this festival promoting ham foreleg, one of the area's characteristic products.
NOTE. This information, is the expected for the year 2016. If you would like more information, please, contact firstname.lastname@example.com.
A characteristic festival beside the River Ulla, in the Agronovo Recreational Area (Vedra). A chub fishing competition is held at the same time.
On July 16, Melide celebrates the feast of El Carmen with a lot of emotion and devotion for the Saint, even though it is not a coastal town.
The Chaián Chub Festival reaches its 42th year in 2016 and includes the now-traditional cyprinid fishing competition, as well as a popular gastronomy festival and subsequent dance.
The XV edition of Festigal arrives: an outdoor space that unites entertainment spaces, ideas, literature, especially music and claim. Festigal keys: Music, culture, trends and diversity.
Santiago's Municipal Music Band presents its traditional concert, with a selection of music. More information available in Spanish and Galician.
Every year more than 1,500 people gather to savour the biggest paella made in Galicia with 1,000 kg of rice. The festival started in 2001 and has already been consolidated as an important event in the Municipality of Silleda's festive calendar.
From 1984 to date, every first weekend in August, the Municipality of Val do Dubra pays tribute to its residents who have emigrated and its visitors.
This is a very popular festival that is well established in the Municipality of Silleda'scalendar. Every year, more than 10,000 people gather together to savour around 2,000 portions of omelette and 1,000 litres of wine free of charge. The festival began to be held in 1989, reaching its 22nd year in 2010.
The "Festa do Galo Piñeiro e Mostra Cabalar," declared a Festival of Galician Tourist Interest in 2010, is held every year on the first weekend in August in the village of Pedrouzo (Arca).
The gastronomy festival par excellence in the municipality of Padrón, held on the first Saturday in August in the parish of Herbón. It started in 1978 and is now classified as a Festival of Galician Tourist Interest.
Festival featuring the promotion and tasting of ham, which is held on August 14 in the parish of Bermés (Lalín) and will reach its 16th year in 2014. Cured and roast ham is served, along with bread and wine.
The local holiday in honour of San Roque that is held in Melide in August.
Info available in Spanish and Galician. Sorry for the inconvenience.
San Caralampio is held in Melide on the second Sunday in September. This festival, also known as the Festival of the Drunks, has Bacchus reminiscences and is devoted to wine.
Lalín's feast day is held on the first Sunday after September 18th in honour of Our Lady of Sorrows. The festivities last for 5 days, since Monday and Tuesday are local holidays.
Info available in Spanish and Galician. Sorry for the inconvenience.
Info available in Spanish and Galician. Sorry for the inconvenience.


text:
The Chef's Table Dinner Series: Chez Pascal with Chef Matt Genuso
The Chef's Table Dinner Series
Join us for an intimate culinary experience. Guests have an opportunity to meet and enjoy a specially prepared menu by some of RI's top young talent.
Each dinner will be an expression of the individual chef's unique style and will represent seasonal, local and preserved ingredients.
Chez Pascal April 3, 6-8 pm
Chef Matt Genuso
Rhode Island native Matt Gennuso traveled far and wide to learn all he could about food, so that in the end he could return home to share his cuisine with Providence. Gennuso's journey began at the Culinary Institute of America. He spent one year in Holland honing his skills and then worked under notable chefs such as Chef Paul Bertolli of Oliveto in Oakland, California, and Tom Colicchio during his time at Gramercy Tavern in New York. In Boston, Gennuso worked at Hamersley's Bistro where he mastered his butchery skills—a first step toward charcuterie.
In 2003, back in his home state, Gennuso opened Chez Pascal, where he features Rhody produce on his French-inspired seasonal menu. In 2009, he started selling his sausages from a truck, which eventually turned into walk-up window and casual eatery called Wurst Kitchen that specializes in outstanding Rhode Island "saugies."
Tickets are $75 per person and must be purchased in advance. Seating is limited so make your reservation early.
Click here to register.
Wednesday, April 06
- Wednesday, October 05
Wednesday Walk-Arounds
Saturday, April 16
- Saturday, October 08
Saturday Strolls
Wednesday, May 04
- Monday, October 10
Stephen Procter Sanctuaries and Destinations: Clay Vessels in the Garden
Tuesday, May 31
- Tuesday, July 05
Archives and Collections Tour with Curator Margaret Whitehead
Wednesday, June 01
- Monday, October 10
Bristol Explorer Multi-Attraction Pass
Saturday, June 25
- Saturday, August 13
Summer Vacation Camp 2016
Upcoming events
Ranunculus are here!
(May 27, '16)
Spring is definitely in full swing here and already hinting at summer! It was so warm this week that the lovely spring blooms we've been anxiously awaiting buckled a bit with the first blast of heat. They have since recovered, but not without making our hearts skip a beat thinking they may go by […]
Springing into action
(May 06, '16)
Despite the wretched weather this week, we ushered in May with a flurry of activity. The volunteers helped us pot up 100 dahlias in preparation for planting out in the gardens next month. They also transplanted Cosmos and Zinnia seedlings that will eventually be planted in the Cutting Garden. We are trialing about a dozen […]
A Boy's Trip to Europe, 1869
(Apr 27, '16)
In 1869, 16-year-old Israel Pardee left his home in Hazleton, Pennsylvania, for a one-year educational journey through Europe, accompanied by his younger sister Anne. Israel (known in the family as Izzie) was Bessie McKee's older brother and became Marjorie Van Wickle's favorite Uncle. Izzie and Anne had joined the family of their father's friend, Dr. […]


text:
New York, NYUSA
August 22, 2013
Help support your Meetup
Meet other junglists and DnB fanatics in the NYC area. Also, catch up on the latest DnB parties, check out tunes or just talk about music.
10,370 Vegetarians & Vegans
7,183 Show-goers!
16,753 Friends
7,309 Members
4,142 Members
1,249 DJs and Fans
Meetup members, Log in
By clicking "Sign up" or "Sign up using Facebook", you confirm that you accept our Terms of Service & Privacy Policy


text:
|By Lori MacVittie
Article Rating:
|January 16, 2013 09:00 AM EST
Operators will likely need to become polyglots to manage modern architectures
For those of you who've ever lived in a household with non-native language speakers (whatever that native language may be) you probably experienced code-switching.
Code-switching is a linguistics term that refers to the act of switching between two or more languages in a single conversation. It's like starting off the conversation with a greeting in one language, switching to English for most of it, but using elements of the other language throughout the conversation. When our girls were learning English this happened quite frequently, with a sentence often beginning with "осторожный" (careful) and continuing on with an explanation of why some action was dangerous and ending with "ладно" (okay)?
Code-switching generally occurs in a sentence where it grammatically aligns. Thus the use of interjections and stand-alone phrases in one language to get the attention of a child make perfect sense.
CODE-SWITCHING in the DATA CENTER
Right now, if you're managing resources in an on-premise cloud (or traditional data center elements) along with an off-premise (aka public or virtual private) cloud you're probably doing a lot of "code-switching". Not just management systems, mind you, but even the languages used to interface with those systems.
Even if you're not using an off-premise cloud, but simply trying to automate systems in the data center (whether in a cloud or traditional) you may be code-switching as means to automate a process involving one or more data center infrastructure elements, say a firewall, a web server, and a load balancer.
For example, if you're using Apache you might be using Apache ODE, which requires you speak WS-BPEL 2.0 (which further requires you speak SOAP and XML). Your firewall and load balancer likely speak a SOAP/XML variant as well, but increasingly you may be required to speak a REST / JSON dialect to communicate with elements in the network.
Today, more than 73 percent of all APIs listed on the Programmable Web use REST, according to ReadWriteWeb. SOAP, on the other hand, holds a meager 17 percent of Programmable Web APIs.
In order to deploy an application completely you will most likely need to speak a variety of not only languages but dialects, as well. XML is highly flexible and the schemas used with SOAP are quite verbose while those used in conjunction with REST are fairly straightforward and comprising far fewer elements (literally and figuratively speaking).
And that's just three simple network elements in the data center. Add in even one off-premise cloud (and most enterprises are using two or three at this point, when counting SaaS) and the number of languages and dialects required for operators to automate a single deployment process increases significantly.While Amazon supports both SOAP and REST APIs for managing EC2,
The problems arising from this are not only in the skill sets required for operators to engage in devops, but in the maintaining of the tools used to automate the processes across multiple languages and systems. Irrespective of the language - be it RUBY or PERL or PHP - there may be specific libraries or modules required, depending on the version of the language you're using. For example, native XML support in PHP4 was fairly weak, but significantly improved in PHP5. And while RUBY includes XML support, it's noted for being horrendously slow (not an uncommon complaint of XML in general, depending on the size of the XML file and the parsing method used).
In other words, there's going to be a speed-bump somewhere along the way, no matter what directly you go. At some point, you're going to be required to speak another language in order to fully automate some process, somewhere.
This is one of the core arguments supported a standardized framework, for support of some cross-domain, cross-environment "stack" (think OpenStack or CloudStack) that can abstract aware from implementation and provide operators with a consistent means of managing not only network elements but applications and environments, as well.
Read the original blog entry...
More and more companies are looking to microservices as an architectural pattern for breaking apart applications into more manageable pieces so that agile teams can deliver new features quicker and more effectively. What this pattern has done more than anything to date is spark organizational transformations, setting the foundation for future application development. In practice, however, there are a number of considerations to make that go beyond simply "build, ship, and run," which changes ho...
Jun. 25, 2016 09:15 AM EDT Reads: 790
Gartner is now treating algorithms like they are some kind of innovative addition to the modern digital discussion. Presumably the brilliant minds there have some novel insight into algorithms and, yes, the Algorithm Economy that CIOs should sit up and take notice of. Not only are algorithms nothing new, but much of what Gartner is saying about them is obvious. The bigger picture here is that software continues to improve, and enterprises are becoming increasingly software-driven, in part bec...
Jun. 17, 2016 04:07 PM EDT Reads: 786
The Internet of Things is clearly many things: data collection and analytics, wearables, Smart Grids and Smart Cities, the Industrial Internet, and more. Cool platforms like Arduino, Raspberry Pi, Intel's Galileo and Edison, and a diverse world of sensors are making the IoT a great toy box for developers in all these areas. In this Power Panel at @ThingsExpo, moderated by Conference Chair Roger Strukhoff, panelists discussed what things are the most important, which will have the most profound...
Jun. 12, 2016 09:00 PM EDT Reads: 5,116
The Internet of Things (IoT) is growing rapidly by extending current technologies, products and networks. By 2020, Cisco estimates there will be 50 billion connected devices. Gartner has forecast revenues of over $300 billion, just to IoT suppliers. Now is the time to figure out how you'll make money – not just create innovative products. With hundreds of new products and companies jumping into the IoT fray every month, there's no shortage of innovation. Despite this, McKinsey/VisionMobile data...
Jun. 12, 2016 02:45 AM EDT Reads: 3,669
NHK, Japan Broadcasting, will feature the upcoming @ThingsExpo Silicon Valley in a special 'Internet of Things' and smart technology documentary that will be filmed on the expo floor between November 3 to 5, 2015, in Santa Clara. NHK is the sole public TV network in Japan equivalent to the BBC in the UK and the largest in Asia with many award-winning science and technology programs. Japanese TV is producing a documentary about IoT and Smart technology and will be covering @ThingsExpo Silicon Val...
Jun. 8, 2016 10:30 PM EDT Reads: 4,596
SYS-CON Events announced today that Men & Mice, the leading global provider of DNS, DHCP and IP address management overlay solutions, will exhibit at SYS-CON's 18th International Cloud Expo®, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. The Men & Mice Suite overlay solution is already known for its powerful application in heterogeneous operating environments, enabling enterprises to scale without fuss. Building on a solid range of diverse platform support,...
Jun. 8, 2016 06:45 PM EDT Reads: 4,118
Internet of @ThingsExpo, taking place June 7-9, 2016 at Javits Center, New York City and Nov 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with the 18th International @CloudExpo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world and ThingsExpo New York Call for Papers is now open.
Jun. 8, 2016 03:45 PM EDT Reads: 3,268
SYS-CON Events announced today that Catchpoint Systems, Inc., a provider of innovative web and infrastructure monitoring solutions, has been named "Silver Sponsor" of SYS-CON's DevOps Summit at 18th Cloud Expo New York, which will take place June 7-9, 2016, at the Javits Center in New York City, NY. Catchpoint is a leading Digital Performance Analytics company that provides unparalleled insight into customer-critical services to help consistently deliver an amazing customer experience. Designed...
Jun. 8, 2016 03:00 PM EDT Reads: 3,231
@DevOpsSummit taking place June 7-9, 2016 at Javits Center, New York City, and Nov 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with the 18th International @CloudExpo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world.
Jun. 8, 2016 01:00 PM EDT Reads: 4,409
Cloud Expo, Inc. has announced today that Andi Mann returns to 'DevOps at Cloud Expo 2016' as Conference Chair The @DevOpsSummit at Cloud Expo will take place on June 7-9, 2016, at the Javits Center in New York City, New York. "DevOps is set to be one of the most profound disruptions to hit IT in decades," said Andi Mann. "It is a natural extension of cloud computing, and I have seen both firsthand and in independent research the fantastic results DevOps delivers. So I am excited to help the g...
Jun. 8, 2016 11:00 AM EDT Reads: 3,690
Korean Broadcasting System (KBS) will feature the upcoming 18th Cloud Expo | @ThingsExpo in a New York news documentary about the "New IT for the Future." The documentary will cover how big companies are transmitting or adopting the new IT for the future and will be filmed on the expo floor between June 7-June 9, 2016, at the Javits Center in New York City, New York. KBS has long been a leader in the development of the broadcasting culture of Korea. As the key public service broadcaster of Korea...
Jun. 8, 2016 10:00 AM EDT Reads: 2,611
SYS-CON Events announced today that Addteq will exhibit at SYS-CON's @DevOpsSummit at Cloud Expo New York, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. Addteq is one of the top 10 Platinum Atlassian Experts who specialize in DevOps, custom and continuous integration, automation, plugin development, and consulting for midsize and global firms. Addteq firmly believes that automation is essential for successful software releases. Addteq centers its products a...
Jun. 8, 2016 09:45 AM EDT Reads: 2,586
In the rush to compete in the digital age, a successful digital transformation is essential, but many organizations are setting themselves up for failure. There's a common misconception that the process is just about technology, but it's not. It's about your business. It shouldn't be treated as an isolated IT project; it should be driven by business needs with the committed involvement of a range of stakeholders.
Jun. 8, 2016 02:15 AM EDT Reads: 3,648
SYS-CON Events announced today that FalconStor Software® Inc., a 15-year innovator of software-defined storage solutions, will exhibit at SYS-CON's 18th International Cloud Expo®, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. FalconStor Software®, Inc. (NASDAQ: FALC) is a leading software-defined storage company offering a converged, hardware-agnostic, software-defined storage and data services platform. Its flagship solution FreeStor®, utilizes a horizonta...
Jun. 7, 2016 07:00 PM EDT Reads: 4,230
With major technology companies and startups seriously embracing IoT strategies, now is the perfect time to attend @ThingsExpo 2016 in New York and Silicon Valley. Learn what is going on, contribute to the discussions, and ensure that your enterprise is as "IoT-Ready" as it can be! Internet of @ThingsExpo, taking place Nov 3-5, 2015, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with 17th Cloud Expo and will feature technical sessions from a rock star conference faculty ...
Jun. 7, 2016 04:30 PM EDT Reads: 5,970
SYS-CON Events announced today that Column Technologies will exhibit at SYS-CON's @DevOpsSummit at Cloud Expo, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. Established in 1998, Column Technologies is a global technology solutions provider with over 400 employees, headquartered in the United States with offices in Canada, India, and the United Kingdom. Column Technologies provides "Best of Breed" technology solutions that automate the key DevOps principal...
Jun. 7, 2016 04:15 PM EDT Reads: 3,391
SYS-CON Events announced today that SoftLayer, an IBM Company, has been named "Gold Sponsor" of SYS-CON's 18th Cloud Expo, which will take place on June 7-9, 2016, at the Javits Center in New York, New York. SoftLayer, an IBM Company, provides cloud infrastructure as a service from a growing number of data centers and network points of presence around the world. SoftLayer's customers range from Web startups to global enterprises.
Jun. 7, 2016 01:00 PM EDT Reads: 2,772
SYS-CON Events announced today that IBM Cloud Data Services has been named "Bronze Sponsor" of SYS-CON's 18th Cloud Expo, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. IBM Cloud Data Services offers a portfolio of integrated, best-of-breed cloud data services for developers focused on mobile computing and analytics use cases.
Jun. 7, 2016 12:30 PM EDT Reads: 2,816
SYS-CON Events announced today that Anexia will exhibit at SYS-CON's 18th International Cloud Expo®, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. Anexia offers high-quality customized managed hosting solutions for SaaS and IaaS companies. The company was founded in 2006 in Klagenfurt, Austria. Today, it has additional offices in Vienna, Graz, Munich, Cologne and New York City to serve numerous international customers.
Jun. 7, 2016 11:00 AM EDT Reads: 2,947
SYS-CON Events announced today that Stratoscale, the software company developing the next generation data center operating system, will exhibit at SYS-CON's 18th International Cloud Expo®, which will take place on June 7-9, 2016, at the Javits Center in New York City, NY. Stratoscale is revolutionizing the data center with a zero-to-cloud-in-minutes solution. With Stratoscale's hardware-agnostic, Software Defined Data Center (SDDC) solution to store everything, run anything and scale everywhere...
Jun. 7, 2016 08:00 AM EDT Reads: 2,950


text:
Personalise your news, save articles to read later and customise settings
If you have trouble accessing our login form below, you can go to our login page.
The Age
Previous thumbnails
Next thumbanils
Street atrist "Adnate" (in bright green) stands beneath a mural in Hosier Lane. He is contributing to Melbourne's "Paint Up" project. Photo: Justin McManus
Please enter your friend's name
Please enter a valid email address
Please enter your name
Please enter your comment
Thank You.
Your email has been sent.
Prime Minister Malcolm Turnbull officially launches the Liberal 2016 Federal Campaign with wife Lucy and Liberal party members Julie ...
Fairfax Media's talented team of artists, illustrators and cartoonists give us their very own humorous version of the news of the day.
A large crowd is seen attending the Equal Love Rally for Marriage Equality! June 25, 2016 in Melbourne, Australia. The rally is aiming to ...
Fairfax photographer James Brickwood documents NRL player Mark Hughes' inspirational Kokoda trek for the Mark Hughes Foundation.The Kokoda ...
It's a full house at 5pm every evening during Ramadan, as families gather to share plates to celebrate the annual festival and the breaking ...
The Alps are a winter wonderland with more of a wintry blast that brought snow down to 500m in Victoria today.
Sorry. An error occurred when submitting the form.
Please try again later.
Canberra Times Winter photo competition 2016 (gallery 1)
Cartoons by Cathy Wilcox
Simon Letch
Glastonbury style: gumboots and shorts galore
Andrew Dyson
Street artist "Adnate" works on a mural in Hosier Lane as a contribution to Melbourne's "Paint Up" Project. The laneway is now a celebrated landmark for it's mix of urban creative and political art. A series of images is presented by The Age photographer Justin McManus.
Skip to:
Compare record low loan rates from 3.66% p.a. now
More Info
Plus receive $50 credit when you apply online. T&Cs apply
Check it Out
Compare 0% p.a. balance transfer credit cards now
Find Out More
Samsung Galaxy phones on the Telstra 4G network
Compare now
Plans and prices for Apple's latest iPhones available now


text:
More American Brittany Puppies and Dogs for sale.
Brittany Male Puppy $600 Outback Kennels in Kensington, Kansas
STUD SERVICE Spice Rum Brittanys in Kalkaska, Michigan
BEAUTIFUL BRITTANY PUPPIES Big D Kennels in Lebanon, Tennessee
Brittany Spaniel Fowl Play Gundogs in Houston, Texas
BRITTANY PUPS READY JULY 1ST-EXCELL... Winkelman's Gun Dogs in Rockford, Illinois
Brittany Puppies - Great Lines, Pro... Cove Mountain Kennels in Pocatello, Idaho
Great Puppies, Both Sire and Dam AKC fie... Morningside Brittanys in Bangor, Pennsylvania
American Brittany Puppies for Sale Ruby and Pearl Kennel in Hillsboro, Texas
Brittany Puppy W. Greene Kennel in Murrayville, Georgia
Brittany Pups for Sale Windmill Kennels in Burley, Idaho
Brittany Puppies: 2 Females Outback Kennels in Kensington, Kansas
AKC Brittany Puppies Pond Hill German Shorthairs in Hazleton, Pennsylvania
AKC Male Brittany Pup Buggytown Bird Dogs in Barnesville, Georgia
AKC Brittany pups, All colors and R... Draco Kennels in Hardinsburg, Kentucky
BRITTANY PUPPIES Hideaway Kennels in Calhan, Colorado
Brittany Pups Chukar Country Brittany's in emmett, Idaho
Upcoming Litter of 2x NGDC Sired Premium... Royal Flush Farms in Hollidaysburg, Pennsylvania
Male Brittany Puppy for Sale Cimarron Trails Brittany's in State College, Pennsylvania
AKC Brittany Spaniel Pups Ready Jul... R & D Farms, kennel, and guide service in Bristol, Tennessee
Updated Brittany Spaniel add Walnut Ridge Quail Farm and Kennel in Pulaski, Tennessee
BRITTANY PUPPIES 1 Week Old !!!!! Big D Kennels in Lebanon, Tennessee
Puppies for sale- Whelped 7-15-2016 Spice Rum Brittanys in Kalkaska, Michigan
PREMIUM FEMALE PUP AVAILABLE!!! Smokingun Brittanys in Connelly Springs, North Carolina
Brittany Puppies- Champion parents New Horizon Brittanys in Massachusetts
Upcoming litter - American Brittany pups Foxfire Hill in Crystal Lake, Illinois
Brittany puppies Rajin Kennel in Merna, Nebraska
SOLD Started female Brittany, One ... Godfather Gundogs in Elizabeth, Colorado
2 Brittany litters available from f... Winkelman's Gun Dogs in Rockford, Illinois
AKC American Brittany Puppies Winnen's Brittanys in Wattsburg, PA, Pennsylvania
Brittany Puppies, org & wht, $450.0... Raegan's Brittanies in Suwanee, Georgia
Brown's Point Brittanys Announces our Newest Litter - April 23,2013 - American Brittanys in Brown's Point, Washington - Browns Point Brittanys
Our adult females are active hunting dogs, always ready to go! When the hunting or fishing duffel bags come out, our dogs are right there. And to ensure that they go, sometimes they climb inside the bag, because they are sure the bag is going and then they wait.
Our Brittany's are high energy, great at point and retrieving, inquisitive, attentive and very willing to please. They are great in field, fast, and range well, wherever that might be, whether it be hunting for Pheasants, Quail, Chukars or Ducks. They are so "birdie," as puppies, they would point moths fluttering around the outside lights. They are comfortable on land, in canoes and in the water.
As great as they are in the field, they are just as fabulous in the home. They are playful, have sweet dispositions, and are loyal companions.
Our two main goals in every litter is to raise, healthy, happy, inquisitive, and well socialized puppies that are ready to start their life's adventure in a loving, active and attentive home. Our most recent litter, born on April 23, 2013 was 10 puppies, 4 girls and 6 boys. Our puppies stay with us until the 9th or 10th week to ensure they are ready to go to their new homes. We have a few puppies available, to find out more info, please contact Ross or Deb Brown.
Ad location: Brown's Point, Washington
Ad created: Apr 30, 2013
Contact Information
Contact Name: Ross And Deb Brown
206-799-7779Contact breeder through email
Browns Point Brittanys Breeder Information


text:
Deer Moose Hunting, Dogs & Horsemen Vs. Railroad Train, Huge Antique 1880s Print
This item has been shown 0 times.
Deer Moose Hunting, Dogs & Horsemen Vs. Railroad Train, Huge Antique 1880s Print:
An Anxious Moment
1880s Antique Print
Large Double Folio Size
You are offerding on an extra-large original antique print from an 1880snewspaper. It showsan anxious moment as a pack of hunting dogs (foxhound dogs) and horsemen follow a deer or moose doe onto a railroad track as the train approaches.
The page measures approximately23 x 15.5 inches (58 x39cm). It has one vertical fold through the middle, where it was bound into the original journal over 100 years ago. The fold lines are clean without any darkening. The print was tipped into the binding, so the fold does not have holes. There is unrelated text on the back of these pages, but it does not show through the rich paper. PLEASE NOTE: The pagehas a smudge line on the upper right margin that faintly reaches into about an inch of the sky area. Back then, the paper was high quality and the print and illustrations are crisp. Based on the date, it is probably the rotogravure printing technique.
This is NOT a recent copy or modern reproduction, but a GENUINE antique item.
All prints are delivered in an archival sleeve and rolled in a sturdy tube. I stand behind my products and offer a FULL REFUND if you think the product does not match the description in any way.
I will combine shipping on multiple purchases (charging only the single highest shipping cost on US and Canada shipments; and reduced overall cost to other countries). Lost parcels and items damaged during shipping are at your own risk unless you opt for insurance. Contact me for international rates.
Deer Moose Hunting, Dogs & Horsemen Vs. Railroad Train, Huge Antique 1880s Print:
1650 Ger Jollain - Jahel Commits Murder Judges 4 - Coloured Copper Engraving
1627 Lauro Circus Salustii Amphitheathre - Rome Italy Handcol Folio Engraving
Andy Warhol Tiger #2, Lithography, Professionally Framed/museum Glassed & Coa
Lot Of 3 Vintage Prints (2) Annie Benson Muller (1) Charlotte Becker
Julian Trevelyan Buffaloes 1968 Signed Art Print Etching, With Aquatint
Ken Keeley Large "times Square" Framed Canvas Private Seller


text:
Skip Navigation
Log in with Facebook
North Vietnam is a very picturesque picture of the landscapes and the hill tribes.
No comments yet.
Be the first to comment on this photo!
To comment on photos, you need to login first.
Have you forgotten your username or password? Retrieve Your Login Details
491 United Kingdom Photos
232 Netherlands Photos
3 Gabon Photos
4 Saint Vincent and the Grenadines Photos
324 Bolivia Photos
61 Ukraine Photos
362 Indonesia Photos
92 Denmark Photos
234 Greece Photos


text:
Science Stuff
Keywords: Science, Physics, Humor, Medical Science
About StumbleDNA ListDNA
Imagining the Tenth Dimension - A Book by Rob Bryanton
Imagining the Tenth Dimension, a new way of thinking about time, space, and string theory, a book by Rob Bryanton
Symphony of Science
[David Attenborough] How could one species turn into another? [Richard Dawkins] How is it that we find ourselves surrounded by such complexity, such elegance? [Bill Nye] The genes of you and me They're all made of DNA We're all made of the same chemi...
Einstein for Everyone
Einstein for Everyone
Brian Greene on string theory
TED Talks Physicist Brian Greene explains superstring theory, the idea that minscule strands of energy vibrating in 11 dimensions create every particle and force in the universe.
Popular Science - A Nerd's Guide to Reading
A Nerd's Guide to Reading


text:
Star Tracks
Leather plus attitude equals one hot shoot. Plus: Gwen & Gavin, Jessica Simpson, Paris Hilton and more
Credit: Green/x17
Updated: Friday Feb 18, 2005 | 06:00 AM EST
More from PEOPLE
Latest News!
- San Antonio Man Buys Pools For West Side Families After Facebook User Mocks Photo of Kids' Makeshift Swimming Pool
- Read the Cover Story: Mystery in Idaho: Little Boy Lost
- Newly Single Ariel Winter Shares Naked Bathtub Photo: 'Relax Everyone I'm Wearing Lady Bit Pasties'
- Human Body Parts Wash Ashore Rio Beach Near Olympic Volleyball Site
- Ariana Grande Reunites with Her Victorious Co-Stars – See the Pic!


text:
1108 N Waterloo St
Jackson, MI 49202
707 Edgewood St
Jackson, MI 49202
1607 Blakely Ave
Jackson, MI 49202
931 Orchard Pl
Jackson, MI 49203
Instantly get anyone's arrest record from this new website, Truthfinder.com
6067 Brooklyn Rd # 11
Jackson, MI 49201
1911 E Ganson St
Jackson, MI 49202
6150 Horton Rd
Jackson, MI 49201
709 S Blackstone St
Jackson, MI 49203
moving in nearby! SIGN UP NOW
6531 W Michigan Ave
Jackson, MI 49201
7824 Springport Rd
Parma, MI 49269
235 W Washington Ave Apt A
Jackson, MI 49201
804 19th St
Jackson, MI 49203
1110 Lansing Ave
Jackson, MI 49202
13996 Bohne Rd
Grass Lake, MI 49240
You can cancel your alerts at any time.
Our database shows there are 550 registered Sex Offenders in Jackson County, MI, a ratio of 34.31 Sex Offenders per 10,000 residents. This is higher than the national average of 15.22 Sex Offenders per 10,000 residents. Records indicate there are 10,418 incarcerated Sex Offenders in Michigan, as well as 14 offenders whose location is unknown in Michigan due to the Sex Offenders being transient or their address being unmappable.
*No representation is made that the person listed here is currently on the state's offenders registry. All names presented here were gathered at a past date. Some persons listed might no longer be registered offenders and others might have been added. Some addresses or other data might no longer be current. Owners of Homefacts.com assume no responsibility (and expressly disclaim responsibility) for updating this site to keep information current or to ensure the accuracy or completeness of any posted information. Accordingly, you should confirm the accuracy and completeness of all posted information before making any decision related to any data presented on this site.


text:
And Cain said "Blood of my Blood, Soul of my Soul, partaketh of the Blood of the mortals, who art like the swine and chattel of the earth."
Ye Blue Bookes of danjerus andde koruptynge knowlidge, the finalle tombe of Five Great Wizzards.
A very ornate and very old looking spell book. Chock full of spells, most of which are unreadable by any magic user. The ones that can be read, unfortunately, don't have the affect the mage is looking for.
Something lives in the fog in a certain region and travels with the fog. Kidnaps or kills, or is simply heard and "felt". ... fog is rising, heed the warnings the elders spoke!