I was really disappointed to see that Winlink was dependent on Microsoft Windows but I was absolutely astonished that the only open source client (e.g. pac linux) were hosted on SourceForge and _still_ kept in CVS repository. That was a complete show stopper for me to even try to use the software or even feel compelled to contribute.
However, it's very disappointing to see all the closed sourced / propriety software and protocols in the Amateur Radio community since I feel the whole hobby is founded on DIY and hackers, in the true definition of the word.
Luckily, some very smart people are re-writing the Winlink 2000 libraries and apps using Golang, it's called Pat[1] which makes this tech much more viable in 2017. It's projects like this that give me a little more hope that this hobby is still active and has a chance at surviving.
The amateur radio population is getting older. Most hams I know are running Windows anyways (on at least one machine) -- for controlling their radios, weather stations, and such -- so most of the software they write is also for Windows. I imagine the target audience here (amateur radio operators who run Linux on the desktop and have a desire to use this protocol) is very small.
(On a side note, you should write your own open source Winlink client for Linux. Then, you can use the latest VCS-of-the-week and host it wherever you like. Apparently the author preferred to use Windows, CVS, and Sourceforge. It was extremely rude and disrespectful of him to not check with you first, so before you get started make sure that you ask me which language I want you to write it in.)
I've sailed with a guy who had a Pactor modem + SSB radio + frequency thingy + one of the rigging cables made into 11 meter antenna.
Yes, it was cool AF from nerdy standpoint - calculate propagation and you can dial anywhere in the world. But also it's a huge investment. IIRC Inmarsat gives you all-you-can-eat (apparently the spectrum gets quite saturated in some areas quite saturated) matchbox sized modem that connects to your iPhone for $100 per month.
You'd have to sail for many years to break even and probably have worse experience all the time.
Until very recently, satellite broadband was unobtanium for most leisure sailors. It's much cheaper now, but $800 for an Iridium Go hotspot and $124/mo for service is still steep for leisure sailors who might occasionally need to send an email at sea. Any bluewater boat should have a decent HF rig for safety, so adding a Winlink system is basically free.
> However, is it common for production C code to have a single file with 5,300+ lines?
It's definitely not uncommon, but yes, that file is on the long side. However, it is rather clean and well-organized.
It may be due to the poor module system (header files) of C where you end up making files slightly longer than ideal because splitting into two files means also adding some header files and thus adding to the maintenance burden.
When writing C code, I usually strive to put a whole "module" in a single file, so that no "private" interfaces have to be put in header files. Everything that needs to be exposed in order to test a module goes in the public interface.
It's a tradeoff and C being C doesn't help (and C++ wouldn't really help here IMO), but I see nothing wrong with the file you picked. It's a bit long but it looks well done to my C programmer eyes.
Right off the bat, I see multiple instances of str* functions where strn* functions should be used. I'm also wondering about this variable "server" which seems to have an unknown definition. There are lots of gotos, and many other deferred high-quality conventions, such as explicit parenthesis in comparisons, re-ordered fields in comparisons, chains of else ifs, where a switch would be preferable.
I also see lots of prototypes (all?!) defined at the top of the file instead of in a header file. They could be made static.
Also, the generic type "int" isn't a good idea because it can change, it helps avoid porting problems to specify the size (int32_t, uint64_t, etc.)
And the memcpy()'s should be changed to memcpy_s().
On the bright side, the comments are quite good and plentiful. Refreshing!
Location: Wisconsin
Remote: Yes
Willing to relocate: Only in Wisconsin
Technologies: PHP/Symfony/Laravel, Go, Git, MySQL/Mongodb, IoT, MQTT. DevOps, Docker, AWS, Ansible, Packer, Linux/Ubuntu, CI, Gitlab
Résumé/CV: https://linkedin.com/in/mathewpeterson
Email: me+hn@mathewpeterson.com
```
I've been working remotely for the past 4 years at a few different companies/startups in Wisconsin mainly working with Symfony2 and DevOps. Most of my background is split between PHP and DevOps - and happy to do either.
```
I'm really excited to see this because I've spent the last few months experimenting with Docker to see if it's a viable alternative to Vagrant.
I work for a web agency and currently, our engineers use customized Vagrant boxes for each of the projects that they work on. But that workflow doesn't scale and it's difficult to maintain a base box and all of the per project derivatives. This is why Docker seems like a no-brainer for us.
However, it became very clear that we would have to implement our own tooling to make a similar environment. Things like resolving friendly domain names (project-foo.local or project-bar.local) and adding in a reverse proxy to have multiple projects use port 80.
Docker for Mac looks like it will solve at least the DNS issue.
Just keep in mind that all these products are mass produced and are subject to imperfections. Really, the only thing that matters is how good their customer support is and Anker is probably better than most but they still have a long way to go.
I say this because I had one of their USB power ports that my children use to charge their iPads (2x 4th gen) that overheated and burnt up[1]. I completed the contact form on their website and used keywords like "fire" but it took my tweet to get their attention. Even after that, their response was fairly slow. After many weeks and me even shipping the defective product back, they only offered to refund me the cost of the unit, send a replacement power port, Anker brand lightning cables (to replace Apple genuine ones - and those broke), and send me an older generation battery pack. In the end, I did not pursue the replacements because I no longer had faith in their products or brand.
After all of this, I will no longer be purchasing or recommending Anker products.
IMHO there is no reason to ever be loyal to a brand anymore. Brand names are sold, the same two products are built or assembled by different subcontractors, the same two products contain bits and pieces manufactured by different companies at different times... There really is no reliable way to choose the best product without doing some research and often times you have to rely on enthusiasts or experts since frankly it's impossible to know everything about every product...
Their point is not that the product was low quality (although it was), but that the brand's resolution of the problem was of low quality.
Although it may not be possible to control an entire production chain, it is entirely possible to control the customer service department or at least the refund policy.
This may be true, but you still want someplace to start when you buy or recommend products. With certain brands / companies, you can become familiar with quality, cost, design, etc. You don't want to waste hours upon hours researching when you need something.
Even though Anker may not provide perfect products + service every time, they may be a good place to start looking for an accessory.
Wow, scary picture, nice tweet to get their attention (love the coloring page in the background). After a tweet like that I would expect any company to quickly refund your money and send you four apple lightning cables along with two of their top of the line power ports. Just to make up for that issue and keep you a happy customer. And possibly get a positive tweet from you.
Yeah, I agree. They had a many good opportunities to resolve the issue but failed to capitalize. But instead, I get to share my story with everyone who brings Anker products up.
Yikes, that is scary. I have read a few stories about USB chargers burning up like this. Was this one UL/CSA/ETL certified? Thanks for your story; hope you and your kids weren't hurt by the defective unit.
I'm not sure what certifications the device had but It was purchased less than 12 months ago.
Luckily both kids were not injured and were able to unplug the unit before it caused any major damage. Because there were no bodily damage, I didn't push the issue as hard as I could have.
I had a much different experience. I had a 5 port usb charger and all but one of the ports stopped working. I emailed them about it and they sent me a replacement without any questions.
> Host names that contain only one label in
> addition to local, for example
> "My-Computer.local", are resolved using
> Multicast DNS (Bonjour) by default. Host names
> that contain two or more labels in addition to
> local, for example "server.domain.local", are
> resolved using a DNS server by default.
Apparently there's nothing wrong with adapting, say, .dev.local (or
.ifft.local) with a coresponding hack, ahem, file, under
/etc/resolver/dev.local:
It seems to me that .local is reserved for purposes within a local network, not necessarily local to an individual computer itself. You could, for example, set up an internal server on your network and have it resolve with storage.local. You could argue that a collection of containers is basically the same thing, though.
That's a fair point. I had been using .dev for this purpose for years, and just applied it to this project out of habit. It still doesn't fully resolve to anything from Google, but I see that ICANN is now resolving it to 127.0.53.53 to indicate a name collision. Many other projects (like Boxen) also use .dev, so it seems to still be something that people do.
You can write all the configuration in groovy and it will execute when the Jenkins process starts up.
There is also "Jenkins Configuration as Code" plugin which allows you to have a single yaml file to configure most of the Jenkins system.
https://github.com/jenkinsci/configuration-as-code-plugin/bl...