Android and iOS Support
TL;DR: We’re retiring Selenium’s own AndroidDriver and iPhoneDriver in favour of any of Selendroid, iosdriver and Appium. If you’re using one of Selenium’s own mobile drivers, please evaluate one of these alternatives.
The longer version:
In 2007, Steve Jobs announced the iPhone and changed the mobile Web from a curiosity to something the mainstream wanted and used. Current trends suggest that mobile Web usage will surpass desktop usage in the not too distant future. Which is a long way of saying the mobile Web is going to be a big part of the future of your sites and that it’d be an extremely wise idea to test them on mobile devices.
The Selenium project responded to the rise of the mobile web by working to produce WebDriver implementations for both iOS and Android. The first lines of the iPhoneDriver (which also worked on the iPad) were added to the project early in 2009. The AndroidDriver was added in June 2010, and was primarily developed by engineers at Google. To this day you can download the official Android SDK and find “Google WebDriver” as one of the optional extras you can download.
After the initial work on the mobile drivers, something interesting happened. Experimental extensions and modifications to the drivers were made outside of the selenium project. The first one of these that I was involved with was “nativedriver“. This took the novel approach of allowing users to interact with the native UI of the phone, be it Android or iOS, using the familiar WebDriver APIs. The first time I saw it, I thought it was madness, but the engineers working on it soon convinced me that it made sense. And guess what? They were right.
Sadly, after proving the idea was viable and workable, the NativeDriver project ran out of steam, but it set the scene for three projects that have taken the idea and run with it to create remarkably capable pieces of mobile testing software: Selendroid, iosdriver and Appium. All three of these allow a tester familiar with the WebDriver APIs to test mobile apps on iOS and Android. Not only native ones, but also hybrid or pure web-based ones too. They’ve recently been joined by the Windows Phone WebDriver, which allows testing of mobile web apps on WinPhone 8.
All of these projects have something in common: they’re far more active, more capable and have pushed further than the equivalent code in the main selenium project. In fact, some of the members of the selenium team that contributed to both AndroidDriver and iPhoneDriver are now also working on those other projects. There’s work being done to maintain interoperability between the different drivers, allowing users to chose which framework is most appropriate for their needs without fear of their tests needing major rework.
This means that keeping the existing Android and iPhone drivers within the Selenium project isn’t helping our users. The alternatives are better, and keeping “official” drivers within the project muddies the water. Worse, the selenium developers are slow at making fixes to those drivers, which is incredibly frustrating for everyone involved. Because of this, the Selenium project has deleted the code for those drivers from its repository and we recommend you evaluate and use one of the alternatives.
Of course, the code will still live in our repo’s history, so if you’d like to build them yourself, then it’s still possible. The last version with the iPhoneDriver is ef9d578, and the last one with the Android source is 00a3c7d. We’ve uploaded a version of the AndroidDriver built from that revision to the downloads page to save you having to do so yourself.
These changes do not mean that we don’t support mobile as a project. It just means that we support the best implementations of mobile WebDriver, and those aren’t written as part of the Selenium project.
Tags
Categories
Selenium Hangout 3 Recap
Here is a recap of our most recent Selenium Hangout where we answered a grab bag of questions ranging from how to use Selenium within your existing workflow down to nitty-gritty details around performance and deprecated functions.
Be sure to tune into our Twitter feed to find out details about our next Hangout.
And if your question didn’t get answered, we encourage you to hop on IRC and ask it there. Not sure what that means or how to do it? Then read this.
Panel
David Burns (@AutomatedTester)
Dave Haeffner (@TourDeDave)
Jim Evans (@jimevansmusic)
Kevin Menard (@nirvdrum)
Timeline
00:00 – 05:50
Preamble and Introductions
05:51 – 18:09
Question 1 – For a team getting started with Selenium what are some typical workflows for how product code is built, and Selenium tests built, as well as for when product code is modified and Selenium test modified?
18:10 – 34:15
Question 2 – Recommendations for testing responsive design?
34:15 – 37:44
Question 3 – Was VerifyText removed?
37:45 – 46:20
Question 4 – Why is IE9 slow and hard to use and recommendations for alleviate this?
46:21 – 50:11
Question 5 – ChromeDriver2 seems less robust than it’s predecessor, thoughts on this?
50:12 – 53:39
Question 6 – The Selenium documentation is out of date, how can I contribute a fix for this?
53:40 – 54:31
How to help out with the Selenium Conference?
Links mentioned
How to get involved with the Selenium Conference
Where to contribute to Selenium Documentation
Tags
Categories
Selenium Hangout 2 Recap
This is a recap from the most recent Selenium Hangout (a.k.a. The World’s Best Selenium Meetup). For info on future meetups, follow them on Twitter.
Thanks to all who attended and tuned into the last Selenium Hangout where we talked about Selenium 3! Below is a write-up of the meetup, the video, and relevant links we mentioned. And to access all meetup videos you can go here.
Panel
David Burns (@AutomatedTester)
Dave Haeffner (@TourDeDave)
Kevin Menard (@nirvdrum)
Simon Stewart (@shs96c)
Video
Minutes
00:00 – 05:04
Goal and items for today’s conversation
Feedback review from last meetup
Intros
05:05 – 07:34
API changes
Packaging
Gradual approach to phasing out Selenium RC
Support for Selenium IDE HTML Suite running
07:35 – 09:55
Selenium Builder, how it will replace Selenium IDE, and when
09:56 – 11:30
Firefox Driver 2 release (a.k.a. “M day”)
11:31 – 12:00
Tasks required to complete WebDriver W3C standard
12:01 – 14:30
Upgrade concerns for enterprise users of Selenium
Recommended watching: Jason Leyba’s talk at SeConf about upgrading Selenium at Google
Reasons why companies should make the jump
14:31 – 14:55
Why we need browser vendors to help
Why the W3C standard makes sense
14:56 – 21:40
Lessons learned and challenges found when a large scale practitioner upgraded from RC to WebDriver
Things they would like to see cleaned in Selenium 3
A nod in support of Selenium RC as a separate download
Simon attempts a joke
21:41 – 25:15
Other changes in Selenium 3
– all or nothing upgrade
– exception handling (changing from status codes to status strings)
– how commands are getting sent across the wire
– philosophy behind approach to Selenium RC approach
25:16 – 27:29
Mobile support in Selenium 3
27:30 – 37:05
Firefox Driver and Firefox OS
Recommended watching: Jonathan Griffin & David Burns’ talk at SeConf on Firefox Driver/Marionette
Creating a common set of Desired Capabilities
Recommended watching: David Burns’ talk at SeConf on adding mobile gestures to WebDriver
37:06 – 38:20
Documentation
38:21 – 49:40
Brief history of Selenium project
Recommendation for RC users to look at the stable and brilliant new and shiny
Plan for Selenium RC in depth and rough timeline
Another recommendation to watch Jason Leyba’s talk at SeConf about upgrading Selenium at Google
49:41 – 50:45
Encouragement for folks to hop on Selenium IRC chat channel (especially if your question wasn’t asked/answered)
Recommended reading: Elemental Selenium’s write-up on what IRC is, how to use it, and how to connect to the Selenium IRC chat channel
50:46 – 51:45
Where to submit feedback and request topics for future meetups
Tags
Categories
Mobile WebDriver
Although the WebDriver APIs started life as just a mechanism for automating web browsers, over the past few years it has been extended to also work on mobile devices. Projects such as Appium, iosdriver, and Selendroid have all shown that this approach works, and works well. On the Web, if you start using Selenium WebDriver with one browser (Firefox, for example), it’s easy to switch out the browser for another one (such as Internet Explorer or Chrome). It’d be nice to have a similar option for mobile, switching from one automation framework for Android to another.
As part of the Selenium 3 work, we have started working on a test suite to help ensure this level of interop between appium and iosdriver, and appium and selendroid. To kick start the process, the primary authors of each of those tools, as well as others including David Burns representing the Marionette project (Mozilla’s implementation of WebDriver for Firefox and Firefox OS) and Simon Stewart, the lead of the Selenium project, have spent the past two days locked in a small room in Mozilla HQ, London. They’ve taken this time to work out the areas where each of their projects didn’t align and agreed on a way to ensure a level of interoperability. There was only a minimal quantity of blood and tears, but plenty of hard work.
The agenda for the past two days can be found here, and the minutes are also available.
As we speak, work has started on a shared test suite, hosted in a repo in the selenium project’s Google Code page. Please, feel free to come along and join in!
Tags
Categories
The Road to Selenium 3
Selenium 2 was released in July 2011. It’s now two years old, and what a couple of years it’s been! The WebDriver APIs, which were the major addition in Selenium 2, are now the basis for a W3C standard, and there are implementations written and supported by Google, Mozilla and Opera. There have been 34 releases, with official support for Java, C#, Python, Ruby and Javascript, and the community has stepped in to provide bindings for Perl, PHP and others. There have been 57 different people authoring changes in the code base, and countless more participating in the online forums, offering help and advice.
While all this has been happening, the world has moved on, and now it’s time for the Selenium project to look to the future. It’s with great pleasure that I can now say that we’re working towards Selenium 3.
We aim for Selenium 3 to be “a tool for user-focused automation of mobile and web apps”.
What does this mean? For mobile users, the Selenium project will be hosting a suite of tests to facilitate interoperability between the many different projects available that are extending the WebDriver API to also cope with mobile. Developers from projects such as Appium, ios-driver and selendroid will be working on the suite of tests to enable this.
We’ll also be working on making the technology behind Selenium as stable and capable as possible. For this reason, Selenium 3 will see the removal of the original Selenium Core implementations, and consequently we’ll be deprecating the RC APIs too. The old versions will still be available as a separate download, but active development will cease, except for very urgent fixes. We will still be providing an implementation of the RC APIs backed by WebDriver, so you can continue running your existing tests, but now would be a great time to make the move to using the WebDriver APIs directly.
For those of you exporting your tests from IDE and running the HTML suites, we’ll provide an alternative runner that allows you to continue running those tests too, though it’ll be backed by the same “WebDriver-backed” RC implementation as offered by the main download. Again, the original implementation will be available as a download, but it will no longer be actively developed once we release 3.0.
Our current plan is to start shipping 3.0 by Christmas this year: it’s going to be a lot of fun!
Tags
Categories
A Smattering of Selenium #157
Trying to find every excuse not to cut the grass … including apparently closing some browser tabs.
- Interoperability – Standardized Test Information Interchange has me so full of ‘meh’ as to be hilarious. Commercially driven standards rarely are and/or I am just too much of an open source person to accept this model for standards development
- Licensing in a Post Copyright World – important
- How to Make Async Requests in PHP is php specific in its solution, but has some interesting bits about socket establishment that applies to other ones as well
- Adding Comments to JSON feels like a hack. Buts a clever hack.
- Maven Release Plugin: The Final Nail in the Coffin takes great joy in removing part of the maven environment from their workflow. And really, who doesn’t?
- Open Sourcing a Python Project the Right Way is nice … though of course, as with everything else these days, it has some Github specific isms. You can do it the right way with hg and bitbucket of course… and that is disclaimed in the article
- Headless Watir using both HTTPUnit and PhantomJS
- Implementing HTTP Status Codes in WebDriver, Part 2: Achievement Unlocked – umm, part 2?
- PhantomJS + Plugins + AWS + BrowserMob Proxy – proxy all the things! Including headless things.
- Mastering the Craft is a good reminder, but also, eBay has its own customized version of eclipse? Guessing this is one of those ‘at scale’ solutions
Tags
Categories
A Smattering of Selenium #156
Brain fried from PyCon Canada 2013 and ‘some’ browser tab is misbehaving which means its time to start closing some of these.
- Patchwork seems like an awesome idea, but at the same time, I’ve had to work in heavily monkey-patched RoR apps before…
- Evolving syntax is PHP specific in its examples, but the ideas transfer
- Roslyn + Selenium: Scripty C# Powering Browser Automation – some C# voodoo?
- It’s like 10000 knives when all you need is a Spoon – or specifically, this particular spoon which is yet-another-android-automation-tool. See comments for a bit of discussion re Appium which seems to be the currently best marketed solution in this space
- Planet generator has absolutely nothing to do with automation, but is just cool
- TestSpicer could be cool if it is massively flushed out
- Compatibility changes in IE11 Preview is going to break things I fear, for instance the readyState stuff?
- PyCon Canada 2013 decks are now up
- Implementing WebDriver HTTP Status Codes, Part 1: Challenge Accepted – is interesting in that it uses Fiddler
- Links are not buttons. Neither are DIVs and SPANs – this, a million times.
Tags
Categories
The World’s Best Selenium Meetup
Note from Adam: This is a guest post from Dave Haeffner who, along with David Burns hatched this idea at SeConf2013.
Selenium Meetups are great, but…
Have you ever wanted to attend a Selenium Meetup but there’s not one near you? Or maybe there is but something’s come up and you can’t make it out that night? Or maybe the meetup near you struggles to get good speakers and have a consistent schedule? [Note from Adam; like, say, the Toronto one…]
We can do better
Well, what if there were a way to attend a meetup regardless of location?
And what if each meetup you attended was lined with core maintainers of the Selenium project?
And if you missed it, what if the whole thing was recorded and available for you to review at your leisure?
Well, now you can.
The World’s Best Selenium Meetup
Introducing Selenium Hangout — the world’s best and most accessible Selenium meetup. An entirely online meetup that leverages Google Hangouts and live streaming to YouTube. All meetups will be recorded and posted online afterwards.
Each meetup will contain a small panel of people from the Selenium Community (e.g. core committers, automation practitioners, etc.) and they will discuss various topics (TBD).
How to attend
Simply follow the SeleniumHangout Twitter account to find out more.

- The slippery slope isn’t automation related, but if your employer does these things I’d suggest logging a bug and then finding an ethical job
- Why Package Signing is not the Holy Grail – crypto / security is hard. Also, I have a signed package for you to install…
- PHP and Async requests with file based sessions could be a way to speed up a PHP site. Which in turn reduces the amount of time your scripts take to run
- Canadipsum, eh? just because. (eh)
- Using CodedUI testautomation without UIMap files brings Page Objects to CodedUI
- Continuous Delivery Workshop With Neal Ford (@Neal4D) – a Retrospective – yup, the hard part is not the technical bit, but the people parts
- librarian-puppet says You can all stop using git submodules now which is good enough for me
- Highlighting the element before any clicks: A foray into the AbstractEventListener — the event listener stuff is something I need to sort out.
- phpci is built specifically for php apps, and doesn’t pretend to have the features something like jenkins does
- Beware subclassing Ruby core classes – there are likely parallels in other languages as well.
Tags
Categories
A Smattering of Selenium #153
A Sunday Smattering? Sure!
- Solution to the Selenium with Firefox 22 Issues and How to Report Issues – Open Source is hard. Supporting Open Source’s infrastructure is harder — by a large margin
- frequests – asyncronous HTTP Requests; not sure where I would use this, but…
- why I don’t touch crypo – again, don’t. touch. crypto
- Five reasons why you should quote attribute values in HTML5 – for the record, you should do this in HTML 4 as well.
- All the ‘Write The Docs session videos — a conference I couldn’t afford to attend, and likely don’t have the time to watch the videos now
- Automated Testing of HTML5 Canvas Applications with Selenium WebDriver – more and more important…
- Solving window.onbeforeunload nasty prompts
- pytest-poo for when your tests are, erm, crappy
- Tada! Here is SlimerJS! – like PhantomJS but for Gecko. I think.
- Did I select the right element? is a neat trick for highlighting things — even if the escaping of the code didn’t seem to survive formatting
Tags
Categories
A Smattering of Selenium #154
Apparently today’s ‘wait for an email’ task is to whittle down the smattering queue some more.
- I won’t even pretend that FOAAS has to do with automation, but makes me laugh. Also, depending on how crappy your place of work is, it might not be SFW
- PHP RFC: Importing namespaced functions is interesting if you are writing your scripts in a Functional manner. In PHP. In a future where it gets accepted and implemented.
- Measuring Web Page Load Times using JMeter — and read the response articles too for clarification / elaboration
- I kinda like that Se suites are making their way into large projects such as Moodle’s functional-test-suite repo. But at the same time it worries me when it hasn’t had a commit in 10 months. Suites should likely change even more than the app code it exercises
- jasmine tactics screencast — on the long list of tools I should learn
- Introducing the Mogotest Jenkins Plugin – hurray for more pipeline integration points
- The DOM isn’t slow, you are. — set the phasers on snark, and then read it anyways.
- Cross-Browser, Event-based, Element Resize Detection – edges are sharp.
- There is No ROI in Social Media Marketing – read this, and now read it again swapping in Functional Automation everywhere
- Now Available: Pocket Guide to Colour Accessibility could, in theory, be translated into a set of ‘rules’ to validate pages against since we can the colour of elements and their computed css values.
Tags
Categories
A Smattering of Selenium #152
40-ish minutes until midnight eastern so that counts as two days in a row, right? Right?
- Improving jenkins execution times by common sense — common sense. sadly lacking most days.
- How to make test automation more effective? is useful up until the pitch at the end. So read until you get to that.
- Data Structures for PHP Devs: Trees – non-trivial data structures are non-trivial
- Writing clean WebDriver test suites for “duplicate” functionality by parameterizing on page objects – I especially like the usage of ‘might’ at the top
- dalek-internal-webdriver – what’s a day without a JS webdriver implementation?
- Antialiasing 101 – I kinda think that automators should just spend a day reading this site rather than reddit
- RSpec 2.14 is released!
- HTTP/2 Status Update – Ugh.
- PHP 5.5: Generators – You know, with yesterday’s phpenv I’m almost tempted to make some of my stuff PHP 5.5…
- Program Like a Machinist – hurray for understanding the motorcycle example!
Tags
Categories
A Smattering of Selenium #151
Almost a month after the last one. Though it did nice to have it at 150 when people go to the blog … but a greater number is nicer.
- So I was trying to find Requests for PHP whilst talking to the grumpy programmer and he pointed me out to Guzzle which looks equally cool
- Can you optimize list(genexp) is one of those geeky language internals things that could be handy to have in your back pocket
- Slightly Snarky GWT Debug ID FAQ – c’mon, when have you seen a more blatantly ‘put this in the smattering’ title than this?
- phpenv could be useful. And could be I mean ‘holy crap this is useful’ — but then again, I do actually need 3 different versions of PHP locally. YMMV
- Pain killing the pingponger’s decease is by their own admission not stable, but is a nice temporary solution. And illustrates why you should learn your tools — if they didn’t know about custom annotations and their runners in JUnit they would have missed this.
- Yet another JS testing framework has grown a webdriver tentacle – karma-webdriver-launcher
- I barely understand a word of Method Combinators in CoffeeScript which is often a sign I should include something
- How are JavaScript files being served and how many are there? is interesting … even if I don’t understand what/where he has put all this HAR information so one could reproduce this on their one data
- Statically Recompiling NES Games into Native Executables with LLVM and Go – $entity help us if we ever need to do this level of ridiculousness to drive browsers, but holy wow its cool.
- Remember I said I should just auto-include all of Raymond Hettinger’s SO answers? Well, here’s another one – Python importing class attributes into method local namespace
Tags
Categories
A Smattering of Selenium #150
Yup, this smattering has very little to do with Selenium, but… 150!
- Referencing DOM from JS: there must be a DRYer, safer way is a nice ‘here is where I started, and here is how I ended up where I am’ post which can be stolen into other languages / frameworks other than in Backbone
- Hash lookup in Ruby, why is it so fast? is not something I was wondering, but now I know why.
- Nobody understands the GIL – in any language.
- Resource Locator Discussion – namespace all the things!
- How to Survive the Coming Test Automation Zombie Apocalypse is abso-freaking-lutely awesome
- Blackhole proxy to block all external calls is a snippet that came out of SeConf this week
- Filter a list into two parts. Ouch. My brain just broke. (But generators do that to me.)
- What you need to know about dates and times in computing could be useful. If one kindles.
- SSL Helpers is a couple python scripts for manipulating certificates
- storyautomation seems to have a number of decent posts. Of course, they are around RC so I was hesitant to link to it, but it looks like the ideas could transpose up to WebDriver
Tags
Categories
A Smattering of Selenium #149
Too. Many. Tabs.
Tags
Categories
A Smattering of Selenium #148
Gotta start this up again…
Tags
Categories
Curious to know how we picked speakers for the 2013 SeConf? Read on…
This is a guest post by Marcus Merrell, one of the organizers of the 2013 Selenium Conference.
Selenium/Webdriver has kept my family fed since 2007. Since I’ve never committed a line of code to this magical project, I thought the least I could do was spend a few hours helping put SeConf 2013 together. When they asked for a volunteer to put the speaker program together, I was thrilled to step forward!
Ultimately, I decided on a more conventional approach than straight-up dictatorship–and I can only credit the 5 awesome people on the committee and their ruthless adherence to the principle that “data wins”. I wanted a mix of hard-core browser techs, language-binding mavens, and people who ultimately made their living keeping a large variety of clients happy. And Simon–always Simon. I left myself out of the voting, because these are the experts’ experts: I figured the best thing I could do was ensure a smooth process and remove the burdens of book-keeping.
Here they are, the People You Can Blame:
– Dave Hunt, Mozilla
– Jim Evans, Salesforce.com
– Santiago Suarez-Ordoñez, Sauce Labs
– Jari Bakken, The Matrix
– Simon Stewart, Mt Olympus
I don’t know if it was beginner’s luck, but there was zero drama. These folks are all pros, and we’ve put together a hell of a great conference for Boston.
We had 24 slots to fill, but only ~45 submissions, and without the variety of topics we wanted. Specifically, we were dismayed by the low number of submissions from female presenters. Given a high proportion of female testers in the industry, we believed their voice was under-represented. The call was extended in part to attempt to correct this, and ended up netting us ~20 more submissions in total.
With the proposals all gathered in one place (thanks, Ashley!), I then set about trying to find “themes” in the submissions. Several leapt out immediately–lots of case studies showed up from large household-name companies that I knew people would find interesting. Some deep-dives appeared, describing the inner workings of browser implementations or talking about a new tool-set people might find interesting.
Another theme I saw, a blend of the previous two, were the Best Practices–people who wanted to talk about processes for applying disparate tool sets to the problems we face every day. I believe these talks have the broadest appeal, and are a primary driver of attendance. We also had enough mobile offerings to put together a “bloc”, which will consume a whole afternoon.
Simon suggested “blind auditions” for the selection process, and everyone loved the idea. Voting would take place not knowing anything about the speaker outside of hints left in their abstract. Since we had extended the call to invite submissions from female presenters, we therefore believed this would “correct” for that bias. It should at least remove all doubt that any speaker was chosen specifically for their gender.
I created a Google spreadsheet with a separate tab for each of these themes. Each tab contained only a few columns–the title, abstract, “notes to organizers” (if it was relevant), and one column for each person on the committee to vote. I did not include author bios, and if someone’s name showed up in anywhere else, I redacted it. I did, however, leave in speaker’s company. I figured if I saw two talks, “Success and Failure at Google” and, “Continuous Integration with Selenium at Bob’s House of HTML and Gumbo”, it would be completely reasonable to make the decision based on the company.
My thinking was, rather than have each person go through each talk individually, all these folks would have to do is read a paragraph and assign a number 1-5 (1=want, 5=don’t want). That way they would rank the talks in terms of the best subjects for that particular theme, thereby making sure just about anyone would have a good “path” through the conference. The committee was given a short deadline (1 week!) to fill out the voting columns, after which we’d sync up on the phone.
Somehow we managed to get people from California, Texas, Florida, the UK, and Norway into the same Google Hangout at the same time. We averaged the scores into a column in the spreadsheet, and Simon expertly sorted, manipulated, and color-coded the rows. As I said, we had 24 slots to fill, so Simon just drew a line: every talk in every theme that scored below a 2 was “in”. This left us with around 10 talks–we all agreed on two points: a) those talks were awesome, and b) we needed more.
Where does this leave us? With 2 days of Track A and one day of Track B. Given 8 presentations per track per day, that leaves us with an entire day of “open” talks for Track B. Be sure to sign up right when you get there–these slots went really fast last year, and will probably go fast again. We also will have a day of workshops on four different topics, with two in the morning and two in the afternoon.
We’d like people’s feedback on how the conference “flows” this year. As I said, we wanted someone with just about any background and interest to be able to find a path through this conference, so I’d like to hear whether or not we achieved it.
…and I hope to see you all in Boston! (PS: Tickets are going fast!).
Tags
Categories
A Smattering of Selenium #147
My. Get. Productive. I know! I’ll push out a smattering. Oh. …
- Python for Ruby Programmers is a pretty good deck, with the requisite snark at the end that you can safely ignore.
- Me @ Selenium Camp 2013 is Ivan’s mini-experience-report from SeCamp and has his slides on GhostDriver
- Using pip in production? pip install : Lightspeed and Bulletproof is a useful trick which I know I’ve done variants of with java and ruby in the past
- SeConf speakers are up — and the list looks really good
- Interfaces or Abstract Classes? is marketing fodder, but its the best kind of fodder since its actually useful. For those of us still working through PHP.
- I forgot about this semantic war in the whole three weeks since it happened…
- Android UI Design Pattern in practice is not only useful, but I like the format…
- Continuous Deployment: The Dirty Details – slide 18, 36, 42, 83, 102 are the killer slides. 102 is the killer-est slide and is where I would enter a semantic debate with the fine folks at Etsy over whether they are doing Continuous Deployment or Continuous Delivery
- Could CSS3 be making sites that are not testable? – New standards making the life of automators more incredibly hard? Never!
- Python – verify a PNG file and get image dimensions
Tags
Categories
A Smattering of Selenium #146
Happy ‘productivity destructive week’ — otherwise known as March break.
- How to Accept Self-Signed SSL Certificates in Selenium 2 — or you could use ‘real’ certificates that are trusted by the browser by default. If you are using self-signed certificates to ‘save money’ and you spend 3 hours making it work, you are not saving money anymore
- JockeyJS seems like it could be useful
- Dear every-js-widget-library-author, You can’t create a button
- If you are using PHP, then The Grumpy Programmer’s PHPUnit Cookbook should be added to your reading pile. Thankfully he doesn’t touch on the built-in WebDriver stuff but the ToC still looks relevant to what we do
- WordPress Performance Optimization is just cool — and could provide tricks for your non-WordPress apps too
- Single-Session Development is something I don’t do — but can appreciate the geek-ness of this
- JUnit’s evolving structure shows what the, erm, evolving structure of JUnit and has the killer line of ‘Programmers should be forced to wear their systems’ package-structures on their tee-shirts.’
- Basic Authentication With the BrowserMob Proxy, wow, that’s an annoying edge-case
- Breaking Down Amazon’s Mega Dropdown – ugh, because mouse events weren’t hard enough without menus tracking and rendering based on its position
- If you are intro RSpec, then RSpec Next Steps is going to be for you. Even if it does use a horrid html-based deck format (use the left/right arrow keys to navigate)
Tags
Categories
A Smattering of Selenium #145
Alice Finch builds massive LEGO Hogwarts from 400,000 bricks starts out at awesome and goes somewhere further down the scale when you get to the photo that shows scale.
- Models of Automation — really, who reading this hasn’t had the conversation described in there in one of its variants
- Stop Moving So I Can Click You Dammit! – illustrates the only acceptable place for Thread.sleep()
- Using Realistic Data in Unit Testing and AngelaSmith: Creating Test Data is a two-for for the C# crowd — though the ideas resonate with everyone else
- How to handle common components with Page Object Model? — I tend to use Inheritance, though am experimenting with Composition. The right solution is likely ‘both’
- Dear Nic, Should we log directly? illustrates the good and bad of unix pipes
- How foreach actually works was found via a snarky tweet, but is great
- Introducing the HTML5 Hard Disk Filler&tm; API is hilarious. And the next salvo in the WebKit vs mono-culture battle
- HTML’s New Template Tag – Standardizing Client-Side Templating — look! More HTML5 madness! And no automation suggestions / gotchas. But HTML5 Rocks is a great site anyways
- Why your web app should be responsive — I’m coming to dislike the term ‘responsive’, though agree with the sentiment. Now, how does your WebDriver [or Watir] scripts change in order to handle this?
- Nyan Cat RSpec Formatter is outstandlingly silly. And should be applied to all your RSpec runners. Immediately.
Tags
Categories
A Smattering of Selenium #144
Real Canadians watch curling instead of hockey.
- jsPerf is a performance oriented sandbox
- The Myth Of Convention Over Configuration – hint: its curation over configuration. And since this is how frameworks work…
- sublimetext_indentxml is a sublime text plugin to indent xml — yes, originality counts with plugin naming
- Introducing Boxen – Boxen feels a lot like Vagrant, but for Macs? Maybe?
- Checking for Technical Requirements in a Sign-up Process — woah, this would be a pain to automate
- office_docs looks like it might help parse and inspect ms office docs your app generates. Or not. Dunno.
- The Future of Perl (5) proves that the Se gang isn’t the only one to completely botch naming and versioning. 😀
- Tortoises, Teleporting Turtles, and Iterators is pretty geek
- Don’t Use Automatic Image Sliders or Carousels, Ignore the Fad – and Reason #4 is they are a pain in the ass to automate since the state is always in flux
- The Continuous Delivery Maturity Model has some interesting ideas, but that it is presented as a ‘maturity model’ is fail all the way down.
Tags
Categories
A Smattering of Selenium #143
If you had anything interesting last week I should have seen, you’ll have to resend it to me or @seleniumhq — things were a bit crashy.
- So … Opera switching to WebKit. That doesn’t mean you can write off automation with Opera though. Tragedy of the WebKit Commons
- Introducing ChemistryKit — a Ruby version of Saunter is another self-serving link.
- Automated local accessibility testing using WAVE and WebDriver is a post I had been waiting awhile for
- How Did the Duck Hunt Gun Work? because, you know you wanted to know. Unless you are too young. Kids…
- Start Writing More Classes got lots of twitter love. And an outstanding url.
- I’ve been thinking about documentation recently… The Principled Documentation Manifesto
- Tesla Model S REST API takes WebDriver to a whole new level
- A Browser Automation Standard is kinda amusing that the location is ‘Mountain View’ but David was broadcasting from ~ 8600 km away
- HTML5 Tutorial: Geolocation because this won’t be a pain to deal with…
- I think I like the diagram at Continuous Delivery vs Continuous Deployment but would suggest the top labels should be ‘Auto or Manual’
Tags
Categories
A Smattering of Selenium #142
Its a Wiggle your brain kind of morning…
- Automated Web Testing Is Hard is the launch announcement of ChemistryKit
- Watir-WebDriver with GhostDriver on OSX: headless browser testing — the WebDriver version of this would be very, very similar to this.
- jQuery 1.9.1 Released isn’t interesting from a new jQuery perspective, but the migrate plugin is. Likely old news, but was new to me…
- GRASP (object-oriented design) ‘is really a mental toolset’
- How Not to Design Pairwise Software Tests is even more useful when paired (pun intended) with…
- Using Data Driving Wisely
- The Importance of the DOM has a lot of stuff that my not-in-gear brain is capable of processing, but…
- Postel’s Principle is a Bad Idea. Sacrilege! Oh, wait, there is a patch.
- A brief chronology of SSL/TLS attacks can’t be automated, but good automation is to know what needs to be looked at by a human
- The Framework Superclass Anti-Pattern — for the record, my frameworks ‘require’ you have adapters to prevent lock-in. Oh, and they are Open Source…
Tags
Categories
A Smattering of Selenium #141
Its -12 Celsius plus windchill out. Why the heck is the office air conditioning on. Feel like I need a Mr. Rogers cardigan or something.

- I don’t know NUnit or TeamCity so don’t know if Using TeamCity and NUnit to Start WebServer, Run Selenium Tests and Stop WebServer is useful or just a rehash of common knowledge. But here you are anyways.
- paratest-selenium is another parallel phpunit solution. I really want an official one.
- Why Everyone (Eventually) Hates (or Leaves) Maven is not Maven bashing [he says so in the 3rd last paragraph].
- Writing Testable Frontend Javascript Part 1 – Anti-patterns and their fixes — looking to carve out a niche for the next couple years for yourself? This is it. And Canvas [which is JS…]
- The SeleniumCamp 2013 program is out. Of course, its in Russian but…
- Writing a Neo4j Puppet module for fun and profit is I think how a lot of trial stuff is going to be distributed. And Puppet is fun.
- Have I mentioned that this automation thing is hard? No? How about What is the Execution Context & Stack in JavaScript?. Still think its easy?
- Automated Testing: From “Testing” Activity to “Development” Activity is the sort of epiphany you will see more and more I think. Unsure whether this is a good, bad or just factual trend.
- About building a framework? Its in! How to make a basic test framework in C#
Tags
Categories
A Smattering of Selenium #140
Buckets!
- I suspect that scanner-backed-by-selenium belongs in the ‘with great power comes great responsibility’ bucket
- ios-driver is in the ‘wouldn’t it be nice if Apple provided this’ bucket
- Selenium WebDriver utility for determining when page has finished rendering is in the ‘ADF specific’ bucket’
- I suspect JSErrorCollector is in the ‘already indirectly linked to’ bucket. If not then its in the ‘FF only’ bucket
- Using a business readable language for browser automation is in the ‘bdd/atdd hype’ bucket. But is also in Haskell which is kinda interesting for an Se article
- reality is expensive: a better way of thinking about mock objects – Yup. ‘Fake bucket implementation’ bucket.
- The bits in Android’s tablet quality page would be even nicer if Android wasn’t in the ‘openly hostile to automate’ bucket.
- Data Attributes Rock – As Both Css and Javascript Know Them — HTML5’s data attributes are firmly in the ‘raindrops on roses and whiskers on kittens’ bucket.
- Stop Using Story Points gets added to the ‘read the comments as well’ bucket. Also the ‘this is how we accrue automation debt, kids’ bucket.
-
. Oh, and the ‘woohoo! I already do this stuff’ bucket.
Tags
Categories
A Smattering of Selenium #139
Posting from the past into the future. Or something… (its a scheduled post).
- webdriverjs-with-jasmine appears appropriately named since it claims to be A standalone (includes standalone Selenium server (30Mo) + includes Jasmine) working example of a test with WebDriverJS and Jasmine.
- Similar to the above, but with Drupal and Behat – Classic
- How I[he] send notifications to the build breakers. using twillio
- On Code Review comes from the Food For Thought department
- Orc is a model driven orchestration tool for the deployment of application clusters. Sounds cool.
- upgrading hacked dependencies — doncha hate when you do this?
- WAVE will tell you have well you do against their accessibility heuristics. Its no guarantee of course, but its a start.
- And why is it no guarantee? See Things I learned by pretending to be blind for a week.
- Dear SpeakerDeck; your embed method doesn’t work with WordPress. So here is a link to So, You Want to Be a Front-End Engineer?
- I was bored and experimenting with Py.Test fixtures here — and then got schooled in the comment section on how to actually do it.
Tags
Categories
A Plan to Drop Firefox 3.x Support
Tags
Categories
Selenium Conf 2013: Call for Papers and Early Bird Tickets
As we have done every year, we’re pleased to announce that a batch of early bird tickets to the Conference is on sale now, even before the talks have been finalized. You can get your ticket(s) by visiting http://seconf2013.eventbrite.com/. There are only 45 early bird tickets available at the special rate of $299, and they are only available until February 4th, so act now! After that the regular price of $350 will be in effect for all tickets. You’ll also notice that tickets to our workshop day are for sale as well. These cost $75 and entitle you to attend a full day of Selenium workshops on Monday June 10th.
More information on the conference is available at http://www.seleniumconf.org/, and we are still accepting speaker proposals. We’re looking forward to seeing you in June!
Tags
Categories
A Smattering of Selenium #138
<insert snark here>
- Debugging For Testers — they don’t teach this in testing school. Actually, there is a testing school…
- A million times this!! That’s not BDD, that’s just Cucumber
- Faster Websites: Crash Course on Web Performance — all three hours of video
- Continuous Integration of iOS Projects using Jenkins, CocoaPods, and Kiwi
- Clearing IE’s Caches – Not as simple as it appears is another one of those things that gives Jim headaches.
- Speaking of things that give Jim headaches; Revisiting Native Events in the IE Driver. Fun, fun, fun.
- We’re Doing It Wrong! What DevOps Needs to Learn in Order to Scale Up. is pretty good, but wow I dislike this slide system.
- why GNU grep is fast – The key to making programs fast is to make them do practically nothing
- Squash feels kinda like a wrapper about ‘git blame’ coupled with a log monitor, but still an interesting concept.
- Writing faster WebDriver tests isn’t necessary making scripts faster as it is about a clever abuse of the JS Executor
Tags
Categories
A Smattering of Selenium #137
Whoops, missed a couple days… ah well.
- MOAR ELEMENTS!!! the <main> element
- Dependency injection != Inversion of Control is useful reading. And the Waffle example is pretty funny.
- Not sure yet how I feel about this feature in the page-object gem.
- Waiting for an application to be fully loaded has some more examples of using a ‘proper’ [not implicit] waiting strategy.
- Most of us are not using Se for HVAT, but knowing the terminology, etc. can’t hurt – An Overview of High Volume Automated Testing
- The Exceptional Beauty of Doom 3’s Source Code – An ode to code indeed.
- Visual Studio considered Harmful. Or any other tool in your toolchain. You should be able to swap any bit up for one of similar functionality. The number of Eclipse programmers absolutely dwarfs the number of Java programmers.
- Centralized Selenium Logging with Graylog — alright, this is pretty trick.
- chrome-har-capturer uses Chrome’s remote debugging port to build a HAR file. Even works for SPDY traffic I believe.
- Opening a new terminal tab in OSX(Snow Leopard) with the opening terminal windows directory path – woah! AppleScript!
Tags
Categories
Source Control
This short technical note is to announce that the Selenium project is now using git on Google Code in place of subversion.
The move has been a long time in the making, and it’s largely thanks to the efforts of Kristian Rosenvold that we’ve been able to do the migration and retain the project history. The project owes him a huge thank you! We’re in the process of migrating the last bits and pieces (none of which are user facing), so there may be some last minute turbulence as we settle everything down.
Although the canonical source will be on Google Code, we’re working on setting up a github mirror. We’ll announce the location of that once it’s set up.
Tags
Categories
A Smattering of Selenium #136
Someone go back to my past self and punch him for thinking that starting to get in shape was a good idea. OMGCANTMOVE.
- .NET Goes Immutable seems interesting. But I don’t really speak C# so it could very well be boring and uninteresting.
- Shadow DOM 101 is another part of HTML5 that makes me think this web automation stuff has a very limited life span. Between this and Canvas… ugh.
- Using WebDriver to automatically check for JavaScript errors on every page is something I have been considering adding to my frameworks…
- Have I mentioned how much Canvas worries me? Snow in canvas land is an interesting post on debugging/improving performance on an little canvas app
- And in a similar vein, Why moving elements with translate() is better than pos:abs top/left
- I want to say that I’ve already linked to this, but I need it for a potential project so I’m linking it again – Modifying Python’s SimpleHTTPServer to accept directory aliases
- As a framework vendor I’m a bit worried about linking to Why Frameworks?, but there you have it.
- It both worries me, and impresses me, when people start needing to do Linux TCP/IP Tuning for Scalability
- Living in the cloud? Go read An Epic TripAdvisor Update: Why Not Run On The Cloud? The Grand Experiment. Now. The last link can wait.
- Understanding HEAD, HTTP/204 and HTTP/206 — What? You mean that there is more to HTTP than 200 and 404?
Tags
Categories
A Smattering of Selenium #135
Three in a row … of course, these are the easy three.
- Build, test and deploy Firefox OS apps for $0 (or any other currency that I don’t know how to emit)
- Ruby on Rails … in Bash. Because they can. Bash on Balls
- All you need to know about CSS Transitions except how the hell we are going to synchronize on them. Well, kinda does, but this is going to hurt.
- Speed Up Web Testing with a Caching Proxy has a speed-up trick I hadn’t thought of yet. And it also further complicates the moving parts in automation.
- Rails SQL injection vulnerability: hold your horses, here are the facts – I think every vulnerability should have a write-up like this.
- I hope I never feel the need to investigate an operator the way PHP equal operator == does.
- Now, investigating runners is something I’ve had to do a couple times. Reading MiniTest – part one, part two, part three, part four, part five, wrap up
- Using macros to create custom example groups in RSpec
- Hamcrest Quick Reference. Print it out and pin it to your wall.
- This. Is. Awesome. Mozpol – Provisioning Pandas
Tags
Categories
A Smattering of Selenium #134
Hrm. Office is closed until Monday, but everyone is in. Very confusing…
- One reason I have heard people say they don’t use cloud instances is they are afraid they will just sit around idle when not needed. Behind the clouds: how RelEng do Firefox builds on AWS has some useful scripts to find and teardown machines.
- Page Weight Matters is a fun little insight into how/why YouTube shed some of its heft. And a reminder that what we need is more stuff coming out of bandwidth starved regions since we have forgotten how to program efficiently in North America / Europe.
- Usetrace looks like the newest player in the Selenium-in-the-cloud space. Seems to use the Python bindings as the scripting language and host the scripts too.
- Did you know that you can modify the Se Server’s Grid functionality with plugins? Neither did I — or at least I don’t think I did… Here is a tutorial and another example.
- The interesting part of Whose bug is this anyway?!? is ‘Your computer is broken’ bit. Oh, and make sure that build machine is updated to what your developers are running…
- Modeling How Programmers Read Code is just cool.
- Speaking of reading code; Code Reading. I wonder if you gave this to a novice programmer if they would approach the above link differently.
- PhantomJS 1.8 “Blue Winter Rose” got lots of twitter love. As it should have.
- Cooperative multitasking using coroutines (in PHP!) is, I think, pretty awesome just by the my inability to fully grok what is going on. I also have no idea how to use this for automation purposes, but it seems like there should be some usage for it somewhere…
- So You Want to Write Tests is more mindset than code … but code has always been the easy part anyways.
Tags
Categories
A Smattering of Selenium #133
Since today is the start of ‘find a new contract’ I guess I don’t have an excuse to miss these for the next week or so.
(Oh, and Happy New Year, etc.)
- This is snark, but just makes me laugh given the hype machine around ATDD/BDD;
AS an angry userI WANT TO punch the developer in the faceSO THAT I CAN punch the developer in the face.
— Kristopher Johnson (@OldManKris) December 4, 2012
- Alright, this is also snark, but Why not make your URLs responsive? is an interesting ‘how would I automate this?’ question
- Adoption Of Exploratory Testing And Test Automation On The Rise is kinda sales-y [which is fine given the context], but if you swap in ‘Selenium IDE’ or ‘Selenium Builder’ for ‘TestStudio’ then you have the case for those parts of the suite.
- web++ is a single file webserver — in c++
- From 15 hours to 15 seconds: reducing a crushing build time is pretty good, though some very obvious developer tendencies sneaking in. The quick fix at the end, run the build entirely on the tmpfs in-memory file system seems in intriguing as well.
- Your periodic reminder that Simply Writing Tests Is Not Test Driven Development
- Javascript & HTML5 Game Engines Libraries – 51 Examples — and all will need their own unique automation efforts. Welcome to the JS Executor future. Honest, those aren’t thumbscrews you see on the counter over there. Why are you looking at the counter?!?!
- HTML5 canvas performance: Drawing circles — timing is something we’ll also have to care about in HTML5 apps.
- Falsehoods programmers believe about build systems. Yes.
- And I thought my brain hurt before reading display: none;. I was wrong.
Tags
Categories


In this demo, we will use Nuxeo DM Server as a CMIS Repository and show how to integrate it with Hippo Repository.
nuxeo.server.http.port=18080 nuxeo.server.tomcat_admin.port=18005 nuxeo.server.ajp.port=18009
$ cd ./nuxeo-cap-5.6-tomcat/bin $ ./nuxeoctl console
$ svn checkout http://forge.onehippo.org/svn/cmisreplication/cmisreplication/trunk cmisreplication
$ svn checkout http://forge.onehippo.org/svn/cmisreplication/cmisreplication-demo/trunk cmisreplication-demo
Note: cmis.replication.source.rootPath should be properly set to the existing Nuxeo workspace or section path.
As you can see below, you need to add a workspace to add a file.
After adding a file in a workspace, you need to publish the file to a section.
Now you can see the document you published in your workspace as shown below.
After about 1 minute, you may see the replicated documents in the specified assets folder
from the Nuxeo DM Server to Hippo Repository.
Now, you can search the asset documents by the contents in your website.
NOTE: By default, the search component searches only non-asset documents. Also, its default template JSP page cannot deal with asset document beans. Therefore, the demo project contains custom component implementation and template JSP page to allow to search asset documents as well. See the following code for detail:


It started with an idea, grew from a sketch, and fabricated onto things now made priceless. Instagram Samples. The theme is what you want it to be. I tailor based on request for any purpose, personal or commercial.
I include sketches and drawings based on request and the designs pressed onto t-shirts and other materials. Each project and design is tailored to match the needs of the client. Full customization with a unique touch.


--- layout: page title: Part-of-speech Tagging page: Tasks permalink: tasks/pos ---
Part-of-speech tagging (POS tagging) is the task of tagging a word in a text with its part of speech.


Here are some links with further information
You should learn Python
You should learn Java
You should learn Go
We saddly have no suggestions for you


The latest illustrations from artist Andrew Dyson 17 Nov 2019, 02:24 Tax cuts - Reality Unions in decline. Buenas notches. Apple TV want their bite. A flexible workforce. Europe's memory failure. Labor's need to get ahead. New walls, old prejudices. Going fur-free. Keeping an eye on your wellbeing. Still evolving. Pitfalls of ageing. National Party "love-in". Knockers. Health care, not healthy. Not a good look. Ideas drought. The Brexit split. Press prognosis. Wrong approach to the drought. Beijing looking at face value. Bad form. Dreams lead to chains. Rain men. Ignoring the poor. The main game. No room for the Kurds. Still an uphill battle for women. A secure Australian Cyber Conference. Morrison's Viking lesson. World health needs new heroes.


set_package_path()
from cdavid.segmentaxis import segment_axis
restore_path()
// //Optional:
// set_local_path()
// // import modules that are located in the same directory as this file.
assert_equal(segment_axis(N.ones((2,3,4,5,6)),axis=2,length=3,overlap=1,end="pad").shape,
(2,3,2,3,5,6))
if __name__=="__main__":
unittest.main()


Carla Snepvangers
Friends with Marijn
Carla requested permission to view your contact details
Marijn Pijnenborg
New Member
Marijn wants to add you to the group best friends
Friends with Marijn
Carla requested permission to view your contact details
New Member
Marijn wants to add you to the group best friends


@CFAnnotation public abstract class ModelBasedCF extends ModelBasedRecommender
Recommender
represents all recommendation algorithm.
Two typical inherited classes of Recommender
are MemoryBasedRecomender
and ModelBasedRecommender
which in turn are abstract classes for memory-based recommendation algorithm and model-based recommendation algorithm.
There are two common trends: content-base filtering (CBF) and collaborative filtering (CF) in building up a recommendation algorithms as follows:
model-based CF recommender
.
As mentioned, two main methods of any recommender are estimate(...)
and recommend(...)
.
This class does not implement such two methods. It almost do nothing.
Therefore it is a flag that any class extends it must define such two methods with use of knowledge base represented by KBase
class for collaborative filtering in recommendation task.
In general, model-based CF recommender
uses KBase
to produce a list of recommended items based on collaborative filtering (CF).kb
filterList
config, logger
| Constructor and Description |
|---|
ModelBasedCF()
Default constructor.
|
createDefaultConfig, createKB, getDataset, getKBase, newKBase, setup, unsetup
estimate, finalize, getFilterList, getParameters, preprocess, recommend
getConfig, resetConfig, toString
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
getName, newInstance


|
| enum | lms_gfir_t { LMS_GFIR1 = 0,
LMS_GFIR2,
LMS_GFIR3
} |
| | Enumeration of LMS7 GFIRS.
|
| |
|
| API_EXPORT int CALL_CONV | LMS_SetSampleRateDir (lms_device_t *device, bool dir_tx, float_type rate, size_t oversample) |
| |
| API_EXPORT int CALL_CONV | LMS_SetNCOFrequency (lms_device_t *device, bool dir_tx, size_t chan, const float_type *freq, float_type pho) |
| |
| API_EXPORT int CALL_CONV | LMS_GetNCOFrequency (lms_device_t *device, bool dir_tx, size_t chan, float_type *freq, float_type *pho) |
| |
| API_EXPORT int CALL_CONV | LMS_SetNCOPhase (lms_device_t *device, bool dir_tx, size_t chan, const float_type *phases, float_type fcw) |
| |
| API_EXPORT int CALL_CONV | LMS_GetNCOPhase (lms_device_t *device, bool dir_tx, size_t chan, float_type *phases, float_type *fcw) |
| |
| API_EXPORT int CALL_CONV | LMS_SetNCOIndex (lms_device_t *device, bool dir_tx, size_t chan, int index, bool downconv) |
| |
| API_EXPORT int CALL_CONV | LMS_GetNCOIndex (lms_device_t *device, bool dir_tx, size_t chan) |
| |
| API_EXPORT int CALL_CONV | LMS_SetGFIRCoeff (lms_device_t *device, bool dir_tx, size_t chan, lms_gfir_t filt, const float_type *coef, size_t count) |
| |
| API_EXPORT int CALL_CONV | LMS_GetGFIRCoeff (lms_device_t *device, bool dir_tx, size_t chan, lms_gfir_t filt, float_type *coef) |
| |
| API_EXPORT int CALL_CONV | LMS_SetGFIR (lms_device_t *device, bool dir_tx, size_t chan, lms_gfir_t filt, bool enabled) |
| |
| API_EXPORT int CALL_CONV | LMS_EnableCalibCache (lms_device_t *dev, bool enable) |
| |
The functions in this section provides some additional control compared to High-Level functions. They are labeled advanced because they require better understanding of hardware and provide functionality that may conflict with other High-Level functions.
| API_EXPORT int CALL_CONV LMS_EnableCalibCache |
( |
lms_device_t * |
dev, |
|
|
bool |
enable |
|
) |
| |
Enables or disable caching of calibration values.
- Parameters
-
| dev | Device handle previously obtained by LMS_Open(). |
| enable | true to enable cache |
- Returns
- 0 on success, (-1) on failure
Get currently set GFIR coefficients.
- Parameters
-
| device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| chan | Channel index |
| filt | GFIR to configure |
| [out] | coef | Current GFIR coefficients. Array must be big enough to hold 40 (GFIR1, GFIR2) or 120 (GFIR3) values. |
- Returns
- 0 on success, (-1) on failure
Get the current NCO FCW mode configuration.
- Parameters
-
| device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| chan | Channel index |
| [out] | freq | List of NCO frequencies. Must be at least LMS_NCO_VAL_COUNT length; |
| [out] | pho | Phase offset in deg |
- Returns
- 0 on success, (-1) on failure
| API_EXPORT int CALL_CONV LMS_GetNCOIndex |
( |
lms_device_t * |
device, |
|
|
bool |
dir_tx, |
|
|
size_t |
chan |
|
) |
| |
Get the currently active NCO frequency/phase offset index
- Parameters
-
| device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| chan | Channel index |
- Returns
- Current NCO frequency/phase index on success, (-1) on failure
Get the current NCO PHO mode configuration.
- Parameters
-
| device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| chan | channel index |
| [out] | phases | List of configured NCO phases Must be at least LMS_NCO_VAL_COUNT length; |
| [out] | fcw | Current NCO frequency |
- Returns
- 0 on success, (-1) on failure
| API_EXPORT int CALL_CONV LMS_SetGFIR |
( |
lms_device_t * |
device, |
|
|
bool |
dir_tx, |
|
|
size_t |
chan, |
|
|
lms_gfir_t |
filt, |
|
|
bool |
enabled |
|
) |
| |
Enables or disables specified GFIR.
- Parameters
-
| device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| chan | Channel index |
| filt | GFIR to configure |
| enabled | true(1) enable, false(0) disable. |
- Returns
- 0 on success, (-1) on failure
Configure LMS GFIR using specified filter coefficients. Maximum number of coefficients is 40 for GFIR1 and GFIR2, and 120 for GFIR3.
- Parameters
-
| device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| chan | Channel index |
| filt | GFIR to configure |
| [in] | coef | Array of filter coefficients. Coeff range [-1.0, 1.0]. |
| count | number of filter coefficients. |
- Returns
- 0 on success, (-1) on failure
Configure NCO to operate in FCW mode. Configures NCO with up to 16 frequencies that can be quickly switched between. Automatically starts NCO with frequency at index 0 Use LMS_SetNCOindex() to switch between NCO frequencies.
- Parameters
-
| device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| chan | Channel index |
| [in] | freq | List of NCO frequencies. Values cannot be negative. Must be at least LMS_NCO_VAL_COUNT length; |
| pho | NCO phase offset in deg |
- Returns
- 0 on success, (-1) on failure
| API_EXPORT int CALL_CONV LMS_SetNCOIndex |
( |
lms_device_t * |
device, |
|
|
bool |
dir_tx, |
|
|
size_t |
chan, |
|
|
int |
index, |
|
|
bool |
downconv |
|
) |
| |
Switches between configured list of NCO frequencies/phase offsets. Also Allows to switch CMIX mode to either downconvert or upconvert.
- Parameters
-
| device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| chan | channel index |
| index | NCO frequency/phase index to activate or (-1) to disable NCO |
| downconv | true(1) CMIX downconvert, false(0) CMIX upconvert |
- Returns
- 0 on success, (-1) on failure
Configure NCO to operate in PHO mode. Configures NCO with up to 16 phase offsets that can be quickly switched between. Automatically starts NCO with phase at index 0 Use LMS_SetNCOindex() to switch between NCO phases.
- Parameters
-
| device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| chan | Channel index |
| [in] | phases | List of NCO phases. Values cannot be negative. Must be at least LMS_NCO_VAL_COUNT length; |
| fcw | NCO frequency in Hz |
- Returns
- 0 on success, (-1) on failure
| API_EXPORT int CALL_CONV LMS_SetSampleRateDir |
( |
lms_device_t * |
device, |
|
|
bool |
dir_tx, |
|
|
float_type |
rate, |
|
|
size_t |
oversample |
|
) |
| |
Set sampling rate for all RX or TX channels. Sample rate is in complex samples (1 sample = I + Q). The function sets sampling rate that is used for data exchange with the host. It also allows to specify higher sampling rate to be used in RF by setting oversampling ratio. Valid oversampling values are 1, 2, 4, 8, 16, 32 or 0 (use device default oversampling value).
- Note
- RX and TX rates sampling are closely tied in LMS7 chip. Changing RX or TX will often result in change of both (RX and TX). RX/TX ratio can only be power of 2 and is also limited by other factors. Use LMS_GetSampleRate() to obtain actual sample rate values. The function returns success if it is able to achieve desired sample rate and oversampling for the specified direction (RX or TX) ignoring possible value changes in other direction channels.
- Parameters
-
| [in] | device | Device handle previously obtained by LMS_Open(). |
| dir_tx | Select RX or TX |
| rate | Sampling rate in Hz to set |
| oversample | RF oversampling ratio. |
- Returns
- 0 on success, (-1) on failure


|
C++ Actor Framework 0.19
|
A copy-on-write vector implementation that wraps a std::vector
.
More...
#include <cow_vector.hpp>
Public Member Functions | |
| cow_vector (std_type std) | |
| cow_vector (std::initializer_list< T > values) | |
| cow_vector (cow_vector &&) noexcept=default | |
| cow_vector (const cow_vector &) noexcept=default | |
| cow_vector & | operator= (cow_vector &&) noexcept=default |
| cow_vector & | operator= (const cow_vector &) noexcept=default |
| std_type & | unshared () |
| Returns a mutable reference to the managed vector. | |
| const std_type & | std () const noexcept |
| Returns the managed STD container. | |
| bool | unique () const noexcept |
| Returns whether the reference count of the managed object is 1. | |
| bool | empty () const noexcept |
| size_type | size () const noexcept |
| size_type | max_size () const noexcept |
| T | at (size_type pos) const |
| T | operator[] (size_type pos) const |
| T | front () const |
| T | back () const |
| const T * | data () const noexcept |
| const_iterator | begin () const noexcept |
| const_iterator | cbegin () const noexcept |
| const_reverse_iterator | rbegin () const noexcept |
| const_reverse_iterator | crbegin () const noexcept |
| const_iterator | end () const noexcept |
| const_iterator | cend () const noexcept |
| const_reverse_iterator | rend () const noexcept |
| const_reverse_iterator | crend () const noexcept |
Friends | |
| template<class Inspector > | |
| bool | inspect (Inspector &f, cow_vector &x) |
A copy-on-write vector implementation that wraps a std::vector
.
| std_type & caf::cow_vector< T >::unshared | ( | ) |
Returns a mutable reference to the managed vector.
Copies the vector if more than one reference to it exists to make sure the reference count is exactly 1 when returning from this function.


Future goals
1. Visualization of application state (network topology, bandwidth, etc), raw, encrypted, and /or processed "sensor" data.
2. Potentially extending the interface access to multiple users (from a single group/team) simultaneously through some synchronization restrictions (consider a scenario where two users from the same group can connect to the testbed and they need to have a sync mechanism).
3. Providing advanced users with template source code to store and retrieve data to their assigned database.


The mind is like an umbrella - it functions best when open.
Explore our selection of Bauhaus abstract works, learn more about the artists and start building your own gallery.
Explore our selection of Bauhaus abstract works, learn more about the artists and start building your own gallery.


--- layout: default title: Case Studies permalink: /case-studies ---
The Company: LucidWorks is the maintainer of the popular open source software Solr. They traditionally have sold a packaged enterprise solution of the Solr software.
The Problem: LucidWorks’ customers were increasingly asking for a hosted (SaaS) solution of the software because Solr is not easy to operate and scale. Their internal team had AWS experience from using instances for development purposes but did not have experience running and operating a production SaaS solution.
Our Solution: ManagedKube helped LucidWorks build a SaaS solution on the cloud in less than 8 months start-to-finish with a Docker/Kubernetes system in 2017 (just 18 months after Kubernetes was launches)
Our Approach: We collaboratively worked with LucidWorks’ management and development teams to map out the problem, establish what success would look like, and to ultimately build the best solution to achieve that end result. We answered key questions about how to build the infrastructure, such as:
The most critical question that we helped LucidWorks tackle was, should Lucidworks build an infrastructure model with a configuration management base or Kubernetes? In 2017, there were still a lot of folks who believed that using configuration management to create programmatic infrastructure as code was the best solution. However, we firmly believed that containers and Kubernetes are a better way of creating and managing infrastructure (which the passage of time has proved out) and were able to guide Lucidworks to building a highly scalable infrastructure on AWS.
The Company: GuardantHealth is a public biotech company that develops blood tests for early detection in high-risk populations and recurrence monitoring in cancer survivors.
The Problem: GuardantHealth’s compute operations were entirely on-premise when ManagedKube started working with them in 2016. They wanted to explore what moving to the cloud would mean for them, especially considering HIPAA privacy requirements. ManagedKube worked with them to move their genome sequencing pipeline to run in the cloud as a prototype for the rest of their compute.
Our Solution:
1) We designed the process and led the implementation team to copy local genome sequencing data to AWS via AWS Snowball and over the internet (700TB of total data moved at 2TB/day), taking great care to make these data transfers secure and reliable.
2) We designed and built infrastructure with:
Our Approach: The ManagedKube team worked with GuardantHealth to understand how the genome sequencing pipeline worked end-to-end, what steps were involved, and how to validate a successful run. With this knowledge, we created a pipeline that would run in AWS. We showed various configurations of the pipeline running on bigger/smaller machines and even Spot Instances.
The Company: Tillster creates online and mobile ordering systems for companies such as Kentucky Fried Chicken and Jollibee. They are responsible for these companies’ back end infrastructure, which often interfaced with local stores to get their menu and pricing. These systems also processed credit cards which means they are subject to PCI level 2 compliance.
The Problem: Tillster needed help transforming their development workflow and systems. Deployment of new code was time consuming, involved many people, and was typically performed at off hours, which the team disliked. Plus, their infrastructure was hard to maintain.
Our Solution: ManagedKube shifted a lot of their tenants over to the new containerized system and paved the way for shifting the rest of their tenants over to the new system. We are happy to say that the Tillster team has fully taken over operating and maintenance of the system that we built with them.
Our Approach: ManagedKube talked to all of the stakeholders (management, program managers, and
developers) at Tillster to understand everyone’s pain points. We took this information and created a plan for
how to move forward with a next generation development workflow and containerized platform. After
discussion and revisions with the Tillster team, we led the implementation of this plan. We slotted fully into their
Agile sprint cycles, attending scrum meetings like full-time employees, to implement and deploy the new
solution.
The most critical question that we helped Tillster answer is, how should they migrate their current application to
a container running on Kubernetes? Should they start from an empty container and build it back from the
ground up or should they work from the current Chef builds?
We recommended that they take an entirely built instance of the application and copy this directly into a
container to launch onto Kubernetes. This allowed us to do two things: quickly test how and if their workload
would work on Kubernetes and a mostly finished product where we can build an automated build and deploy
pipeline. While this was not efficient and not a product you would run in production, it did give us a
development workflow where we had a testable object with very defined outputs and a process to start
changing this application. With this workflow in place, the team started to pull apart the container and splitting
out parts that had natural separations into microservices. They also pulled out the secrets and configurations needed to make the containers portable. Lastly, the team refactored the artifacts built in the container into
other pipelines to make the whole process reproducible. This approach allowed multiple people to work on
different pieces of the application at the same time without affecting each other. They could then integrate each
piece back in when it was completed and tested. As a result of this strategy, we were able to refactor the
image we copied into the container image and separate it out into multiple microservices, with everything
reproducible via code and in an automated pipeline.
A key characteristic of the system we built for Tillster was a CI/CD pipeline that abstracted away most of the
infrastructure and deployment from their developers. This set-up simplifies the deployment process for
software developers because they only need to interface with Git and Jenkins. They do not need to interface
with Kubernetes directly. Their workflow starts with Git, where they make changes to the versions of the
software they want to build and deploy. Once that change has been committed and pushed into a branch, the
developer can give that information to Jenkins for building and deploying. Tillster has a complex multistep
build pipeline, sourcing artifacts from various places and building multiple containers for a deployment.
Jenkins automates this complexity with one build config that the developer has full control of. Once the
artifacts such as the containers are built and tested, the developer has options in the Jenkins GUI to deploy
this set of artifacts to an environment (Kubernetes cluster). From there, Jenkins will run automated tests
against that environment to ensure it is working as expected.
We offer our deep expertise in putting open source pieces together to build your infrastructure. As freelance consultants, we can quickly and economically build your infrastructure because we’ve done it countless times before. While you focus on your application, we will take care of everything infrastructure related.


Learning Creative Learning is a course offered by at the MIT Media Lab. It introduces ideas and strategies that help you design learning technologies for creative learning. We will invite some of the best thinkers and builders in this space to join our conversation, and we will look at lots of examples. Many of which are based on projects that were done in the Lifelong Kindergarten group right here at the Lab.
The course is offered by Mitch Resnick, who is the director of Lifelong Kindergarten and the LEGO Paper Professor at the MIT Media Lab. He has been a pioneer in the technology & learning for a looooooong time. And has built such wonderful things as Scratch, The Computer Clubhouse network, and Programmable Bricks, a collaboration with LEGO. More about Mitch is here -> http://web.media.mit.edu/~mres/
What will you be learning?
Participants in this course will analyze learning technologies, discuss educational concepts like interest-based learning or learning through tinkering, examine design principles that others have used, and create new prototypes and applications.
Say what?
There will be weekly readings, reflection and discussion, and project-based activities. We decided not to focus on a big course-project, but participants are encouraged to go deeper on any of the weekly activities they find particularly interesting.
An online experiment, learning by the seats of our pants.
What you are looking at here is a BIG experiment. This semester, for the first time, we will open the course to online participants. In the spirit of the course, we hope that participants will jump in as collaborators rather than passive recipients of information. We want to tinker together. Things will break, but we are committed to fixing them along the way and invite you to break things and fix them together with us.
Look at our shiny new platform
Actually, don’t, because we didn’t build a shiny new platform. Our platform is the web and we like things distributed and open. We also wanted to create a model that is easy to replicate for anyone, which influenced our choice of technology. We use off-the-shelf Google+ features, like Hangouts and Google+ communities; and open source software like the Mechanical MOOC (github).
Open critique
We will provide online participants access to course materials, including videos of portions of the course (both live-streamed and archived), and with opportunities to participate in online discussions around course readings and activities. Online participants will not receive any credit or credential for their participation, and they will not receive regular feedback or evaluation from the course staff. But we are planning an open critique session, during which Mitch Resnick and Natalie Rusk will review the work of some online students and give feedback and suggestions.


Are you looking for some resources? We have curated a list that may help.
Do you want to save some lives? Please register with resources that you can help with
State Wise Helpline Numbers
There are many other places, which are helping everyone to fight this Pandemic
Do you want to support the mission of saving lives? Join Us!
A public chatroom, for all of us


|
libcoap 4.3.1
|
Event handling. More...
#include "libcoap.h"
Go to the source code of this file.
Typedefs | |
| typedef int(* | coap_event_handler_t) (coap_session_t *session, const coap_event_t event) |
| Type for event handler functions that can be registered with a CoAP context using the unction coap_set_event_handler(). More... | |
Enumerations | |
| enum | coap_event_t { COAP_EVENT_DTLS_CLOSED = 0x0000 , COAP_EVENT_DTLS_CONNECTED = 0x01DE , COAP_EVENT_DTLS_RENEGOTIATE = 0x01DF , COAP_EVENT_DTLS_ERROR = 0x0200 , COAP_EVENT_TCP_CONNECTED = 0x1001 , COAP_EVENT_TCP_CLOSED = 0x1002 , COAP_EVENT_TCP_FAILED = 0x1003 , COAP_EVENT_SESSION_CONNECTED = 0x2001 , COAP_EVENT_SESSION_CLOSED = 0x2002 , COAP_EVENT_SESSION_FAILED = 0x2003 , COAP_EVENT_PARTIAL_BLOCK = 0x3001 , COAP_EVENT_XMIT_BLOCK_FAIL = 0x3002 , COAP_EVENT_SERVER_SESSION_NEW = 0x4001 , COAP_EVENT_SERVER_SESSION_DEL = 0x4002 } |
| Scalar type to represent different events, e.g. More... | |
Functions | |
| void | coap_register_event_handler (coap_context_t *context, coap_event_handler_t hnd) |
Registers the function hnd as callback for events from the given CoAP context context . More... | |
| COAP_DEPRECATED void | coap_set_event_handler (coap_context_t *context, coap_event_handler_t hnd) |
Registers the function hnd as callback for events from the given CoAP context context . More... | |
| COAP_DEPRECATED void | coap_clear_event_handler (coap_context_t *context) |
Clears the event handler registered with context . More... | |
Event handling.
Definition in file coap_event.h.
| COAP_DEPRECATED void coap_clear_event_handler | ( | coap_context_t * | context | ) |
Clears the event handler registered with context
.
| context | The CoAP context whose event handler is to be removed. |
Definition at line 36 of file coap_event.c.
| COAP_DEPRECATED void coap_set_event_handler | ( | coap_context_t * | context, |
| coap_event_handler_t | hnd | ||
| ) |
Registers the function hnd
as callback for events from the given CoAP context context
.
Any event handler that has previously been registered with context
will be overwritten by this operation.
| context | The CoAP context to register the event handler with. |
| hnd | The event handler to be registered. |
Definition at line 30 of file coap_event.c.


This procedure provides a way to loop through a collection of data files and apply the same set of syntax to each. The syntax may contain any commands. Macros and file handles are provided to refer to the inputs and the output specifications.
The file "Batch Reporting with IBM SPSS Statistics.pdf", which contains an expository article on usage of this command, is installed in the SPSSINC_PROCESS_FILES directory under the extensions directory. Start with that in learning to use this procedure.
To find that directory, run SHOW EXT in a syntax window and look at the EXTPATHS EXENSIONS section.
It may be convenient to use this procedure in combination with SPSSINC SPLIT DATASET, which can break up a dataset according to the values of a splitting variable.
Input Data Files Specified by Wildcard
Expression. Choose a directory to process and, optionally,
specify a file pattern. For example,
c:\mydata\x*.sav
would process all the sav files in directory c:\mydata whose
names start with the letter x. You can use the Browse button
to select the input directory, but you must type in the file
name wildcard expression.
• If no file-name expression is given,*.sav is assumed.
• Choose either this option or the following Input Data Files Specified in a File option but not both.
Input Data Files Specified in a File. Process all the files listed in the specified file. The SPSSINC SPLIT DATASET command can produce a file in the correct format.
• Choose either this option or the preceding Input Data Files Specified by Wildcard Expression option but not both.
Syntax File to Execute for Each Data File. The syntax file will be invoked for each input dataset. It should read the file and carry out any desired operations. File handles and macros are defined to refer to the input file and various output locations. The file handles are as follows.
<NONE>
<NONE>
For a SAV file you could read the data with the command
GET FILE="JOB_INPUTFILE".
Macros are defined with these same names except starting with "!". The additional macros are
The text !JOB or JOB is replaced by the root name specified in the root-name control.
The file handles and macros are refreshed for each file. The input files are not opened, and the data and Viewer outputs are NOT saved by this command. Put the reading and saving code in your syntax file using the handles or macros PROCESS FILES provides.
Here is a complete example of a SYNTAX file that saves the Viewer contents as an Excel file for each input file It uses the input file name base name for titles.
TITLE !JOB_DATAFILEROOT.
GET file="JOB_INPUTFILE".
TEXT "The data for this report come from the"
"OECD Programme for International Student Assessment, 2018.".
* Custom Tables.
CTABLES
/TABLE CNTRYID BY TC198Q01HA [COUNT ROWPCT.COUNT]
/CATEGORIES VARIABLES=CNTRYID TC198Q01HA ORDER=A KEY=VALUE
EMPTY=EXCLUDE MISSING=EXCLUDE
/TITLES TITLE='Country = ' !JOB_DATAFILEROOT.
GRAPH
/BAR(SIMPLE)=COUNT BY TC198Q01HA.
OUTPUT EXPORT
/!JOB_OUTPUTVIEWERTYPE DOCUMENTFILE='JOB_OUTPUTVIEWER'.
Directory for Output Data Files Data output can be saved either in a separate file for each input data file or as a single file for the entire job. Enter a directory name if you want to save the data output and use the SAVE or SAVE TRANSLATE command in the syntax file as appropriate.
Directory for Viewer Output Files Viewer output can be saved either in a separate file for each data file or as a single file for the entire job. Enter a directory name if you want to save the Viewer output and use the OUTPUT EXPORT or OUTPUT SAVE command in the syntax file.
Write Job Log to File. Specify a file for the job log. The log lists the files processed and written by the procedure, each with a time stamp.
If you specify Leave open in the Options subdialog for data or Viewer output, the files are not closed for each input, and you can save them after this procedure completes.
If a serious error occurs in processing a file, there will be an error entry in the log if you are saving a log.
Syntax to Execute before Processing. You can specify a syntax file that will be executed once before input file processing starts. Macros and file handles will be defined as for the first file in the processing list. If a serious error occurs, processing is stopped.
Syntax to Execute after All Processing. You can specify a syntax file that will be executed once after all the input files are processed. Macros and file handles will be defined as for the last file in the processing list.
Log File Mode. Choose whether the log entries for the job are appended to an existing file or replace the contents.
Data File Processing after Each Step. Choose Close to have all datasets closed after each iteration of input file processing. Leaving datasets open after each step is useful if you are combining many datasets into one. The final dataset could be saved after this command completes.
Viewer File Processing after Each Step. Choose Close to close the Viewer after each iteration of input file processing.
Error Handling. If an error occurs, you can choose whether to continue processing with the next data file or to stop processing any further files. If possible, the output data and Viewer files will still be written for the data file that caused the error even if stopping is specified.
Root name for macros and file handles. By default, the file handles and macros defined have the prefix JOB and !JOB, respectively followed by an underscore. You can specify a different prefix in place of JOB. The prefix will have ! prepended to it for macros.!.
Use this subdialog box to define your own macros that can be used in the syntax file. You can define up to five macros named !PARM1 to !PARM5 whose values will be ordinary syntax or variable names, and up to five macros named !QPARM1 to !QPARM5 whose values will be quoted literal strings. The quoted string are useful for titles or string expressions in transformations.
Macros Where Values Are Unquoted. Enter any macro text that represents any SPSS syntax that should appear without quotation marks.
Macros Where Value Is a Quoted Literal. Enter any macro text that represents SPSS syntax that should appear in quotation marks such as a title, label, or file name.
• Use single quotes (') if you need to quote literals in the definition. The generated macro text will be enclosed in double quotes(").
SELECT IF !PARM1 EQ !QPARM1.
FREQUENCIES !PARM1.
• Set the Error Handling parameter to Continue with next file since if no cases are selected, the FREQUENCIES command will generate an error. (OMS could be used to suppress the resulting Warnings table.)
• Write the Viewer output to a single file for ease of viewing the result.
In order to use a file to specify the files that should be processed, create a file with one name per line including the path to the file. The name must be enclosed in double quotes ("). Anything following on the line is ignored. Blank lines and lines starting with # are ignored.
© Copyright IBM Corp. 1989, 2023


February 19th, 2016
By Eric Gumerlock
There are number of very useful Enumerable methods in Ruby one of which is pretty useful called
.group_by
. It takes an array or also a group of numbers
(1..6)
and groups the elements of that array by a block. If no block is given it just returns an enumerator instead. But you usually won’t be using that way, and you will be passing a block most of the time. So lets talk about what can go in the block, and the different outcomes you will receive.
The first and most intuitive way to use .group_by would be to just
.group_by { |e| e }
which would return a hash that groups identical elements into values. The keys would be identical to the value/values of that particular element.
Another way we could use this method, say with an array of strings, would be like this
.group_by { |e| e[0] }
which would sort by the first letter of the string, and group the values that start with that letter into keys corresponding to that first letter. Here’s an example:
birds = ["Golden Eagle", "Gyrfalcon", "American Robin",
"Mountain BlueBird", "Mountain-Hawk Eagle"]
grouped_by_first_letter = birds.group_by { |s| s[0] }
# {G=>[Golden Eagle, Gyrfalcon], A=>[American Robin],
# M=>[Mountain BlueBird, Mountain-Hawk Eagle]}
You can see how this method can be very useful.
If we use methods within .group_by such as .length, we will end up with a hash with keys of the length, and values of the elements with that length.
As we become more familiar with .group_by, we can start including a case within the block like so:
raptors = ["Golden Eagle", "Bald Eagle", "Prairie Falcon", "Peregrine Falcon",
"Harpy Eagle", "Red Kite"]
kinds = raptors.group_by do |species|
case species
when /.*Eagle.*/
Eagle
when /.*Falcon.*/
Falcon
else
unknown
end
end
# {Eagle=>[Golden Eagle, Bald Eagle, Harpy Eagle],
# Falcon=>[Prairie Falcon, Peregrine Falcon], unknown=>[Red Kite]}
Lastly, we can use .group_by with a numerical function, which then groups the array elements into keys, and their corresponding solutions to those functions. For example:
(1..6).group_by {|i| i%3} #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]}
This method seems like it takes awhile to master all the ways that it can be used, but once you get a hang for what it can do, it becomes a useful tool in your Ruby toolbelt.


Release Page
A quick summary of how much unreleased code is in these repos
{% for repo, branches in repos %}
{{repo}}
branch
release
date
unreleased commits
last commit
{% for info in branches %} {# exclude up-to-date branches other than master #} {% if info['commits'] or info['ref'] == 'master' %}
{{info['ref']}}
{{info['tag']}}
{{info['tag_date'] | format_date}}
{{info['commits']}}
{{info['ref_date'] | format_date}}
{% endif %} {% endfor %}
{% endfor %}


The cpp-netlib was founded by Dean Michael Berris in 2007. Initially it consisted of a message template and an HTTP client. It found a home on Sourceforge but was migrated at the end of 2009 to Github where development is actively continued by a committed community.
We’re a group of C++ developers and we kept becoming annoyed that we had to repeatedly write the same code when building applications that needed to be network-aware.
We found that there was a lack of accessible networking libraries, either standard or open source, that fulfilled our needs. Such libraries exist for every other major language. So, building on top of Boost.Asio, we decided to get together and build our own.
The objectives of the cpp-netlib are to:
The goal the of cpp-netlib has never been to build a fully-featured web server - there are plenty of excellent options already available. The niche that this library targets is for light-weight networking functionality for C++ applications that have demanding performance requirements or memory constraints, but that also need to be portable. This type of application is becoming increasingly common as software becomes more distributed, and applications need to communicate with services.
While many languages provide direct library support for high level network programming, this feature is missing in C++. Therefore, this library has been developed with the intention of eventually being submitted to Boost, a collection of general, high quality libraries for C++ developers.
Eventually, the cpp-netlib will be extended to support many of the application layer protocols such as SMTP, FTP, SOAP, XMPP etc.


See what your survey could look like
The field cannot be empty
The field cannot be empty
Would you also like to receive it as a text message?
Yes, sent me please text message
No,email is enough
Get survey


Select one
Stocks
Investment Funds
Personal Funds
Select one
E*Trade
Scottrade
Fidelity
Bank Of America
...


Change Password
Current Password:
New Password:
Required
Confirm Password:
Required
{{(isPosting)? 'Changing Password ':'Change Password'}}


Rodney Reed Gets Stay Of Execution After Political And Celebrity Pressure
by Shirley JuA man facing death row has won reprieve and a variety of celebrities are celebrating
(AllHipHop News) pressure from celebrities like Meek Mill, Beyonce, and Kim Kardashian have helped spare the life of a death row inmate.
Rodney Reed was originally scheduled to be executed on November 20th.
Rodney is currently on death row in Livingston, Texas for murdering Stacey Stites in 1996, where cops said he raped, assaulted and strangled her to death. Reed has maintained his innocence of killing her for over two decades now.
But a panel of experts, as well as dozens of celebrities believed there was concrete evidence to prove he is innocent for the murder he was accused of committing more than two decades ago.
Fortunately for both, the Texas Court of Criminal Appeals issued a stay of execution and recommended a 120-day reprieve.
Earlier this week, Kim flew to Texas with her husband Kanye West for his forthcoming performance at Joel Osteen’s church.
Authorities granted her special permission to meet with Rodney Reed face to face.
Lawyers for the Innocence Project, which represented Rodney Reed, set the reprieve would give them more time to make their case for his innocence.
"This opportunity will allow for proper consideration of the powerful and mounting new evidence of Mr. Reed’s innocence," the organization said in a press release.


Pi-holes
Total queries (
29
clients)
?
Queries Blocked
?
Percent Blocked
?
Domains on Blocklist
?
Disable for 10 secs
Disable for 30 secs
Disable for 1 minute
Disable for 5 minutes
ENABLE
Pi Hole I
Pi Hole II


About Us
PyLadies Ghana is an initiative under the Python Software Community in Ghana (Python Ghana) focused on bridging the diversity gap in tech by empowering more ladies and introducing them to tech using the Python Programming language.
We aim to promote, educate and advance a diverse community through outreach, education, conferences, events and social gatherings.
PyLadies also aims to provide a friendly support network for women and a bridge to the larger Python world. Anyone with an interest in this is encouraged to join us!


electron-packager
A tool used to build Electron app executables for Windows, Linux and macOS.
Requires a valid package.json in the application directory.
More information: home page
- Package an application for the current architecture and platform:
electron-packager "path/to/app" "app_name"
- Package an application for all architectures and platforms:
electron-packager "path/to/app" "app_name" --all
- Package an application for 64-bit Linux:
electron-packager "path/to/app" "app_name" --platform="linux" --arch="x64"
- Package an application for ARM macOS:
electron-packager "path/to/app" "app_name" --platform="darwin" --arch="arm64"


Airline passenger, flying with minor son, accused of groping sleeping woman in adjacent seat
by Michael BartiromoA hearing has been scheduled for early January following the arrest of a Frontier Airlines passenger who was accused of groping the woman seated next to him — while his young son was in the same row.
Victor Maksimov, 42, was arrested on Oct. 28 following a Denver-to-Miami flight with Frontier, during which he consumed alcohol and allegedly touched “the hamstring and buttock area” of a female passenger trying to sleep in an adjacent seat.
WATCH: PHILIPPINE AIRLINES PLANE SPEWS FLAMES AFTER TAKEOFF FROM LAX
Court documents cited by the Miami Herald say Maksimov and his son had taken their seats — a middle and a window seat, respectively — when the woman, identified in the documents as C.VA.F, took her seat in the aisle. Maksimov also offered her vodka after takeoff, and would go on to consume both vodka and beer during the flight.
Sometime after C.VA.F fell asleep, she claims she felt Maksimov’s hand on her hamstring area and buttock, but assumed at first that it was accidental. When it happened again, and he reached over to touch her inner thigh, she contacted a flight attendant.
FOLLOW US ON FACEBOOK FOR MORE FOX LIFESTYLE NEWS
C.VA.F was moved to another seat but remained “visibly shaken” for the duration of the flight. Officers stopped Maksmov, who admitted to drinking on the flight but not to touching the female passenger.
He was arrested and released the same day after his $25,000 bond was posted.
CLICK HERE TO SIGN UP FOR OUR LIFESTYLE NEWSLETTER
Maksomiv also pleaded not guilty to a charge of assault in Florida Southern District Federal Court on Tuesday, the Miami Herald reported. He’ll return to court for a hearing in January, until which time he is not allowed to leave Southern Florida.
CLICK HERE TO GET THE FOX NEWS APP
A representative for Frontier Airlines was not immediately available to comment.


#include <actor3d.h>
Inheritance diagram for Actor3DNode:
Public Member Functions | |
| void | Draw () |
| Sends node to draw queue. | |
| void | UpdateTransform () |
| Updates node result transform matrix. | |
| Matrix4fx | GetResultTransform () |
| Returns result transform matrix. | |
| Int | GetClassID () |
| Returns Actor3DNode class id. | |
| Vector3fx | GetCenter () |
| Returns node bounding sphere center in model coordinate. | |
| Fixed | GetRadius () |
| Returns node bounding sphere radius. | |
Static Public Member Functions | |
| static ObjRef< Actor3DNode > | New () |
| Creates new Actor3DNode. | |
| static ObjRef< Actor3DNode > | New (Render3D *render_) |
| Create new Actor3DNode. | |
Public Attributes | |
| Matrix4fx | transform |
| Transformation matrix of node. | |
| Material | material |
| Material. | |
| ObjRef< Basic3D > | link |
| Link object. | |
Protected Member Functions | |
| Actor3DNode () | |
| Default constructor. | |
| Actor3DNode (Render3D *render_) | |
| Constructor with given render pointer value. | |
| ~Actor3DNode () | |
| Destructor. | |
Protected Attributes | |
| Matrix4fx | result_transform |
| Result transform matrix. |
This class used to represent one part of 3d actor character like head, trunk, hand, leg and etc. Also nodes can be used for helper objects to represent gadgets, weapons.
|
|
Constructor with given render pointer value.
|
|
|
Returns node bounding sphere center in model coordinate.
|
|
|
Returns Actor3DNode class id.
Reimplemented from Basic3D. |
|
|
Returns node bounding sphere radius.
|
|
|
Returns result transform matrix.
Reimplemented from Basic3D. |
|
|
Create new Actor3DNode. Call this function instead constructor calling.
Reimplemented from Basic3D. |
|
|
Creates new Actor3DNode. Call this function instead constructor calling.
Reimplemented from Basic3D. |
|
|
Updates node result transform matrix. Need to call after node matrix transform update. Reimplemented from Basic3D. |


THEN [statement]
Description
Optional THEN statement after an IF statement.
Results
When placed after an IF statement, if the expression is true, then [statement] is executed instead of all the code following the IF statement.
Example
; make sure angle is between 0-359 if angle < 0 then angle = angle + 360 if angle > 359 then angle = angle - 360
Back to Keywords


!= include('css'); ?>
Search the commons...
search
Filters
arrow_back
expand_more
Licenses
expand_more
License Types
expand_more
Providers
Settings
expand_more
Attribution Location
!= include('js'); ?>