London based too - what exactly was that 40 percent of? Would be interested to find out, as a colleague of mine can reveal the following details for comparison:
20 percent of equity in a B2B company (not even live yet; but customers already signed up), five developers plus owner, central London based, amount invested £1.4MM.
I am not sure how much haggling was involved but he was happy as the investor has a proven record with B2B in the UK, and can probably help it in the mid to long term.
Developing on the BlackBerry 10 OS has actually been a pleasant experience, but that was for fun rather than profit, as the numbers do not add up in their store vs the rest of the market.
Their android runtime is very good and most apps run well on it, with the confidence of a modicum more sandboxing than a native android phone.
I think BlackBerry's only real hope now is to get the phone into the hands of people for little to no cost and hold developer events and contests. It will cost them to have a dev community, like Microsoft learnt, but without it, they will wither even more so.
An excellent article! I had wanted to get back into some python recently after seeing the changes in 3.4, I had also wanted to become more familiar with LLVM, and this does both.
there is this discussion (flame war?) about python3 not bringing too many benefits. i haven't made my mind yet. could you elaborate what you saw in 3.4 that was nice?
Simply put: it's a better language. The whole "discussion" is whether it makes sense to migrate since many parts of the ecosystem (many important libraries and frameworks) have not made the transition. And many distros ship Python 2 by default, Python 3 is optional. Python 3 only is not feasible.
To me, the killer feature is better lazy evaluation (generators). In particular, important builtins like map, filter, zip, enumerate, etc are generators, instead of returning lists. This makes it feasible to write things like
(process(line) for line in map(str.upper, open('giantfile.txt')) if line.lstrip()[0] != '#')
Some of the above can also be done with itertools package in Python 2, but not everything.
The example you gave works perfectly in Python 2.7 (would also be a generator, and you're not using map filter or else); but I agree: those should've been generators from day 1, especially zip and enumerate since they make more elegant code but often come with a performance overhead in Python 2.7
Turning them into generators would have broken a lot of existing code, though, so it's reasonable to leave them until a major version change.
Rather, these are the kind of small, obviously-useful changes that should have come immediately in 3.0, giving people some encouragement to switch.
(process(line) for line in open('giantfile.txt') if line.lstrip()[0] != '#')
Is that line really using any new features in Python 3? The lazy evaluation there is in the file object and the generator expression, both of which have long been present in python2.
Then again a lazy map is just an import away in P2. It removes pitfalls from Python but the improvement is… very limited (as opposed to e.g. `yield from` which is a big convenience, or for much more specialised uses the ellipsis literal being universal)
That's besides the point. It's trivial to write that as a for loop or in a million different ways to avoid the issue. It's a contrived example written to demonstrate a difference.
Here's another one you can't change that easily:
tests_pass = all(process(input) == output for (input, output) in zip(open('inputs.txt'), open('outputs.txt'))
You can change that easily, with izip from itertools.
The fact that a bunch of builtins and the values/items methods of dictionaries have become iterators is not very siginificant IMHO. Python 2 code could already be written to use iterators or generator expressions, so in the parts where it was crucial it was already done. In this regard Python 3 has not added new functionality but only changed defaults.
In this case (checking that process(input) == output), itertools.izip_longest is probably that right solution, unless there's an out-of-band way to know that inputs.txt is the same length as outputs.txt.
You felt the need to correct yourself earlier, so I think your "besides the point" should be directed to yourself. I was pointing out that your correction wasn't persuasive.
We went to Python 3 for the multiprocessing module. At the time it was 3.3, but now 3.4 has all that async magic. I wish I still worked on that project.
Without listing any of the modules or improvements that are in the standard library in 3 but backported as PyPI modules to 2 (of which there are many), here are the features that I actually use in Python 3: unicode handling that isn't insane, function annotations, async improvements, exception chaining, enums, single-dispatch generics, better SSL support, generator delegation, better int-bytes conversion support, unittest module improvements.
The key point is that 2.7 is a language frozen in time, while 3.4+ is continuing to develop and improve. And most of the hand-wringing was before the critical mass of third-party modules was ported to 3.x.
My favorite new feature is PEP-442 [0]. Basically, it's now safe to add a __del__ method to a class without worrying about memory leaks caused by reference cycles.
This alone is pretty wonderful. I've only been working in Python a few months and the number of issues I've had to debug in 2.7 that came down to Unicode handling is kind of nuts.
I can't say I disagree with such sentiments, but over time I've ran into a few issues (features and performance improvements) which where only addressed in Python 3. This is reason enough to try working with Python 3.
As someone who had one of the products mentioned here, the side effects were not slight, and to be honest more annoying than the flu itself. We only received the medication (here in the UK) because at the time there was the fear of an outbreak of avian or swine flu, and the idea at the time was to head things off.
I think even if they do show any effectiveness in longer term trials (didn't do much for me personally), I would be wary of seeing them widely used, as it seems they should be targeted mostly at those individuals with compromised immune systems, or perhaps in the future, those individuals identified as having a genetic makeup that could aid and abet a flu related fatality.
There is a horrible trend of sealing homes up tight, and then we start to notice a raft of problems developing - in the fabric of the home, and it's inhabitants.
I am lucky to live in a 1930's building in London, with plenty of ventilation built it. It is certainly not the most eco rated property, but, it is healthy. It might cost a couple of pounds more to heat over the year, but, it has proven itself over time, from coal fires, to back boilers, to central heating, air flows throughout, damp does not get a chance to thrive, nor mould nor fungi nor other related issues.
Houses with poor ventilation will have problems, but sealing buildings up is good for energy efficiency. "HRV" (heat recovery ventilators) are common and required by code in many cold climates (Canada, northern Europe) which do whole-house ventilation with a heat exchanger so you're not just blowing all your nice warm air straight outside when it's -40C all week.
The German Passivhaus standard shows what can be done with this approach, and it works very well.
Passive Houses use active ventilation for just this reason. Mine draws air from outside, runs it through a heat exchange with the air being pumped back outside, and through dual HEPA filters. I breathe much more easily now than in the 100 year old home I lived in for the previous ten years.
This is interesting. Do you have a reference for this? It seems logical because humans give off moisture a lot and if the air is not exchanged it will accumulate.
There was a recent exhibition of train and tube photos from London, and it was amazing to see how smart dress from the mid century gave way to fashions of the time like mods, teddy boys, punks, skin heads, new wave romantics, goths,hipsters, and finally back to a more stylish approach. No one looked happy though. Public transport is a great leveller - we all feel equally trapped and unhappy upon it!
I was just remarking to a colleague today how beneficial a lunchtime walk really is. The walk provided:
1. Fresh air
2. Exercise
3. A chance for the eyes to change focal range from the fixed distance of the shitty monitors work provides.
4. A chance to take a brief phone call from a recruitment agent to discuss a better job
5. A chance meeting of an old colleague I had not seen for nearly twenty years as he also took a walk.
6. I was away from the desk when the boss had a crappy task so someone else had to do it.
7. I found a new coffee shop I will revisit
8. I solved a long running problem by being able to walk and think
9. I am sure the stress levels were reduced!
> A chance for the eyes to change focal range from the fixed distance of the shitty monitors work provides.
is followed by me daily. I have a cute nice wallpaper hanging behind my pc. Every say 10 minute, I change my vision to point to the wall-paper from regular pc vision.
After following this, I haven't faced any eye stress. Really helped me.