teleren/devto huggingface dataset:
:hover should be dead
Tags: frontend, css, design
Published: 2018-09-25 03:19:04

---
title: :hover should be dead
published: true
tags: front end,css,design
canonical_url: http://designfrontier.net/hover-should-be-dead
---

`:hover`’s days are numbered. It has little time left in this world.

I am serious.

Here are the main reasons why:

- It doesn’t exist on touch devices

- It isn’t really accessible

- It often creates frustrating interactions

### Touch Devices

I said touch devices, not mobile, for a reason. Touch devices are expanding out of our phones and into our environment at an increasing rate. They are also expanding into our laptops and desktops. So saying your "target market" is desktop doesn’t mean you can use `hover`.

Because that guy on a [Dell Inspiron](http://www.dell.com/us/p/inspiron-15-5559-laptop/pd?oc=fncwv2319s&model_id=inspiron-15-5559-laptop) that he paid $650 for is also going to struggle with them when he touches your website with his fingers. He might switch back to his touchpad... but he also might just leave frustrated he can’t figure out how to open your menu.

### Accessibility

Keyboard users don’t get `hover`. They get `active` but not `hover`. That’s a big deal. Screen readers also aren’t the best with faking `hover` if they do it at all. They are great with `active` though.

### Frustrating Interactions

Just think about nested hover state menus. There is a reason desktop applications require you to click on at least that first level of menus. Because accidentally moving your mouse off of the menu you just opened shouldn’t close it.

This could have landed under accessibility as well. Imagine for a moment browsing your site with a hand that has a tremor. Think about how hard your menu would be for me if my hand shook.

[UX Movement](http://uxmovement.com/navigation/why-hover-menus-do-users-more-harm-than-good/) has some nice images and discussion around "hover tunnels" and why they are a huge problem for users.

### death to `hover`

So let’s get rid of `hover`. It doesn’t actually make anything better and it makes lots of things worse. It is a "clever" interaction not a good one.
EC2 + Route53 for Dynamic DNS
Published: 2023-04-29 22:27:17

---
title: EC2 + Route53 for Dynamic DNS
published: true
date: 2016-03-12 15:28:06 UTC
tags: 
canonical_url: https://mikestaszel.com/2016/03/12/ec-route-for.html
---

Recently I ran into a problem while working with Amazon EC2 servers. Servers without dedicated elastic IP addresses would get a different IP address every time they were started up! This proved to be a challenge when trying to SSH in to the servers.

**How can I have a dynamic domain name that always points to my EC2 server?**

Amazon’s Route53 came to mind. Route53, however, does not have a simple way to point a subdomain directly to an EC2 instance. You can set up load balancers between Route53 and your instance, but that’s a hassle. You can also set up an elaborate private network with port forwarding — yuck.

I wanted a simple way to set a Route53 subdomain’s `A` record to point to an EC2 instance’s public IP address, on startup.

Enter [go-route53-dyn-dns](https://github.com/mk6502/go-route53-dyn-dns). This is a simple Go project that solves this problem. It is a small binary that reads a JSON configuration file and updates Route53 with an EC2 instance’s public IP address.

Included in the GitHub `README.md` file is how to set everything up.

The project is here: [go-route53-dyn-dns](https://github.com/mk6502/go-route53-dyn-dns).
The Future of Software Development and the Decline of Determinism
Published: 2016-03-03 16:17:41

<p>The proliferation of open source and software-as-a-service products means that, increasingly so, your software will be one with the universe. As time passes and the internet matures, writing code is going to be more about coordinating efforts between managers of open source projects and &ldquo;software as a service&rdquo; providers.&nbsp;The efficiency gains of not re-implementing someone else's well-developed&nbsp;software will make this increased distribution&nbsp;inevitable and fast. Our&nbsp;efforts will need to take this into account and it will change the way we write code.</p>
<p>This model of distributing code concerns does not inherently change the way we should fundamentally think about architecting our code but it will change the processes&nbsp;we use to execute our architectures. Principles of building clean&nbsp;application interfaces with maximum code decoupling have always been of vital importance and that will not really change on a micro-level. What will change is how we must coordinate, communicate and test our software. When more of your code relies on external forces, you will not be able to rely on scheduling and deadlines like you once tried to. If an open source maintainer or a service provider&rsquo;s schedule does not match up with yours, you can do a bit to help, but ultimately you must shift your process to account for the many asynchronous timelines you will be working with.&nbsp;The <a href="https://en.wikipedia.org/wiki/Agile_software_development" target="_blank">agile methodology</a> of software development predicts and accounts for a lot of the uncertaintly but we must pay attention to evolving needs in order to make&nbsp;these practices adaptable to modern demands.</p>
<p>Open source and SAAS have already achieved their revolutions so you could say the future is already here, but I want to tell you that it will only get more... futury. We have, by and large, not yet adopted our &ldquo;best practices&rdquo; to account for these factors. We still try to do more in-house than we need to do, we still rely too much on internal timeframe estimations and deadlines that are harder and harder to pin down and we still rely on testing infrastructures that mock and stub ad nauseam to account for the lack of control within our systems, making far too many assumptions about the reliability of our code.</p>
<p>The future of software development and testing will be about building maximally flexible systems, solid lines of external communication, extensive documentation, and automated testing infrastructures that act more like monitoring solutions than deterministic systems as we often see them today. More of the logic core to your business or project will not live within your walls and will not be under your control in the strict manner it is today, just as the servers of your code have long since left the building. In exchange for the control we are used to, we will gain immense power by coordinating our efforts. We just need to be ready and accepting.</p>
<p>&nbsp;</p>
Are you bikeshedding? Probably!
Tags: questions, bikeshedding, rant, work
Published: 2018-02-10 22:33:52

---
title: "Are you bikeshedding? Probably!"
published: true
tags: questions,bikeshedding,rant,work
canonical_url: https://stefancosma.xyz/2016/03/03/what-is-bikeshedding/
---

 ![Are you bikeshedding? Probably!](https://stefancosma.xyz/content/images/2016/03/chateausable2.gif)

You have no idea what I'm talking about, right? That's because not many people use the term **bikeshedding**. It's not a usual term that people just throw around all the time.

**Bikeshedding is when you argue about some meaningless thing and tend to avoid the more important issue at hand.**

For example Urban Dictionary tells us this:

> Technical disputes over minor, marginal issues conducted while more serious ones are being overlooked. The implied image is of people arguing over what color to paint the bicycle shed while the house is not finished.

Let's take the above image as an example. You see the stick men trying to dump all the water out of the sand castle but avoid the fact that 1. the castle is made of sand and 2. they have a river below their castle that floods said castle.

In some ways it's like **procrastination**. You waste your time doing/talking about things that should not be your main focus in the first place.

This is a growing issue in the tech community. I've worked on projects where the more important issues, like scalability, were overlooked because we couldn't decide how many items should a query contain.

So, I propose, as Chris Coyier already said in [his article](https://css-tricks.com/what-is-bikeshedding/), next time you're in a meeting and you see two people arguing about some meaningless thing, yell **bikeshedding!**

Until next time, code long and prosper!

Stefan

_Image credit: [Guillaume Kurkdjian](http://guillaumekurkdjian.com/)_



_This post was originally published on [stefancosma.xyz](https://stefancosma.xyz/2016/03/03/what-is-bikeshedding/)_
Empty C++ COW strings
Tags: cpp, cow, string
Published: 2021-11-01 21:45:57

---
title: Empty C++ COW strings
published: true
date: 2016-03-03 00:00:00 UTC
tags: cpp,cow,string
canonical_url: http://aivarsk.com/2016/03/03/empty-cow-strings/
---

GCC implementation of standard C++ library used to have Copy-On-Write std::string implementation. It had the benefit of making string copies fast but it also made strings hard to use in multi-threaded programs. Then C++11 happened and prohibited(?) COW implementations and GCC5 has another implementation of std::string with optimizations for small strings. Yet GCC 4.x still uses COW strings even in C++11 mode for binary compatibility reasons.

Over the years I trained myself to look for bugs caused by the abuse strings as in the example below:

```
std::string a("A");
std::string a2 = a;

printf("'%s' '%s'\n", a.c_str(), a2.c_str());
*(char *)a2.c_str() = 'B';
printf("'%s' '%s'\n", a.c_str(), a2.c_str());

```

As the result changing the value of one string it silently “changed” the value of some other string because they all point to the same memory structure:

```
'A' 'A'
'B' 'B'

```

GCC5 fixes that implicitly:

```
'A' 'A'
'A' 'B'

```

This issue was quite easy to find during code reviews because the strings were close to each other in the code and raw pointers and casts are screaming “here be bugs”.

Recently I debugged another issue with COW strings caused by legal but slightly incorrect C++ code. Turns out that GCC C++ library implementation optimized empty strings as well: the default constructor of std::string creates strings that all point to the same empty string singleton. It’s easy to mess up the empty string using the first technique. But it’s also easy to do with a perfectly legal operator[] but forgetting to perform bound checks. In all other cases operator[] would create a copy of the shared memory structure but for some reason it silently skips doing a copy for empty strings instead of doing it, raising exception or aborting the program. Good luck finding the single erroneous assignment million lines of code away from where it shows on the surface!

```
std::string empty;
// in a code far, far away...
std::string empty2;

printf("'%s' '%s'\n", empty.c_str(), empty2.c_str());
empty2[0] = '?';
printf("'%s' '%s'\n", empty.c_str(), empty2.c_str());
std::cout << "'" << empty << "' '" << empty2 << "'\n";

```

C++ code that checks the size of the string will continue to work (like std::cout) but C-style strings and I/O will look really strange:

```
'' ''
'?' '?'
'' ''

```

Oh by the way, GCC5 implicitly limits the scope of damage in this case as well:

```
'' ''
'' '?'
'' ''

```

All this confirms that it’s easy to shoot yourself in the foot with C++ but it also shows how much better a C++11-compliant implementation is compared to the “old” C++.
WordPress Custom Login Form Part 1
Tags: wordpress, learning
Published: 2020-09-25 04:44:47

---
title: WordPress Custom Login Form Part 1
published: true
date: 2016-03-01 00:00:00 UTC
tags: WordPress,Learning
canonical_url: https://www.loginradius.com/engineering/blog/wordpress-custom-login-form-part-1/
---

I often come across people and clients who would like to build their custom login, registration, and lost password form in WordPress instead of using the default wp-login.php page. It's probably because it's too wordpress-y. In this tutorial, I will demonstrate how to build a…

   
[Read On](https://www.loginradius.com/engineering/blog/wordpress-custom-login-form-part-1/)
Coding myself into a corner
Published: 2022-06-07 05:36:35

---
title: Coding myself into a corner
published: true
date: 2016-02-25 20:00:45 UTC
tags: 
canonical_url: https://www.funkysi1701.com/posts/2016/coding-myself-into-a-corner/
---

I spend an awful lot of my working life adding new features and improvements to a legacy database system.

A **legacy** system is an old method, technology, computer system, or application program, “of, relating to, or being a previous or outdated computer system.” Often a pejorative term, referencing a system as “ **legacy** ” often implies that the system is out of date or in need of replacement.

My particular legacy system is Microsoft Access. We use Microsoft Access to provide the front end for all our internal databases. The particular technology we use is ADP files which are only supported in Access 2000, 2003 or 2010.

Microsoft has already dropped support for Access 2000 and 2003, and support for 2010 is due to be dropped in 2020.

So why am I coding myself into a corner? Its simple for every feature or improvement I create in Access, I increase the amount of features I need to create or port to a new front end.

This is a very depressing thought, everything I create will need creating again. I am not saving myself work but increasing the amount of work I need to do again.

The bad news is that my employers like almost all businesses demand results and like a good employee I have been delivering them. I have been promised the mythical “when we are quiet” you can work on rebuilding the database front end. I know this will likely never happen so what are my options.

**Do nothing** I have warned my managers that this work needs doing and it is up to them to give me the resources I need. This is not an acceptable option. Firstly I am not future proofing the business, 2020 will be here before we know it. Also I am not developing myself as a developer, as the only experience I am getting is with Legacy technology that has expired or will do very soon. No one wants to employ someone who only has legacy experience.

**Do something** I need to keep delivering results and doing what is asked of me. Like any good engineer I should be multiplying my estimates by four, meaning that I have some time that can be used for looking at the bigger picture. This is a win-win option really. Employer gets a solution that is future proof, Employee gets valuable experience in up to date technology.

What do you think? Have you been tied to legacy technology? Why not leave a comment below.
Is Your Database Secured? Think Again
Tags: database, security
Published: 2020-09-25 04:45:03

---
title: Is Your Database Secured? Think Again
published: true
date: 2016-02-23 00:00:00 UTC
tags: Database,Security
canonical_url: https://www.loginradius.com/engineering/blog/is-your-database-secured-think-again/
---

1. Secure your server Many known attacks are possible only once physically accessing a machine. For this reason, it is best to have the application server and the database server on different machines. If this is not possible, greater care must be taken, Otherwise, by executing…

   
[Read On](https://www.loginradius.com/engineering/blog/is-your-database-secured-think-again/)
A Tour of Go – Exercise Solutions
Tags: go
Published: 2016-02-22 22:20:00

---
title: A Tour of Go – Exercise Solutions
published: true
description: Explored Go via 'A Tour of Go', enjoyed its simplicity and engaging exercises 
tags: golang, go
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
published_at: 2016-02-22 22:20 +0000
---

I spent the past weekend learning Go. [A Tour of Go](https://tour.golang.org/list) is a great resource to quickly come up to speed with Go. It’s a very small language (the spec is only around 50 pages!) and is really easy to pick up if you are already familiar with languages like C, JavaScript, Java or C#. I really liked the exercises that were scattered around in the tour. The ones that I found interesting were:

- [rot13Reader](https://tour.golang.org/methods/23)
- [Equivalent Binary Trees](https://tour.golang.org/concurrency/8)
- [Web Crawler (the most interesting one!)](https://tour.golang.org/concurrency/10)

I’ve put up my solutions to all the exercises in a Github repository – https://github.com/parambirs/atourofgo-exercises. I’d be interested in seeing alternate solutions and discussing different approaches to solving these exercises in Go!
Be More Manipulative with Underscore JS
Tags: javascript, underscorejs
Published: 2020-10-01 06:19:41

---
title: Be More Manipulative with Underscore JS
published: true
date: 2016-02-16 00:00:00 UTC
tags: JavaScript,UnderscoreJs
canonical_url: https://www.loginradius.com/engineering/blog/be-more-manipulative-with-underscore-js/
---

Manipulating collections like arrays and objects can be a hassle with vanilla JS. Thankfully there are libraries like Underscore which offer some extremely useful low level utility functions. Underscore JS provides much of the array/collection/object manipulating functionality…

   
[Read On](https://www.loginradius.com/engineering/blog/be-more-manipulative-with-underscore-js/)
Quick Tip: Grepping Rails Routes
Tags: ruby, rails, commandline
Published: 2016-02-14 18:44:19

<p>It is probably safe to say that <em>most</em> Rails developers today are working off either Linux or Mac. However, extensive knowledge of *nix command line tools is not usually required to be a proficient Rails dev. In todays tip, i'll be showing a super simple use case for the <code>grep</code> command to quickly filter the routes output.</p>
<p>As you probably know, <code>rake routes</code> (also <code>rails routes</code> in rails 5) prints a list of all routes in your application - simple enough. As a project grows however, the <code>routes.rb</code> file can get pretty large fairly quickly. This can make finding the actual route you are looking for tough, especially after adding a few engines.</p>
<p>The fix:</p>
<pre><code>rake routes | grep KEYWORD</code></pre>
<p>This will filter the output of the lines to match your keyword.</p>
<p>To return all routes related to a controller, simply add the name of the controller:</p>
<pre><code>rake routes | grep users</code></pre>
<p>To return all routes with a specific HTTP Verb, simply add GET, POST, PATCH:</p>
<pre><code>rake routes | grep GET</code></pre>
<p>To return all routes related to an action:</p>
<pre><code>rake routes | grep update</code></pre>
<p>Super simple, but I find it really useful.</p>
My First Open Space
Tags: agile
Published: 2020-03-28 21:42:57

---
title: My First Open Space
published: true
date: 2016-02-11 05:42:54 UTC
tags: Agile
canonical_url: http://blog.boochtek.com/2016/02/10/first-open-space
---

I recently attended an Open Space hosted at work. I’d never been to an Open Space, and didn’t know what to expect. We’d been told that this was a workshop to help Engineering Managers (my role), Product Owners, and Product Analysts find better ways of working together. But due to the way an Open Space works, it evolved into something completely different — and better.

We’d brought in Diana Larsen to facilitate the Open Space. Diana is a stalwart of the Agile community, focusing on how people and teams interact. She literally (co-)wrote the book on Agile retrospectives. Diana was also kind enough to be our guest at an Agile LINC meetup later in the evening.

The morning started off with all the participants sitting in chairs arranged in a circle. Diana rang a chime, a nice soothing tone that literally set the tone for the day. (Most people didn’t seem to like it, but I thought it had its purpose.) It also acted as a call to gather in the meeting space. She then walked around the inside of the circle as she explained what was going to happen.

The idea behind Open Spaces came with the realization that at a conference, the “hallway track” (ad hoc discussions in the hallways) was often more valuable than the scheduled talks. So they figured out a way to capture that experience. There are only a few rules:

- Whoever shows up is the right group
- Whatever happens is the only thing that could have
- Be prepared to be surprised
- Whenever it starts is the right time
- When it’s over, it’s over
- The Law of 2 Feet: If you’re not learning or contributing, go somewhere else

Once Diana set the scene and explained the rules, people came up and presented ideas for topics. If you proposed a topic, you chose a time and location on the topic board. At that time, you’d facilitate a discussion on that topic. The format was really conducive to discussions. There was no preparation, so discussions were from the heart — lots of people felt that they could contribute.

Being new to the company (only 2 months), I got a lot out of the workshop, beyond the content itself. I got to get to know several more people. I’d even say I made a few friends. Having open discussions, we found that many of the teams were having the same issues. This made it easy for me to talk to other people.

All-in-all, I found the Open Space to be extremely conducive to discussions aimed at identifying issues, brainstorming solutions, and planning action items. I felt like we made great strides in addressing some of the biggest problems our organization is currently facing.
Open Source Contributions Are Part of My Professional Development
Tags: opensource, softwaredevelopment
Published: 2019-07-05 03:03:54

---
title: Open Source Contributions Are Part of My Professional Development
published: true
tags: open source, software development
canonical_url: https://tryexceptpass.org/article/open-source-contributions-are-part-of-my-professional-development/
cover_image: https://tryexceptpass.org/images/open-source-contribs.png
---

### Should we have the right to contribute to open source?

“Boy did I spend a bunch of time organizing all my issues today” — he said while trying not to sound like a whiner — “You know… I found this neat tool yesterday that easily integrates with our repository management software. It adds project management capabilities that would save us time. Might be interesting to take a look?” — He ended his sentence with a question, something that he absolutely hates doing, a sticking point he’s had since spending a lot of time with a coworker that incessantly did that. He definitely did not want to sound insecure while talking to his manager.

The manager looks up, away from the computer screen in which he was diligently reassigning issues to their newly requested releases, and instead answers with the dreaded: “Is that tool freeware? Did you download it?”. The programmer, a lonely, isolated peon that was simply trying to make his own life easier, was definitely not expecting that response, and so he answered with the unfiltered truth (those of you that often communicate with management know what I’m talking about).

[Read on ...](https://tryexceptpass.org/article/open-source-contributions-are-part-of-my-professional-development/)
Extended LinkedIn API Usage
Tags: linkedin, sociallogin
Published: 2020-10-01 06:19:57

---
title: Extended LinkedIn API Usage
published: true
date: 2016-02-09 00:00:00 UTC
tags: LinkedIn,SocialLogin
canonical_url: https://www.loginradius.com/engineering/blog/extended-linkedin-api-usage/
---

LinkedIn has recently revamped their API systems and added many new restrictions. We will go through some examples on how you can utilize the LinkedIn Javascript API in order to setup some useful features that comply with LinkedIn's new terms and conditions and use cases. Getting…

   
[Read On](https://www.loginradius.com/engineering/blog/extended-linkedin-api-usage/)