Re: Branding...
VoMIT ?
5089 publicly visible posts • joined 6 Aug 2009
In my defence when you're writing data recovery tools for the engineers that are using them you can't always afford time for thorough testing. Most customers want their data back yesterday so you bodge up a fix for whatever is blocking that particular recovery and worry about the code later. But then there's a dual nature of the job where sometimes you had to drop the programming you were in the middle of and actually recover some data. In the early days we even had to answer the phone and give quotations to customers. Can you say 'context switch'?
I think on balance looking back over the 15 years I did that (15 years during which the main tools were ported from DOS, to Win16 then to Win32 using both Pascal and C++) we did a damn good job.
Happy days but history now.
Many years ago I was a data recovery engineer. I was also responsible for writing and maintaining our data recovery tools. Every now and again the hardware engineers would whine about the time it was taking to image hard drives. Sometimes I'd offer sympathy and agree to investigate. It was a way to avoid real work since I could usually blame the network or the (NetWare) servers. Other times I'd just shrug it off and do something more important.
Anyway this one time the engineers were adamant things had suddenly taken a turn for the worse. So there was a department-wide investigation. The network was checked and found to be fine. The servers seemed okay as well. Eventually we gave up and forgot about it for a week or two. Then while I was investigating another problem I happened across the main I/O loop for our disk imager. And there I found a debug statement, left in while investigating our 'non-BIOS' disk reading. This was code that used ATA to talk directly to the disk. We needed that because sometimes the BIOS just couldn't handle the state the drive was in and occasionally we took in a drive so large that the BIOS couldn't access it all. Anyway this code could be a bit temperamental and it often came down to timing.
Hence the debug statement I'd inadvertently left in. The I/O loop read 64kiB of data then wrote it out. Then it waited 10ms before going round for more data. I toyed with the idea of pretending I'd discovered a hitherto unknown way to improve I/O but we were a friendly team so I 'fessed up. Sometimes it does you good to laugh even if it makes you look like a chump.
While we're dissing Microsoft UIs can I also throw in a moan about focus stealing? Surely the one thing any GUI should do is respect which control the user is interacting with? Windows is a multi-tasking OS and if one application is a little tardy in responding we should be able to switch to another application and use that without the tardy application suddenly shoving itself in our face and demanding our attention.
Hands up anyone who hasn't accidentally typed half a password in plain text into an application that suddenly thrust itself in front of another application's log on dialog?
<rant>
Oh and (a bit specialist this one) FFS guys. Trying to make Visual Studio start up quicker by deferring tasks is pointless. Yes, it renders immediately, but there's then damn' all you can do with it anyway. It will occasionally respond to a click or a key press and you think you're finally on your way only for it to stall as yet another 'startup' process wakes and blocks the UI thread. It is not clever, it is bloody irritating. It would be far better if it just displayed a 'Please wait, I'm initialising' dialog so that it at least I wouldn't keep having to try and do stuff on the off-chance it was finally ready.
Oh and it focus steals as well. It steals the focus only for you to discover that it's not even ready to respond. Sometimes it's so busy at startup that it steals the focus and then you can't get back to the application you were trying to use.
</rant>.
I remember when left-clicking once on an edit box that didn't have the focus just focused it and moved the cursor. Double clicking selected all the text. These days single clicking selects everything and you have to click again to position the cursor where you want it.
And all these flat buttons - often without any indication of whether they are enabled or not.
And a lot of UI 'designers' apparently have no knowledge of what an accelerator key is nor what an accept or cancel key is.
The original rules made sense. Then arty-farty types decided they wanted to 'differentiate' their product and that it would be 'cool' to look different.
how the hell did it know its postal delivery address?
I assume that it was registered with Cisco by our corporate IT department when they installed it. All that then needs to happen is that it notifies Cisco HQ of the failure and their support systems look its serial number up in a database and arrange for the fan to be sent out to the registered address.
It's technically possible Cisco offers monitoring services that will raise the alarm. I just can't immediately find any specific service that includes ordering spare parts. So maybe it was our IT department sending it out but usually they came and visited us (anything to get out of London for the day, lol).
Edit: I have found this document.
"Devices equipped with Smart Call Home technology can be enabled to continuously monitor their own health. Once enabled, this feature can notify you of potential issues using a secure, personalized web portal that contains messages, detailed diagnostics, and recommendations. If a serious problem arises, Smart Call Home can automatically generate a service request with Cisco TAC that is routed to the right team for your particular problem"
It doesn't specifically mention sending out spare parts but it shows how they have the technology to know that 'Router 3 in Bucknell has a failed fan" from there to "Send a replacement out" isn't far :)
Had a similar issue with the first SSD I bought (think it was a Kingston unit though). After three months it would shutdown. After power cycling it would run for an hour then shut down again if I remember correctly. So I went to the manufacturer's website and discovered that a firmware fix had been made available the day before. Apparently some counter was rolling over and originally only had enough bits to count three months worth of hours.
On the Cisco front I remember a few years back when I was working as part of a small team in a small office. The office was actually a converted barn but because we were a satellite office of a large multi-national we had quite a decent server room. Still - for the most part we just got on with some programming and a bit of hardware poking and ignored anything what happened in the server room.
Then one day a small packet arrived. In itself not unusual - we often had personal stuff delivered and even occasionally work-related hardware gubbins. But on opening it we discovered a small fan. No-one knew anything about it. So we checked the paperwork that came with it and discovered that it had been 'ordered' by one of our Cisco routers. It turned out that one of its fans had failed and apparently instead of just letting itself get all hot and bothered (we'd never have noticed until it finally went into melt down) it ordered a replacement part. I have to admit to being somewhat impressed by that.
Aye, plenty of bog roll but there weren't any eggs tonight (I didn't want any but noticed the shelf was empty). I can only assume everyone is spending their lock down baking cakes and/or bread. I do have enough wholemeal flour to make a couple of loaves but whilst you certainly can make wholemeal pizza base it detracts from the taste and it can be tricky to get the water content right.
On the plus side there was no queuing tonight and it was fairly empty so I was in and out in fifteen minutes.
Icon: need to bake soon, almost out of bread.
If you can find any bread flour. I've been having to buy store bread for the last month because it seems like suddenly every other bugger wants to bake their own bread. Rather unfortunately it was my last failed Tesco order that was going to replenish my own stocks so I was caught on the hop.
After this last weekend I'll now have to buy store pizzas as well. I wonder if they've finally worked out how to mass produce pizzas whose bases don't immediately turn into dry cardboard when cooked?
Did you miss the bit when I said it hadn't been released yet? I mean, sure, we could ship it (hopefully this year) still targeting .NET 4.5 but it's hardly an auspicious beginning for an application suite with an expected life time of a decade. It also doesn't help our team if we prevent them using new technology while working on new developments. Would you be happy to work on a new project that was targeting .NET 4.5 as part of a team where no-one had any practical knowledge of Core?
The project is still under development so we want to be using the latest tools and latest framework. We also want our team members to be up to date with developments so that we remain competitive and retain staff.
Our existing applications, sure, they pretty much stay where they are although we had to upgrade them to .NET 4.7 in order to get TLS1.2.
Yup, I call it implicit code (or sometimes automagical). It can save a huge amount of time and effort but one day when you least expect it your magical black box stops working and then good luck trying to fix it. Maybe you get an arcane error message but mostly you just have to hope someone else has encountered the problem and has a fix. Failing that you can only hack around in the hope of stumbling onto the magic incantation that gets it all working again.
.NET Core (which is now just .NET) is the way to go for all new developments
It must be nice to work somewhere that you only have to think about new developments. During the lifetime of our current project (not yet released after three years) there have been two significant changes to .NET and we've had to port our solutions twice in order to stay current - we've still yet to move some projects over to .NET Core. I've been developing for .NET for nearly 15 years now and it seems to get more confusing every year.
Not just the number of framework versions that you have to understand (and the various bodges needed over the years - remember the BCL bodge for async/await?) but also the different ways that the tools work (references are handled differently for .NET Core). How many iterations of Nuget package managing has VS gone through now? Is it four, five?
If .NET Core hangs around long enough it will start to simplify things but those of us with several years of projects to support are going to have to keep struggling through the confusion. I don't say it's a huge problem but trying to pretend that it isn't a problem is hiding an uncomfortable truth.
Much like comments in source code. That's why I prefer to use good identifier naming to indicate what the code is doing. The compiler doesn't care about comments so won't ever alert you if they become out of date. Plus in my experience most programmers don't read comments anyway.
Sadly I don't think there's any equivalent for wiring.
“[The] eclipse phase was the most delicate part of the flyby, with the spacecraft passing through the shadow of our planet and not receiving any direct sunlight for the first time after launch,” said Elsa Montagnon, ESA's BepiColombo Spacecraft Operations Manager.
Good news! The probe will soon be receiving a great deal of sunlight on its panels :)
It also sends a useful message to these scum: Don't bother attacking us again - you're just wasting your time and risking your freedom for nothing.
If everyone did that in such situations (and including kidnappings) the crimes would be far less common. Every time someone gives in to extortion they propagate the evil practice.
That's just sport though, I specifically wrote 'leisure activities'. Although Golf is a sport it's not particularly physical and I view it more as 'something to do that takes half a day'.
But my main point, really, is that it's not something that only the well-to-do play. It's within reach of almost anyone who has a job. The idea that only captains of industry and politicians play it is old fashioned. And having many years experience I can say that very few people talk about their jobs while they are playing. Quite the opposite - golf is a break from their jobs (and their families) - and they'd rather talk about almost anything else.
It irks me to see Golf portrayed like that. The vast majority of golfers (probably 95% at least) are 'working Joes' like me. For most golfers it is a hobby no different to any other outdoor hobby. Most golf courses are open to the public and most golfers aren't even members of a club (you only need membership if you want an official handicap or if you play a lot and can save money on visitors fees).
It's not even particularly expensive these days - it costs less than £200 to get the kit and at 95% of courses anyone can play for around £30. There's not many other leisure activities where you can get 4 hours of fun(*) for only £30.
The situation isn't quite the same over in the US of A - they have a lot of exclusive country club style venues - but here in the home of golf it's a sport for anyone with enough time. And from talking on forums even in the USofA it's not particularly exclusive, you're just slightly more limited in the courses you can play or might find overcrowding to be an issue.
(*)Fun isn't always the right term. Cycling has hills, football has mud, golf has bad shots :)
We just carried our desktops to our cars and took them home. A couple of people had to take their monitors as well but being programmers most of us already had everything else we needed. We don't even need to connect to the VPN very often because most of what we want is in the cloud.
Oh and IoC and interfaces are your friend. For instance we have an IPlatformSpecificHelper which offers methods for doing things that every platform does (eg; getting a Font, creating a bitmap) but does differently. At the heart is AutoFac and each platform has its own registration module which supplies the classes that actually implement the interfaces. So Wpf applications will be using WpfSpecificHelper and mobile apps use XamarinSpecificHelper. Since they both implement the above interface they can be passed into platform common code with impunity. In fact we use this technique extensively to allow us to separate functionality by module by assembly thus aiding in general code portability across our projects.
A related trick is to have an interface for platform specific objects eg; IPlatformSpecificFont. Then you use platform specific converters to return the actual object. I find that better than just using 'object' everywhere.
Actually something else I'd recommend is SyncFusion. They offer a very powerful set of Xamarin components. The only fly in the ointment there for us that we were already using DevExpress components on WPF so now we are paying for two third party frameworks.
Unfortunately it seems that DevExpress have given up supporting Xamarin.
For 'day to day' development you can mostly ignore the mobile stuff. Anything UI related involves a bit of extra thought but here's what we've done. We have split our view models into two parts. A common service class that contains as much of the VM logic as possible. These are then injected into 'target' specific view models where target is either 'desktop' or 'mobile', each of these VMs is as 'lite' as possible. There's a little bit of ugly if you want to bind to a property that is implemented on the service but you can hook into the notification event and in effect chain it:
_commonService.RaisePropertyChangedNotification += OnCommonPropChangedNotification;
..
private void OnCommonPropChangedNotification(object sender, e) =>
RaisePropertyChanged(e.PropertyName);
Then your lite property just returns the common property:
public Whatever Wibble{get =>_commonService.Wibble; set=>_commonService.Wibble=value;}
This does require that you keep the property names the same across classes which is a weak area but that's what unit tests are for I suppose.
Other than that the only biggie we ran into was the fundamental difference between how Wpf applications bootstrap and run and how mobile applications do it. Eg; Android has Activities. That pain is probably unavoidable, it's the nature of mobile.
My conclusions: If you have an existing Wpf team looking to create or migrate to a cross platform solution I think Xamarin is probably the least painful path. Now if you were taking on a whole new mobile only project it might be different. If you have no prior mobile experience then you should look at everything and I don't think C# is even a sensible choice for that.
It's been improving steadily. I suspect from your description that you actually it used it over two years ago. That's when I started using it and I agree that it was a pain. The tooling was chronic - ten minutes for a build and sometimes the build just hung or failed for no reason.
But since about summer last year it's become not a lot worse than Wpf development. Having to build on a Mac is still a pain and some debugger features aren't implemented or can be a bit fickle but it's nothing an experienced software developer should be shocked about.
I'd say that any Wpf development team considering a cross-platform product would be well advised to look at Xamarin. We support WPF, Android and iOS and 95% of our code is shared between projects. The only thing we have to do for the mobile versions is a bit of UI tweaking and occasionally inject platform specific services.
Yes, hmmm, RBLs might not work very well for IPv6 addresses
Assumptions don't work well for IT either ;)
It's rejecting based on the recipient. 'be3b1ce3b' isn't even close to the required format so the message is rejected immediately. My mail server has very strict recipient rules because I use a DEA system. That recipient name isn't even close to acceptable.
The only blacklisting my server does is on security violations. There are no IPv6 addresses in the list at the moment but I don't know if that's because it doesn't store them or because there have been no attacks from IPv6 addresses.
is there a problem with SMTP over IPv6 that I don't know about?
None whatsoever. My personal mail server supports it just fine. You can even get spam using it :)
22/3/2020 11:38:24.541 - Client:2001:EE0:4141:B State:RcptTo Action:Reject Rule:Reject general crap Size:129413 MAILFROM:blogerzoomcom@zewen.se Recipients:(be3b1ce3b@XXXXXXX)
Yup. A couple of years ago they rebuilt their core network but the only impact it had on their IPv6 offering was to kill off the beta program because it wasn't compatible with the new network. That was when I finally left. I went back to an ISP that had been running dual-stack for over ten years.
Oh iOS can be just as bad..possibly worse. I have a Mac Mini on my desk (purely for building Xamarin apps I hasten to add). Every now and then it will refuse to build or to apply an XCode update because it doesn't have enough space. When I investigate what is using all the space I find out that it's 'System'.
Or if you're lazy just buy a bread machine. I did that several years ago and have been using it a couple of times a week ever since. Not bought shop bread in a long time. My favourite recipe is 200g each of white and wholemeal flour, olive oil, salt, water and chia seeds. Stick all the ingredients in and set the timer before going to work in the morning. Return home to smell of baking bread :)
If I was buying a bread machine again (current one was bought in 2012 and still going strong) I'd go for the version that has a nut/fruit dispenser but I've done fine without.
I live alone. I'm currently forced to work from home which I love. I don't much like other people. The need to bump my Tesco orders above £40 over the years means I already have a good stockpile of non-perishable stuff. Golf courses are still open. I'm actually ahead of the game here.
I just wish that my dislike of other people extended to not caring about them. I could be really happy then :-/
Yup. A lousy UI and - in my case at least - no-one listed in recent contacts or favourites. How odd, given that we've been using it for over a year now.
And you have to question a client/server application which, when it needs you to log back in, has to first restart itself.
But what if instead of just a license plate, your car was also legally required to be connected via the internet to a privately run car-tracking service
https://www.mckinsey.com/industries/automotive-and-assembly/our-insights/telematics-poised-for-strong-global-growth
A lot (possibly most) new cars sold in the EU have this. It's not (yet) a requirement but eCall is and once you're forced to sell cars with GPS and telephony connections as standard, continuous data collection during operation is a logical step.
My Corolla has this, my previous Jazz had it.
I don't know if it will become as common in the USA but I have a feeling it will.
As opposed to the UK version, which in true British fashion, has only got as far as a delayed report about doing something.
For twenty years everyone where I live - and quite a few people just passing through - has wanted a bypass around Farthinghoe on the A422. Mrs Leadsom was so proud recently because despite screwing up the initial application she still managed to help secure funding...for a survey.
I fully expect the bypass to open the day after I retire and no longer have much need for it. So expect it to open in about seven years.
It's so nice to know that - according to that blog - the Transport Secretary has sent Northamptonshire County Council an Expression of Interest form. How jolly hockey sticks.
That's what I want to avoid. For years now one pair of spectacles did it all. Driving, reading and programming. They even darkened in bright light so I didn't need sunglasses.
Then a couple of years ago (age 50) I started to struggle a bit on some days programming and finally with this pair I just can't do it. I think what I need is a weaker prescription. One that gives me distance and intermediate vision. I don't often need the close prescription so for me it'd make more sense if I just had a pair of glasses just for reading.
At least that my glasses would still work for 95% of the time and I wouldn't have to put a different pair on when I get up to get a drink or attend a meeting :-/
Good luck with progressives. I used them for years but it got harder. My current pair (a year old) are useless for desktop work and only just allow me to use my laptop. I've had to buy a cheap pair of 1.5 factor glasses for programming and now have the hassle of two pairs of glasses to juggle at work.
Not had any major problems with WPF performance here. There are times when you have to a be little bit sensible about which/when properties are updated but we've only had to deal with that in places where updates were inherently spammy such as audio position information during playback.
The biggest complaint I'd level against WPF is the learning/toolbox curve but we got over that pretty quickly. Once everyone embraces MVVM and learns to shy away from code-behind and you build up a decent toolbox (mainly converters) things go well.
It also has the advantage of being very similar to Xamarin so by and large developers can move between the two freely and share a great deal of code. Typically you have a simple shared view model which has a platform specific service injected. I reckon 95% of our code base is shared between our Windows, Android and iOS client projects.