• Activity
  • Votes
  • Comments
  • New
  • All activity
    1. Make threads Kindle / print friendly

      I wished to set aside some threads to read on my Kindle. I use the Kindle Chrome extension for that, but on Tildes it only captures the main topic, not the comments. I tried saving the page...

      I wished to set aside some threads to read on my Kindle. I use the Kindle Chrome extension for that, but on Tildes it only captures the main topic, not the comments. I tried saving the page locally but the Kindle app still didn't work. My only option on Chrome seems to be printing to PDF, but that's a subpar solution. I was able to convert the offline page to mobi using Calibre, though, but this is not very practical and the result was not that good.

      maybe I should have written conversion friendly, because printing to paper/PDF is working fine

      12 votes
    2. What sort are you using for your front page?

      I'm here for a few hours during the day while at my shop (EST), and usually about two more in the evening, around 9:00 pm. Every important thread I read (announcements, site discussion,...

      I'm here for a few hours during the day while at my shop (EST), and usually about two more in the evening, around 9:00 pm. Every important thread I read (announcements, site discussion, well-commented threads) seems to be at least 12 hours old, with most being more like 19 hours old. It's hard to get in on the conversation when every thread I reach where I'd like to comment is that aged.

      If I look at the last 12 hours, I get a bunch of threads with 0-5 comments. Maybe there's not a great solution, but it's hurting my contributing here because no one really wants to dredge up a conversation that people had yesterday or the day before.

      So, what sort are most people using, and does anyone else see this issue, or is it just difficult to create a sort that would assure my seeing threads that get "hot?"

      16 votes
    3. Make clicking on the indent line collapse comments to that level

      Whilst I am no fan of reddit's redesign, one of the features I liked about it was the way you could click on a indent line to collapse the child comments at that level. Whilst tildes displays...

      Whilst I am no fan of reddit's redesign, one of the features I liked about it was the way you could click on a indent line to collapse the child comments at that level. Whilst tildes displays these indent lines, clicking on them does nothing, and you have to scroll up to get to the collapse button. Another possible solution would be to collapse comments under the cursor when a hotkey is pressed, although this could be awkward due to both mouse and keyboard being used.

      15 votes
    4. What are the best practices regarding personal files and encryption?

      Over the past year I have done a lot to shore up my digital privacy and security. One of the last tasks I have to tackle is locking down the many personal files I have on my computer that have...

      Over the past year I have done a lot to shore up my digital privacy and security. One of the last tasks I have to tackle is locking down the many personal files I have on my computer that have potentially compromising information in them (e.g. bank statements). Right now they are simply sitting on my hard drive, unencrypted. Theft of my device or a breach in access through the network would allow a frightening level of access to many of my records.

      As such, what are my options for keeping certain files behind an encryption "shield"? Also, what are the potential tradeoffs for doing so? In researching the topic online I've read plenty of horror stories about people losing archives or whole drives due to encryption-related errors/mistakes. How can I protect against this scenario? Losing the files would be almost as bad as having them compromised!

      I'm running Linux, but I'm far from tech-savvy, so I would either need a solution to be straightforward or I'd have to learn a lot to make sense of a more complicated solution. I'm willing to learn mainly because it's not an option for me to continue with my current, insecure setup. I do use a cloud-based password manager that allows for uploading of files, and I trust it enough with my passwords that I would trust it with my files, though I would like to avoid that situation if possible.

      With all this in mind, what's a good solution for me to protect my personal files?

      26 votes
    5. An informal look at the concept of reduction (alternatively: problem-solving for beginners).

      Preface One of the most common questions I see from prospective programmers and computer scientists is "where should I start?". My answer to that is a pretty consistent one: learn how to solve...

      Preface

      One of the most common questions I see from prospective programmers and computer scientists is "where should I start?". My answer to that is a pretty consistent one: learn how to solve problems effectively. But that's vague and not really all that helpful, so I figured that I should actually tackle this in a little more depth by touching on something more specific.

      Specifically, I want to touch on the subject of how to think about complex problems.


      The Rationale Behind Learning

      Before we can better understand how to effectively solve problems, it's important to consider how it is that we learn. With any subject, the standard approach is to begin with the bare basics. For programming, that's writing a Hello, World! program in the new language you're working with. For foreign languages, you learn basic common words and sentence structure. For math, you learn your basic arithmetic operations like addition and multiplication.

      From there, we add on more additional complexity and string together everything we've learned. For a foreign language, this looks like learning about new words, stringing them together in your own sentences, then learning about verb tenses and throwing them into the mix as well. With math, you take your normal number crunching and suddenly throw the concept of order of operations into the mix, then variables and how to solve for them.

      As a general rule, we first get comfortable with solving a simple problem and gradually build up toward solving increasingly more difficult ones.


      The Missing Piece

      Odds are that we've all sat in a math class at one point, and when the teacher asked a student how to solve a problem, they received an immediate "I don't know". You may or may not have been that kid yourself. I have no intention of shaming the kids who struggled (or those who still struggle) with math. Rather, I want to point to what I believe is the fundamental cause of that mental barrier that has frustrated students for generations.

      Learning is not simply a matter of adding more complexity to problems. A key part of learning, and one that I don't recall ever having emphasized during my grade school studies, is your ability to break problems down into the steps that you know how to complete and combine the different, simpler skills you've already learned to arrive at a solution. Instead, you were expected to solve many of those complex problems and learn through practice, or through pure rote memorization.

      What determined whether or not you could solve those problems was then a question of whether or not you could intuit or memorize how to solve those specific problems, and brand new problems that still made use of the same skill sets but had completely different forms would throw a wrench in that. Those who could solve any of those problems--those who, I would argue, were often mistakenly referred to as "geniuses" or "talented"--were really just those who knew how to break a problem down into simpler pieces.

      This isn't a failing on the students, but on the way they've been taught to think about problems.


      Reducing Problems

      What does it mean to "break down" a problem, though? The few times I recall a teacher ever touching on the subject, "break down the problem" and "use the skills you've already learned" were the kinds of pieces of advice passed around, completely vague and devoid of meaning for anyone who didn't already understand. How can we better grasp this important step?

      There's a term in complexity theory known as "reduction". The general idea is that if you have problems A and B, where you already know how to solve B, then if you can transform problem A so that it looks like problem B, then you can use your solution for B to solve at least part of A.

      In other words, finding the solution to a more complex problem is just a matter of finding a way to make it look like a problem you already know how to solve.

      The advice to "break down" a problem really means to perform this process of "reduction", of transforming your more complicated problem A into your simpler, known problem B.


      In Practice

      We're still discussing a vague concept, but now that we have more specific language to work with, we can more easily see how it works in practice (a reduction of its own!).

      Let's consider a conceptually simple problem: grabbing the kth largest (or smallest) item from a list. How do we solve this problem? Probably the most obvious and straightforward answer is to sort the list then grab the kth item, right?

      Notice that we gave two high-level descriptions of the steps we need to solve this problem: sorting, then grabbing the appropriate item. We can therefore then state that the problem of "grab the kth largest/smallest item from a list" can be reduced to the two problems "sort a list" and "grab the kth item from a list".

      Now, let's say we're given the problem "take this list of competitor times from the race and tell me what the top 10 race times were". What do we know about this problem? We know that we're being given a list, and we know that we need the 10 smallest items from that list. We also know that "10 smallest items" is just shorthand for "the 1st smallest item, the 2nd smallest item, ..., and the 10th smallest item". We can therefore reduce this problem to the previous one we solved by transforming it into "grab the kth smallest item from a list" and "repeat for values 1-10 for k".


      Practical Advice

      In the end, my explanation may not have helped much at all in actually grasping the concept of reduction. My intent isn't necessarily to help you understand it immediately, but to provide you a framework for a way of thinking. Even if you do grasp the general concept, you may even wonder how you're supposed to recognize these kinds of reductions out in the wild in non-academic environments. The answer, perhaps annoying, is practice. Much like an appraiser can only become good at discerning details through experience, a programmer or computer scientist can only recognize these patterns through repeated exposure.

      In general, if I had to narrow it down to a small list of tips for improving your problem solving skills, this would be it:

      • Work on grasping the concept of reduction itself.
      • Expose yourself to lots of new problems.
      • Don't shy away from difficult problems. Reduce them as much as you can and solve the pieces you're able to. Try to research the pieces you're struggling with. Return to the problem later when you have more experience if you have to, but take a crack at it first.
      • Don't accept "I don't know" as an answer in itself. Ask yourself why you don't how to solve a problem. Narrow down which pieces you're able to solve and which pieces you're not.
      • Just solve problems. Any problems. Easy ones, hard ones, and anything in between. Solving problems is a skill, and practicing it will make you better at solving problems in general, and better at recognizing the simpler problems inside of more complicated ones.
      • Don't just come up with a solution to a problem. Ensure that you understand how each piece of it works and why it works. Copy-pasting from StackOverflow can be a valid tool at your disposal, but doing so mindlessly isn't nearly as valuable as reviewing the solution, being able to determine whether or not it works before ever executing the code, and being able to discard anything unnecessary from it.

      Final Thoughts

      I'm not an authoritative voice on this subject. I'm not an educator. More than anything, I'm a life-long student and an enthusiast. There's seldom a day when I don't have to research something new in order to solve a problem I'm not familiar with, or remind myself the syntax for a function I've used several times in the past. I don't know anything about teaching others, but I do know plenty about learning, and if there's anything that has stood out to me over the years, it's the fact that I find it easier to learn about something or to solve a problem if I can transform the concept into something that's easier for me to grasp.

      Moreover, I'm human and thus prone to mistakes. Call me out on them if you notice them. I'll take any of my mistakes as learning opportunities :)

      11 votes
    6. Programming Challenge: Compute the shortest path to visit all target spots on a grid.

      Let's do something a little more challenging this time. Given an MxN grid of arbitrary size, and given a random starting place on that grid and a list of points to visit, find the shortest path...

      Let's do something a little more challenging this time.

      Given an MxN grid of arbitrary size, and given a random starting place on that grid and a list of points to visit, find the shortest path such that you visit all of them. Path lengths will be computed using taxicab distances rather than strict coordinate distance calculations.

      There are no restrictions on expected input this time. Output should be the total distance traveled between points.


      Example

      Assume that we use the character # to denote a spot on the grid, the character @ to denote your starting point, and the character * to denote a place on the grid that you're required to visit. One such grid may look something like this:

      ######
      ######
      **####
      #*####
      #*#*##
      #@####
      ######
      

      In this case, let's say that the bottom-left point on the grid is point (0, 0) and we're starting on point (1, 1). One valid solution would be to move to point (3, 2), then (1, 2), then (1, 3), then (1, 4), and finally (0, 4). The shortest path available is thus 8. Note that it's not enough just to visit the next nearest point on the grid!

      15 votes
    7. How do you store your bookmarks?

      I'm curious what Tildes uses to organize and store their web bookmarks. Do you rely on your browser, or do you trust some proprietary service like Pocket? Maybe you have a self-hosted solution?

      13 votes
    8. Linking related topics together - like a futher reading list

      Could we have a feature where similar posts can be linked/tagged and showup somewhere obvious, so you can access both posts from each other, linking the two. Something anyone visiting the topic...

      Could we have a feature where similar posts can be linked/tagged and showup somewhere obvious, so you can access both posts from each other, linking the two. Something anyone visiting the topic can do.

      So there is a link from post A to B but also B to A. You then kind of get a chain of relevant posts, like a further reading list. Maybe only showing topics that are two-three links deep, idk that's just details.

      I really like the way r/AskHistorians does it where because of the moderation it's always very easy to find the comment that links previous discussion, but again that solution is not reversible, from the linked topics I can't get to the current topic.

      It encourages people to look over previous posts and engage in those discussions, and to participate in a larger discussion across the site. Potentially with one topic link you can get 4-5 other topics.

      It should help with answering frequent questions or concerns as it's easy to connect relevant discussion. But also pretty much any other discussion, say nuclear energy is discussed extensively here, and follow the links to the other places people have discussed it, give readers the site context for a topic, and a convenient way to look for further discussion.

      I mostly see it being used by a poster who has already answered a question in a previous post and will link the reply in a comment, but this way it's far more accessible to anyone viewing the topic and not lost in the comments. Or maybe someone was interested enough to look further themselves and I've got to believe they would feel generous enough to bother linking the two topics they spent time looking for. Making it just more convenient for everyone.

      Take for example this foss topic, I posted basically a follow-up topic about specific foss software.

      So a comment can be posted linking the relevant topic but that can easily get lost in the fray and does nothing to link the original topic to the new one. Yeah if someone was really interested they could search the foss tag and easily find it but it's much more convenient with it linked and only one person needs to go through the process of searching.

      I kind of like the idea but can see how it's very similar to the tag system and groups. In practice though I just use tags and groups to filter out stuff I don't want to see and sometimes to help with searching.
      This would be a feature that focuses to continuing the discussion, and making it more convenient to do so.

      15 votes
    9. A group we are missing, that I would really like to see is ~Culinary. Would anyone else be interested?

      I think ~culinary would be beneficial to see, it could include areas like; ~culinary.news ~culinary.recipes ~culinary.videos ~culinary.photography I am a little biased because of my profession...

      I think ~culinary would be beneficial to see, it could include areas like;

      ~culinary.news

      ~culinary.recipes

      ~culinary.videos

      ~culinary.photography

      I am a little biased because of my profession (Sous Chef), but I do see a lot of Culinary related posts that are spread out over several different groups. It would be nice to have them organized into their own group.

      And if anyone is worried about it being active, I subscribe to several culinary news sites that I rarely post here so It would give me a chance to share some of that stuff. Not to mention giving us a place to share already popular Youtube series and recipes.

      I know this content doesn't lend to discussion as much as others, but it would still be high quality.

      EDIT: Maybe a solution is to have more of those posts end up in ~food instead of being spread out. Although I feel like the ~food heading is a little more restrictive, so maybe rename ~food to ~culinary?

      10 votes
    10. Replying from my notifications sometimes makes me duplicate someone else’s response, since I didn’t see it - solution ideas?

      Sometimes I reply to a comment via my notifications page, then when I go look at my reply in the context of the thread, I see that someone else already addressed my point in a peer comment and I...

      Sometimes I reply to a comment via my notifications page, then when I go look at my reply in the context of the thread, I see that someone else already addressed my point in a peer comment and I feel dumb.

      Has this happened to other folks too?

      Any thoughts on possible solutions?

      Maybe there could be an indication of other replies to the comment which might prompt you to read them first prior to making your reply?

      Until this issue is magically resolved, I feel like I should never reply via my notifications.

      Example comment of this happening to me

      8 votes
    11. Batch-saving websites for offline viewing

      Anybody here have a good setup for batch-downloading articles/news from several sites you specify, similar to youtube-dl but for general websites? I'm sure it could be scripted with not too much...

      Anybody here have a good setup for batch-downloading articles/news from several sites you specify, similar to youtube-dl but for general websites? I'm sure it could be scripted with not too much effort but I'm interested what polished solutions there are.

      The idea would be so people with rare internet access could go to a hotspot weekly or something and sync that week's worth of content.

      12 votes
    12. Reflections on past lessons regarding code quality.

      Preface Over the last couple of years, I've had the opportunity to learn from the mistakes of my predecessors and put those lessons into practice. Among those lessons, three have stood out to me...

      Preface

      Over the last couple of years, I've had the opportunity to learn from the mistakes of my predecessors and put those lessons into practice. Among those lessons, three have stood out to me in particular:

      1. Consistency is king.
      2. Try not to be too clever for your own good.
      3. Good code takes time.

      I know that there are a lot of new and aspiring programmers here (and I'm admittedly far from being a guru myself), so I thought it would be good to touch on these three lessons, what they mean, and why they're so important.


      Consistency is King

      This is something that I had drilled into my head over nearly two years working on the code base at my previous job. Not by my fellow programmers (who did not exist), nor by my boss, but by the code itself.

      Consistency can mean a number of things, but there are two primary points that matter:

      1. Syntactic consistency.
      2. Architectural consistency.

      Syntactic consistency concerns standards in what your code looks like. For example, the choice between snake_case or camelCase or PascalCase for naming; function parameter order; or even something as benign as what kind of indentation and how much of it you use.

      Architectural consistency concerns standards in how you structure your code. Making sure that you either use public class properties or getter and setter methods; using multiple booleans or using bitmasks; using or not using objects for encapsulating data to be passed around; validating data within the primary object or relegating that responsibility to a validator class; and other seemingly minor decisions about how you handle certain behavior make a big difference.

      The code base I maintained had no such consistency. You could never remember whether the method you needed to call was named using snake_case or camelCase and had to perform several searches just to find it. Worse still, some methods defined to handle Ajax calls were prefixed with ajax while many weren't. Argument ordering seemed to be determined by a coin flip, and indentation seemed to vary between 2-space, 3-space, 4-space, and even 5-space indentation depending on what mood my predecessor was in at the time. You often could not tell where a function's body began and where it ended. Writing code was an exercise both in problem solving and in deciphering ancient religious texts.

      Architecturally it was no better. There was no standardization in how data was validated or sanitized, how class members were accessed or modified, how functionality was inherited, whether the functionality was encapsulated in an object method or in a function, or which objects were responsible for which behavior.

      That lack of consistency makes introducing or modifying a small feature, a task which should ordinarily be a breeze, an engineering feat of its own. Often you end up implementing that feature, after dancing around the tangled mess of spaghetti, only to find that the functionality that you implemented already existed somewhere else in the code base but was hiding out in a deep, dark corner that you never even knew was there until you had to fix some other broken feature months later and happened to stumble across it.

      Consistency means predictability, and predictability means discoverability and, more importantly, easier changes and higher confidence in those changes.


      Cleverness is a Fallacy

      In any given project, it can be tempting to do something that saves you extra lines of code, or saves on CPU cycles, or just looks awesome and does something nobody would have thought of before. As human beings and especially as craftsmen, we like to leave our mark and take pride in breaking the status quo by taking a novel and interesting approach to a problem. It can make us feel fulfilled in our work, that we've done something unique, a trademark of sorts.

      The problem with that is that it directly conflicts with the aforementioned consistency and predictability. What ends up being an engineering wonder to you ends up being an engineering nightmare to someone else. While you're enjoying the houses you build with wall studs arranged in the shape of a spider's web, the home remodelers who come along later aren't even sure if they can change part of the structure without causing the entire wall to collapse, and they're not even sure which walls are load-bearing and which aren't, so they're basically playing Jenga while blindfolded.

      The code base I maintained had a few such gems, with what looked like load-bearing walls but were actually made of papier-mâché and were only decorative in nature, and the occasional spider's web wall studs. One spider's web comes to mind in particular. It's been a while since I've worked on that piece of code, so I can't recall what exactly it did, but two query-constructing pieces of logic had overlapping query structure with the difference being the operators and data. Rather than being smart and allowing those two constructs to be different, however, my predecessor decided to be clever and the query construction was abstracted into a separate method so that the same general query structure could be used in other places (note: it never was, and was only ever used in those two instances). It was abstracted so that all original context was lost and no comments existed to explain any of it. On top of that, the method was being called from the most critical piece of the system which, unfortunately, was already a convoluted mess and desperately required a rewrite and thus required me to understand what the hell that method was even doing (incidentally, I fell in love with whiteboards as a result).

      When you feel like you're being clever, you should always stop what you're doing and make sure that what you're doing isn't actually a really terrible idea. Cleverness doesn't exist. Knowledge and intelligence do. Write intelligent code, not clever code.


      Good Code Takes Time

      Bad code more often than not is the result of impatience. We don't like to plan out the solution before we get to writing code. We like to use variables like x and temp in order to quickly achieve functional correctness of our code because stopping to think about how to name them is just additional overhead getting in the way. We don't like to scrap our bad work if we can salvage it in some way instead, because then we have to start from scratch and that's daunting. We continually work against ourselves and gradually increase our mental overhead because we try to decrease our mental overhead. As a result we find ourselves too exhausted by the end of our initial implementations to concern ourselves with fixing obvious problems. Obviously bad but functional code is preferable because we just want the task to be done and over with.

      The more you get exposed to bad code and the more you try to avoid pushing that hell onto yourself and your successors, the more you realize that you need to spend less time coding and more time researching and planning. Whereas you may have been spending upwards of 50% of your time coding previously, suddenly you find yourself spending as little as 10% of your time writing any code at all.

      Professionals from just about any field can tell you that you can either do something right or you can do it twice. You might recognize this most easily in the age-old piece of woodworking wisdom, "measure twice, cut once". The same is true of code, and doing something right means planning how to do it right in the first place before you've even started on the job.


      Putting into Practice

      I've been fortunate over the last couple of months to be able to start on a brand new project and architect it in a way that I see fit. Changes which would ordinarily take days or weeks in the old code base now take me half a day at most, and a matter of minutes at best. I remember where to find a piece of code that I need because I'm consistent and predictable about where I place things; I don't struggle to tell where something begins and where it ends because I'm consistent about structure; I don't continually hate myself when I need to make changes to my code because I don't do anything wildly out of the ordinary; and most importantly, I take my time to figure out what it is that I need to do and how I want to do it before I've written a single line of code.

      When I needed to add a web portal interface for uploading a media asset to associate with a database object, the initial implementation took me a week, due to the need for planning, adding the interface, and supporting and debugging the asset management. When I needed to extended that interface to allow for uploading the same kinds of assets for a completely different object type, it took me only half an hour, with most of that time being dedicated toward updating a Vue.js component to accept configuration via props rather than working for only the single hard-coded object type. If I need to add a case for any additional object type, it will take me only five minutes.

      That initial week of work for the web interface provided me with cost savings that would not have been feasible otherwise, and that initial week of work would have taken as many as three weeks had I not structured the API to be as consistent as it is now. Every initial lag in implementation is offset heavily by the long-term cost savings of writing good code.


      Technical Debt

      Technical debt is the cost of your code over time. The messier and worse your code gets, the more it costs you to try to change, and those costs only build up. Even good code can accumulate technical debt if the needs for your software have changed and its current architecture isn't compatible with those changes.

      No project is without technical debt. Even my own code, that I've been painstakingly working on for the last couple of months, has technical debt. Odds are a programmer far more experienced than I am will come along and want to scrap everything I've done, and will do a far better job rewriting it.

      That's okay, though. In fact, a certain amount of technical debt is good. If we try to never write any bad code whatsoever, then we could never possibly get to writing any code at all, because there are far too many unknowns for a new project.

      What's important is knowing when to pay down on that technical debt, which could mean anything from paying it up front (i.e. through planning ahead of time) to paying it down when it starts to get too expensive (e.g. refactoring a complicated section of code when changes become sufficiently difficult). That's not something you can learn through a StackOverflow post or a college lecture, and certainly not from some unknown stranger on some relatively unknown website in a long, informal blog-like post.


      Final Thoughts

      I'm far from being a great programmer. There's a lot that I don't know and I still have quite a bit to learn. I love programming, though, and more than that I enjoy sharing the lessons I've learned with others. Especially the ones that I wish I'd learned back in college.

      Please feel free to share your own experiences, learned lessons, and (if you have it) feedback here. I'd love to read up on some other thoughts on this subject!

      21 votes
    13. Anything to vent, ~talk?

      Hello, fellow Tildrestians. Having just joined, I found that Tildes was a substantial improvement from the standard Reddit fare. Hooray for substantial conversation! I’ve always been a long time...

      Hello, fellow Tildrestians. Having just joined, I found that Tildes was a substantial improvement from the standard Reddit fare. Hooray for substantial conversation!

      I’ve always been a long time lurker, and I’ve never been confident enough to start threads. So, ~talk, this is a vent thread for your problems and your worries. Not for the fact that you stubbed your toe, but possibly stuff that might worry you. If this doesn’t go well, then I will probably remove this thread in emberassment.

      But if it does, then perhaps we can all propose solutions to others problems. Perhaps we can comfort each other with advice and tips. It could be a stupid idea, which, if it is, let me know, but it could be a chance to actually not be the circlejerking redditors some of us once were.

      And if this in the wrong group, also do let me know.

      25 votes
    14. What are your unsolved programming problems?

      I thought it could be fun to discuss problems that we've encountered in our programming or programming-related work and have never found a solution for. I figure that at worst we can have a lot of...

      I thought it could be fun to discuss problems that we've encountered in our programming or programming-related work and have never found a solution for. I figure that at worst we can have a lot of fun venting about and scratching our heads at things that just don't make any sense to anyone, and at best we might be able to help each other find answers and, more importantly, some closure.

      16 votes
    15. Programming Challenge: Merge an arbitrary number of arrays in sorted order.

      It looks like it's been over a week and a half since our last coding challenge, so let's get one going. This challenge is a relatively simple one, but it's complex enough that you can take a...

      It looks like it's been over a week and a half since our last coding challenge, so let's get one going. This challenge is a relatively simple one, but it's complex enough that you can take a variety of different approaches to it.

      As the title suggests, write a program that accepts an arbitrary number of arrays, in whatever form or manner you see fit (if you want to e.g. parse a potentially massive CSV file, then go nuts!), and returns a single array containing all of the elements of the other arrays in sorted order. That's it!

      Bonus points for creative, efficient, or generalized solutions!

      24 votes
    16. Rubber Duck just saved me. What about you?

      To put this into context: I'm still minor, in Europe, and I was hired into SW company as backend developer. I'm making about 2-3 times as much as my friends in fastfoods. I'm basically making WS...

      To put this into context: I'm still minor, in Europe, and I was hired into SW company as backend developer. I'm making about 2-3 times as much as my friends in fastfoods.

      I'm basically making WS that would be unified wrapper for about 15 another WS - instead of crafting request for each of those, you will just call the API and it will do everything for you.

      Everything was fine, until I encountered a nightmare: WSDL/SOAP protocol over HTTPS with need to use client certificate.

      Full of false hope, I thought: "It'll be easy, I finished communication with another companies in few hours, this will be quick".

      I was very wrong. I spent countless hours on this. I tried 3 programming languages and 4 different frameworks, copy-pasting solutions from stack overflow and wondering why does this still throw errors! I copied it from stack overflow! I used windows alongside linux and installed like 10 wsdl/soap clients from 2008 forums.

      I created 8 or so SO questions, most about different language/framework, but the same problem.

      Worth of mentoining, at the time, I could obtain wsdl and xsd of the WS with usage of two certificates (crt.pem and key.pem) over PHP. I tried to use PHP SoapClient, which accepted just one certificate file. I used .pem certificate that I received and should get the work done.

      Then, I started writing the final question. Including PHP that downloaded wsdl and SoapClient that didn't work. Knowing someone will probably want to see certificates, I used cat key.pem cert.pem > certCombined.pem and diff certCombined.pem cert.pem. cert.pem was the certificate I received and should work. I expected no differences. When I saw two pages of differences, I started to suspect the cert I was given is wrong. So I pointed the PHP SoapClient to certCombined - and it started working!

      This would have never happened (at least for several more hours) unless I known someone will want to see diff between working and not-working certificates. Thank you, rubber duck debugging! Next time I'll be solving something, I'll write on paper everything I use and know.

      What are your stories?

      13 votes
    17. Discussion: The pros and cons to different approaches to solving a problem.

      It's often the case that in academic and self-teaching environments, you don't really have the opportunity to grasp and fully understand situations in which a problem has multiple valid solutions...

      It's often the case that in academic and self-teaching environments, you don't really have the opportunity to grasp and fully understand situations in which a problem has multiple valid solutions and what the implications are in choosing among them. Among those considerations are two in particular: runtime efficiency and maintainability. When these subjects are discussed, the example solutions are often comical at best, or the problems themselves too complex to fully grasp the situation at hand. Sometimes the problems are also so simple as to be completely worthless, e.g. comparing bubble sort to bogo sort.

      As such, I would like to take this opportunity to discuss practical but conceptually simple problems and the implications of the different solutions that are available. Conceptual simplicity is an absolute requirement because we want these problems to be accessible to a wider variety of readers. Problems don't necessarily need to be code-related (you could e.g. discuss something related to server administration). Bonus points for problems that include solutions with an efficiency/maintainability trade-off!

      9 votes
    18. Is there a mod that lets me play Doom 1/2 in Doom 3's engine?

      I don't mean with remastered graphics. I just mean the original Doom games. The reason for this is to have a better interface, some good gameplay tweaks (ie. freelook) and a way better multiplayer...

      I don't mean with remastered graphics. I just mean the original Doom games. The reason for this is to have a better interface, some good gameplay tweaks (ie. freelook) and a way better multiplayer framework. I know GZDoom does most of those things but it doesn't have a very good multiplayer framework (lots of desyncing) and it would have an even better interface. Another solution to this problem that's not running Doom 1 in Doom 3 if also very welcome. Thanks and sorry for the wall of text.

      4 votes
    19. Feature request/discussion: Tag everyone that replied to a post

      Hi, It would be nice for the OP to be able to tag everyone that answered a post to give some solution to some problem that didn't had a solution (something like a post "my computer does not turn...

      Hi,

      It would be nice for the OP to be able to tag everyone that answered a post to give some solution to some problem that didn't had a solution (something like a post "my computer does not turn on, what can i do?" and no one finds the solution, then the OP finds the solution and tags every one that replied to let them know what the solution was [this is a super dumb example, but you got the point :) ]).

      Problem is that this may be abused, maybe limiting use of one/two calls for everyone on one post?

      EDIT: added "on one post"

      9 votes
    20. Political correctness: Where do we draw the line on drawing lines?

      This post will be discussing the nature of political correctness and its ramifications on our culture, intended to analyze current trends and provide a basis for discussion on a very relevant...

      This post will be discussing the nature of political correctness and its ramifications on our culture, intended to analyze current trends and provide a basis for discussion on a very relevant issue in our society. This is a long post, so buckle up.

      DISCLAIMERS

      Before I begin, I will begin a series of disclaimers, as I’ll be making a lot of claims in this piece, so sorry for the length. For the sake of this post, I will be assuming the role of a neutral character, with no intended leanings towards any political or cultural ideology. Any reference that I make towards a specific side of the spectrum of politics or to social cultures does not reflect my personal opinion on them nor show a bias/prejudice towards that side. I would also like to note that, while I’m trying to make this a quality read about politically correct culture, this isn’t a lecture, a thesis, a Pulitzer article, or even a simple college essay, and is simply very informal essay. A lot of what I say goes off of either whatever comes off the top of my head or things that I find out from a quick search on Google. Some things may or may not be correct, and if they are, please feel free to call me out for it in the comments.

      With that said, let’s get into it: Political correctness. Defined by a Google search as “the avoidance, often considered as taken to extremes, of forms of expression or action that are perceived to exclude, marginalize, or insult groups of people who are socially disadvantaged or discriminated against.”, has become a powerful influence in the media that people consume as more and more creators, fans, and everything in between try to avoid language or dialect that would offend audiences. Our society progressively has become more and more PC (politically correct) due to an increasing attempt to remove toxic or otherwise harmful material, generally rhetoric like slurs or playing upon stereotypes, from media in an attempt to create a safer, more friendly environment and community, especially for those who often feel targeted by such harsh rhetoric. PC culture is inherently good-willed with an unquestionably noble goal fueling it. However, in the act of making more and more things PC, the media that is affected changes, for better or for worse. In the viewpoint of many, PC culture has become increasingly threatening to the quality of the media they consume, as the element of vulgarity that media possesses sometimes is attributed to their success or favorability. An increase in avoiding content that is in any way threatening to a certain culture has upset many because it dampens the reality of the content, affects its strength, or births new weaknesses. In short, people believe that making things more PC is making them less good.

      The big question of this post is why PC culture matters to the opinions of those who digest media affected by it. It is a question with a myriad of answers, as its influence has been taken in many directions. As iterated before, some claim that it strips away the reality of the content and provides a false reality or delusional perspective; some claim that it softens content too much and dampens the quality; and others think that it is simply stupid to try to be so friendly with what content they make or consume. The element of vulgarity that political incorrectness adds to content makes things more interesting than what they actually are, ironically because they highlight or exaggerate the reality of what they offer, and taking that away from people or reducing it takes away that precious component by avoiding any sort of offensive material. Take SNL, for instance; their skits like Black Jeopardy plays upon Black culture/stereotypes and is widely acclaimed for the hilarity of their vulgarity, but were it to face a demand for more PCness, it would lose a lot of the charm it had because of the necessary avoidance of content that would offend Black culture. The problem with this is that offensive material is not always a great sin that must be purged away. Material that PC culture can see as offensive encompasses a great deal of things, from simple slurs to stereotypes of cultures and societies. While it is good, even preferable, that things such as slurs or directly offensive comments are censored or dismissed, other forms of content seen as offensive are necessary to provide an ounce of harsh reality to the content that is provided. A specific example of such a case would be how the news handled the increase of refugee crimes in Germany and Sweden since those countries took in more Syrian immigrants. PC culture would try to dissolve the correlation as one being the product of another, but non-PC content would assume that the increase in refugees led to that increase. While it is very offensive to assume that the large intake of Syrians has led to that increase, being too PC by dancing around the issue and saying that refugees from other countries relatively contribute the same amount to the violence would be feigning ignorance to a clear and very possible causality, ultimately affecting the quality of the news piece. The same could be said for many other things, like TV shows, blog posts, etc.; When concerning or including potentially controversial content, avoiding the elements that make them controversial or ignoring them takes away from the media’s effectiveness. In other words, being too PC and removing the gritty elements of something can remove the punch that it has and make it seem fake, uninteresting, or any other dissatisfying adjective.

      That’s not to say that offensive material must be in abundance, however; one must never have too much of something, as it may upset the balance of acceptable and unacceptable content. But certain material like social commentary, often in the form of societal stereotypes or portrayals of a culture, is a necessary element to add truth or interest in whatever is being made, albeit it being handled with an utmost delicacy and respect. Saying that the increase in refugee crimes means that all Syrians are criminals, scum of the earth, and a true representation of how shit the Middle East/Islam is would be greatly offensive and also detract from the quality/esteem that that news piece may have. Having the PC to refer to them less offensively, as well as discussing the issue in a manner that doesn’t clearly perpetuate Syrians as the devil, allows for the controversial content to be taken more seriously, basically adding civility to otherwise provoking content. On a gentler note, Black Jeopardy often plays upon the tropes of black culture on relatable, universal grounds, like home culture or the more meaningful discrimination from white people. It doesn’t say that all black people act without genteel to one another or that all white people are evil/stupid, but plays upon familiar stereotypes and experiences shared by many people of both races and enhances their hilarity with their trademark controlled crudity. While this example reflects how PC culture can mitigate offensiveness, it can also bridge gaps between people by portraying them as equals, not separated the nature of their age, sex, race, sexuality, or disabilities. Diversity within a space, such as a profession, a community, or group, is PC culture at its best, for it highlights inclusiveness and unity that political incorrectness would draw borders with. It allows people of any background to pursue the same career choices or interests without discrimination or other forms of inequality, putting forward the message that despite the differences those people may have, they are still human beings, one alike to another, all part of one human society.

      Now that we’ve gone over the merits of both PC and non-PC culture, it’s time to evaluate the consequences that they each have on society. I say consequences because the developments both cultures set precedents for how media controls the amounts of PC put into their content as more and more new media juggles the amounts of friendly content they put in and the vulgar content they take out; and of course, vice versa. Political correctness has shown a powerful trendsetting effect in that once an action is called out for not being PC, it creates a rippling effect where all other forms of media avoid that un-PC element. If you take the Me Too Movement, once sexual harassment claims have been made against one big Hollywood figure, a million more followed in its wake, and now many Hollywood big wigs and US politicians reel in the fear of getting “Me Too’d” and losing their job/getting indicted. While it’s not a real presentation of PC culture at work, the Me Too movement’s rippling effect demonstrates how severe PC culture has influencing society, as now the sexually harassed don’t feel the need to cower behind the fear of denial and claims of insanity that would have been used against them pre-Me Too. And while it’s excellent that sexual harassers are getting what’s coming to them, the crossfire catches many unfortunate victims in the rise of Me Too and its anti-sexual harassment waves. James Gunn is a very relevant example of this, as his history of highly distasteful vulgar Tweets caught up to him and led to his expulsion due to Disney’s attempts to be PC. But Gunn’s expulsion has caused a big issue since he’s not actually a rapist or someone who has harassed his actors, but simply someone who made a couple of extremely stupid jokes, jokes which he had already apologized for 6 years ago. Despite apologizing twice, Gunn is still seen as too much of an un-PC person to work under Disney. This presents the problem of PC culture having too high of a sensitivity for things that they think are absolutely wrong and criminal. Gunn’s actions reflect the rising issue of where any hint of vulgarity in the publicity of an individual can be used against them to tarnish their image, something that has been in prudent effect by the Me Too movement. And while social justice demands that individuals like these who have a history of offenses must be reprimanded, the work that they have created shall suffer in quality after losing an essential component of what made them great. This is not to say that all individuals who have been accused and punished don’t deserve their fate, but merely a claim of consequence.

      Sensitivity is the name of the game in today’s culture. People are becoming increasingly sensitive over things that present even a hint of harm towards an individual or group, attacking that thing like vultures in order to dispel the negativity whatever comment or element that object has to enforce a positive atmosphere. This particular trend is something associated with social justice warriors, or SJWs for short, which has become something of an internet slur because of the reputation that they carry of being agents of anti-vulgarity. They have become such an issue to many people because they are being claimed to attack the right to free speech that individuals carry, becoming a nuisance to many who now have to watch what they say with extreme delicacy, lest they become swarmed by attacks by those who denounce them for their profane statements. But their actions aren’t inherently bad, they’re just people trying to create a safer environment for people who frequently find themselves harassed by the world around them. It’s simply that they exaggerate their efforts to such a point that their actions carry a negative connotation with them. They even fight fire with fire, attacking individuals and harassing them to get them to stop their offensive comments through brute force. But when you fight fire with fire, it just spreads, and those who are attacked by SJWs and see them as a threat to their experiences will double their anti-PC nature to combat these SJWs, creating a loop of toxicity as both sides wage a war to maintain their ideal community. This is unfortunately the great conundrum of PC vs anti-PC: Two sides fighting for absolutes that can never be achieved. SJWs and advocates for absolute PC environments will never achieve it because there will always be people who want to speak their mind about people and things that others will find offensive, and anyone can get offended by anything. A truly PC environment would have to restrict all forms of communication, otherwise someone will eventually get offended and upset the “harmony” the absolute PC achieves. On the other side of the spectrum, an environment without any form of PC will find itself quarreling with each other all the time as people will lack the restraint to say offensive things and therefore find themselves at ends with whatever group their speech or actions offend. An environment without PC is an environment without rules, and an absence of rules will result in chaos.

      Now the question to this is: Where’s the sweet spot? If too much PC and too little are both bad, is the medium the best? In truth, I don’t really think any balance of PC and anti-PC will ever be truly perfect. There will always be advocates for both sides fighting to increase the influence of whatever they fight for, and the balance will always tip to one side or the other. Fortunately for the human race, we have the ability to exercise a lack of care. The reality of this feud is that there will always be something you don’t like, and nothing you or people like you can do will change that fact. You can call out as many sexual predators, societal offenders, and all other forms of anti-PC individuals all you want, but you won’t stop people from doing it. You can label SJWs as thin-skinned and juvenile all you want, but you’ll only be feeding the fire. The only happy solution to this issue is to simply accept the reality that you can’t create a perfect world for yourself by changing everyone else. You can keep fighting the battles and win as many as you’d like, but you’ll never win the war. If you’re someone who wants the absolutes, you’ll never get it. The only semblance of peace you’ll get is accepting there will always be bad.

      PC and anti-PC cultures both possess a merit to them valuable to our society: PC culture imposes civility and friendliness to all people, especially those who are frequently discriminated or treated unfairly, ensuring they feel safe, happy, and equal to their fellows; anti-PC culture, however, advocates for the freedom to say what needs to be said, and while it is vulgar, it is real, and reality must be embraced. People may always fight with each other for each side as they get increasingly sensitive, and sometimes even do something that turns the tides for them, but they will never truly defeat one or the other. The balance between them is always shifting and will never really settle, but the beauty of this war is that it teaches us about people, about their experiences and their beliefs, and help us come to terms with reality. Whether we want to change that reality for the better or champion its present merits, it is, and always will be, up to us.

      Thanks for reading. Feel free to discuss, criticize, compliment, etc. in the comments.

      15 votes
    21. Programming Challenge: Two Wizards algorithm challenge

      I'm running out of ideas, if you have any, please make your own programming challenge. This challenge is about designing algorithm to solve this problem. Let's have game field of size x, y (like...

      I'm running out of ideas, if you have any, please make your own programming challenge.


      This challenge is about designing algorithm to solve this problem.

      Let's have game field of size x, y (like in chess). There are two wizards, that are standing at [ 0, 0 ] and are teleporting themselves using spells. The goal is to not be the one who teleports them outside of the map. Each spell teleports wizard by at least +1 tile. Given map size and collection of spells, who wins (they do not make any mistakes)?

      Here are few examples:


      Example 1

      x:4,y:5

      Spells: { 0, 2 }

      Output: false

      Description: Wizard A starts, teleporting both of them to 0, 2. Wizard B teleports them to 0, 4. Wizard A has to teleport them to 0,6, which overflows from the map, so he loses the game. Because starting wizard (wizard A) loses, output is false.

      Example 2

      x:4,y:4

      Spells: { 1,1 }

      Output: true

      Example 3

      x:4,y:5

      Spells: { 1,1 },{ 3,2 },{ 1,4 },{ 0,2 },{ 6,5 },{ 3,1 }

      Output: true

      Example 4

      x:400,y:400

      Spells: {9,2},{15,1},{1,4},{7,20},{3,100},{6,4},{9,0},{7,0},{8,3},{8,44}

      Ouput: true


      Good luck! I'll comment here my solution in about a day.

      Note: This challenge comes from fiks, programming competition by Czech college ČVUT (CTU).

      15 votes
    22. Which password manager do you use and recommend?

      I currently use Lastpass, and while I'm overall happy with what I have right now, some issues (like slow firefox support, android functionality that only works arbitrarily) makes me want to look...

      I currently use Lastpass, and while I'm overall happy with what I have right now, some issues (like slow firefox support, android functionality that only works arbitrarily) makes me want to look at other solutions.

      I have heard about other popuar managers like Keepass and Bitwarden, but haven't made the plunge yet. So I thought I could kickstart a discussion on this topic.

      Which password manager do you use or have you used? Why do you recommend it (or not)?

      28 votes
    23. On Reddit moderation - it's a matter of scale.

      I apologize in advance for what's probably going to be a very rambly post. This has been stewing on my mind for a while now and I just need to get it out. I've been on reddit a long time, 11 years...

      I apologize in advance for what's probably going to be a very rambly post. This has been stewing on my mind for a while now and I just need to get it out.

      I've been on reddit a long time, 11 years as of today in fact. In that time, I've watched the site grow from a small community of mostly tech nerds to one of the biggest sites on the web. I've also moderated many communities, from small niche subs (/r/thecure, /r/makeupaddictioncanada) to some of the biggest subs on the site (/r/worldnews, /r/gaming). I've modded communities that have exploded in popularity, growing from 25k to 100k to 500k and beyond, and seen how those communities change.

      When you're in a subreddit of say, 10k users, there's more community engagement. You know the users, the users know the mods, and you know when people are engaging in good faith. The mods themselves are basically just another user with a bit more control. People coming in just to cause shit are generally downvoted to death and reported quickly, and taken care of - it's a community effort to keep things civil. Modding a community like that is piss easy, you can generally check every thread yourself and see any nastiness easily before it becomes a problem, and the users themselves are more invested in keeping things on topic and friendly. Disagreements are generally resolved amicably, and even when things get heated it's easy enough to bring things back to center.

      Then the community starts to grow, and gather more users. Ok, you adjust, maybe add another mod or two, the users are still engaged and reporting threads regularly. Things stay more or less the same. The growth continues.

      At 50k, 100k, 250k, etc you notice differences in the community. People argue more, and because the usernames they're arguing with aren't known to them, they become more vitriolic. Old regulars begin drifting away as they feel sidelined or just lose interest.

      At 1M a major shift happens and the sub feels more like a free for all than a community. As a mod, you can't interact as much because there's more traffic. You stop being able to engage as much in the threads because you have to always be "on" and are now a representative of the mod team instead of a member of the community. Even if you've been there since day one, you're now a mod, and seen by some as "the enemy". Mods stifle free speech after all, removing posts and comments that don't fit the sub rules, banning users who are abusive or spammers. Those banned users start running to communities like SRC, decrying the abuse/bias/unfair treatment they've gotten at the hands of X sub mod team. Abusive modmails and PMs are fairly regular occurrences, and accusations of bias fly. The feeling of "us vs them" is amplified.

      Once you get above 10M users, all bets are off. Threads hit /r/all regularly and attract participants from all over reddit. These threads can attract thousands of comments, coming at the rate of several hundred every minute. Individual monitoring of threads becomes impossible. Automod can handle some of it, but we all know automod can be slow, goes down sometimes, and can't handle all the nuances of actual conversation. You've outgrown any moderation tools reddit provides, and need to seek outside help. Customized bots become necessary - most large subreddits rely on outside tools like SentinelBot for spam detection, or snoonotes for tracking problem users. Harassment is a real problem - death threats, stalking, and doxxing are legitimate issues and hard to deal with. I won't even touch on the issues like CP, suicidal users, and all the other shit that comes along with modding communities this large.

      I wish I had some solutions, but I really don't know what they are. We all know the tools we have as moderators on reddit are insufficient, but what people often overlook is why - the community is just too large for unpaid volunteers to moderate with the limited tools we have.

      39 votes
    24. Programming Challenge - Let's build some AI!

      Hi everyone! In this challenge, we will build simple genetic algorithm. The goal is to create genetic algorithm that will learn and output predefined text ("Hello World!"). The goal can be...

      Hi everyone! In this challenge, we will build simple genetic algorithm.

      The goal is to create genetic algorithm that will learn and output predefined text ("Hello World!").

      The goal can be achieved with any language and you'll need just simple loops, collection and knowledge how to create and use objects, even beginners can try to complete this challenge.

      How?

      I'll try to explain it as best as I can. Genetic algorithms are approximation algorithms - they often do not find the best solution, but they can find very good solutions, fast. It's used when traditional algorithms are either way too slow, or they even don't exist. It's used to, for example, design antennas, or wind turbines. We will use it to write "Hello World".

      First of all, we define our Entity. It is solution to given problem, it can be list of integers that describe antenna shape, decision tree, or string ("Hello World"). Each entity contains the solution (string solution) and fitness function. Fitness function says, how good our entity is. Our fitness function will return, how similar is entity solution text to "Hello World" string.

      But how will the program work? First of all, we will create list of entities List<Entity>. We will make, for example, 1000 entities (randomly generated). Their Entity.solution will be randomized string of length 11 (because "Hello World" is 11 characters long).

      Once we have these entities, we will repeat following steps, until the best entity has fitness == 1.0, or 100% similarity to target string.

      First of all, we compute fitness function of all entities. Then, we will create empty list of entities of length 1000. Now, we will 1000-times pick two entities (probably weighted based on their fitness) and combine their strings. We will use the string to create new entity and we will add the new entity to the new list of entities.

      Now, we delete old entities and replace them with entities we just made.

      The last step is mutation - because what if no entity has the "W" character? We will never get our "Hello World". So we will go through every entity and change 5% (or whatever number you want) of characters in their solution to random characters.

      We let it run for a while - and it is done!

      So to sum up what we did:

      entities <- 1000 random entities
      while entities.best.fitness < 1:
        for every entity: compute fitness
        newEntities <- empty list
        1000-times:
          choose two entities from "entities", based on their fitness
          combine solutions of these entities and make newEntity
          newEntities.add(newEntity)
        for every entity: mutate // Randomly change parts of their strings
      
      print(entities.best.solution) // Hello World!
      

      Now go and create the best, fastest, and most pointless, genetic algorithm we've ever seen!

      23 votes
    25. Vision problems - open topic for experience, treatment outcomes, etc.

      So after yet another round at the eye doctor yesterday, it seems my glasses prescription has been all wrong for some time (!?). I've been told I am/am not a candidate for LASIK. I've had whole...

      So after yet another round at the eye doctor yesterday, it seems my glasses prescription has been all wrong for some time (!?). I've been told I am/am not a candidate for LASIK. I've had whole diopters of change in prescription over six-month periods, An ""uncorrectable" astigmatism in one eye from an old orbital bone fracture has corrected itself suddenly (yay?).

      What reading I've done suggests that the research basis for understanding the biological mechanisms of optics in the human eye and visual information processing in the brain, versus various styles of correction, is bogus (to put it mildly).

      The incidence of severe myopia/astigmatism is rising dramatically around the world, not coincidentally with screen time, and it's getting more difficult to treat adequately. Anyone else feel like they're going blind slowly, and are there any evidence- or experience-based, reliable solutions you've found?

      8 votes
    26. Moving from advertising-supported media to a sustainable, high-quality, alternative -- some light reading

      This is a complex issue and one that's hard to address succinctly. It gets into the larger matter of media and its role and interaction with society, which is profound. This includes political and...

      This is a complex issue and one that's hard to address succinctly. It gets into the larger matter of media and its role and interaction with society, which is profound. This includes political and social elements going far beyond consumerism and consumption, though those are part of the dynamic.

      For a short answer: advertising is not the only problem, but is a large component of a set of conflicts concerning information and media. It both directly and indirectly promotes disinformation and misinformation, opens avenues to propaganda and manipulation, and fails to promote and support high-quality content. It also has very real costs: globally advertising is a $600 billion/year industry, largely paid out of consumer spending among the world's 1 billion or so wealthy inhabitants of Europe, North America, and Japan. This works out to about $600/year per person in direct expense. On top of the indirect and negative-externality factors. Internet advertising is roughly $100 billion, or $100/yr. per person if you live in the US, Canada, EU, UK, Japan, Australia, or New Zealand. The "free" Internet is not free.

      And the system itself is directly implicated in a tremendous amount of the breakdown of media, politics, and society over the past several years. Jonathan Albright, ex-Googler, now a scholar of media at the Tow Center (and its research director), Columbia University in New York, "Who Hacked the Election? Ad Tech did. Through “Fake News,” Identity Resolution and Hyper-Personalization", and editor of d1g (estT) (on Medium).

      [S]cores of highly sophisticated technology providers — mostly US-based companies that specialize in building advanced solutions for audience “identity resolution,” content tailoring and personalization, cross-platform targeting, and A/B message testing and optimization — are running the data show behind the worst of these “fake news” sites.

      (Emphasis in original.)

      A Media Reader

      By way of a longer response, I'd suggest some reading, of which I've been doing a great deal. Among the starting points I'd suggest the following, in rough order. Further recommendations are very much welcomed.

      Tim Wu

      The Attention Merchants is a contemporary version of the media, attention, distraction, disinformation, manipulation, and power game that's discussed further in the following references. If you're looking for current state-of-the-art, start here. Ryan Holiday and Trust Me, I'm Lying is a 2012 expose of the online media system. For an older view, Vance Packard's 1950s classic (updated), The Hidden Persuaders gives perspective both on what methods are timeless, and what's changed. A 2007 New York Times essay on the book gives a good overview.

      Hamilton Holt

      Commercialism and Journalism (1909) is a brief, easy, and fact-filled account of the American publishing industry, especially of newspapers and magazines, at the dawn of the 20th century. Holt was himself a publisher, of The Independent, and delivered this book as a lecture at the University of California. It gives an account of the previous 50 years or so of development in publishing, including various technologies, but putting the greatest impact on advertising. I'm not aware that this is particularly well-noted, but I find it a wonderfully concise summary of many of the issues, and a view from near the start of the current system. Holt includes this quote from an unnamed New York journalist:

      There is no such thing in America as an independent press. I am paid for keeping honest opinions out of the paper I am connected with. If I should allow honest opinions to be printed in one issue of my paper, before twenty-four hours my occupation, like Othello's, would be gone. The business of a New Yourk journalist is to distort the truth, to lie outright, to pervert, to vilify, to fawn at the foot of Mammon, and to sell his country and his race for his daily bread. We are the tools or vassals of the rich men behind the scenes. Our time, our talents, our lives, our possibilities, are all the property of other men. We are intellectual prostitutes.

      (An HN commenter reveals that this was John Swinton.)

      Jerry Mander

      Four Arguments for the Elimination of Television. This is a 1970s classic that's held its value. Mander is an ad executive himself, though he took his talents to the Environmental movement, working closely with David Brower of the Sierra Club.

      Adam Curtis

      BBC documentarian, most especially The Century of the Self (part 1, part 2, part 3, and part 4), and Hypernormalisation. These documentaries, the first a four-part series, the second a self-contained 2h40m single session, focus on media and propaganda. The first especially on Edward Bernays, Sigmund Freud (Bernays' uncle), advertising, and propaganda. The second on Vladimir Putin.

      Edward S. Herman and Noam Chomsky

      Manufacturing Consent: The Political Economy of the Mass Media. The title itself comes from Walter Lippmann and his earlier work, Public Opinion, which is something of a guide to its manufacture, and the genesis of "modern" 20th century media. The notion of mass media as having a political economy is a critical element in answering your question. That is: media is inherently political and economic, and advertising and propaganda (or as it was rebranded, "public relations"), all the more so.

      Robert W. McChesney

      McChesney has been continuing the exploration of media from a political-economic perspective and has an extensive bibliography. His Communication Revolution in particular discusses his own path through the field, including extensive references.

      Marshall McLuhan

      Particularly The Gutenberg Galaxy and The Medium is the Message.

      Elisabeth Eisenstein

      Either her book The Printing Press as an Agent of Change or the earlier (and much shorter) article that pressaged it, "Some Conjectures about the Impact of Printing on Western Society and Thought: A Preliminary Report" (more interesting than its title, I promise). Eisenstein draws heavily on, and improves greatly on the rigour of, McLuhan.

      Generally: Other 19th and 20th century media scholars and writers

      H.L. Mencken, I.F. Stone, and perhaps Walter Lippmann and John Dewey. Mencken and Stone are particularly given to shorter essays (see especially The I.F. Stone Weekly Reader, The Best of I.F. Stone and his New York Review of Books articles) which can be readily digested. Mencken's "Bayard vs. Lionheart" whilst not specifically concerning advertising largely describes the crowd-psychology inherent in mediocre or pathological social-political outcomes, and is a short and brilliant read. Mencken has a long list of further writings.

      Edward Bernays

      Especially Propaganda and Public Relations. Bernays created the field of public relations, and largely drove the popular support of "democracy" (a WWI war bonds advertising slogan) in favour of the earlier "liberty". For Stone, I cannot recommend his Day at Night interview (~1974) highly enough. 30 minutes. Bernays' New York Times obituary makes interesting reading.

      Charles-Marie Gustave Le Bon

      The Crowd: A study of the popular mind. "[C]onsidered one of the seminal works of crowd psychology." Wikipedia article.

      Charles Mackay

      Extraordinary Popular Delusions and the Madness of Crowds (1841). "[O]ften cited as the best book ever written about market psychology." Wikipedia article.

      I have yet to read all of these works, though they're on my list, and I've at least reviewed most of the works and authors and am familiar with major themes. Virtually all of these will lead to other sources -- books, articles, authors, fields of study -- by way of bibliographies (looking backward) and citations (looking forward). Among my favourite and most fruitful research techniques.

      This is also really just a starting point, though I hope it's a good one. Media isn't my field, or rather, I'd thought that, working in technology, it wasn't, but I've come to realise that (1) "information technology" is in very large part "media technology", and (2) the interactions of media systems and society, politics, economics, even culture as a whole, are beyond deep, and highly underappreciated.

      The role of mass media in the spread of early-20th century Fascism is a particularly sobering story. See "Radio and the Rise of The Nazis in Prewar Germany", and recognise that you could include cinema, magnetic audio tape recording, public address systems (it's hard to address three quarters of a million people without amplification). More recently, radio has been studied in conjunction with the 1994 Rwandan genocide. These remain extant issues.

      Bootnote

      Adapted from a StackExchange contribution.

      14 votes
    27. Programming Challenge: Freestyle textual analysis.

      I just realized that I completely glossed over this week's programming challenge. For this week, let's do something more flexible: write a program that accepts a file as input--either through a...

      I just realized that I completely glossed over this week's programming challenge. For this week, let's do something more flexible: write a program that accepts a file as input--either through a file name/path or through standard input--and perform any form of analysis you want on its contents. That's it!

      For instance, you could count the occurrences of each word and find the most common ones, or you could determine the average sentence length, or the average unique words per sentence. You could even perform an analysis on changes in words and sentence structure over time (could be useful for e.g. poetry where metre may play an important role). You can stick with simple numbers or dive right into the grittiest forms of textual analysis currently available. You could output raw text or even a graphical representation. You could even do a bit of everything!

      How simple or complex your solution ends up being is completely up to you, but I encourage you to challenge yourself by e.g. learning a new language or about different textual analysis techniques, or by focusing on code quality rather than complexity, or even by taking a completely different approach to the problem than you ordinarily would. There are a lot of learning opportunities available here.

      11 votes
    28. File sharing over a network

      Me and my friend arrive at an arbitrary place, we have access to a network from there. Now, we want to share a file and the network connection is all we have. The challenge: make the file go from...

      Me and my friend arrive at an arbitrary place, we have access to a network from there. Now, we want to share a file and the network connection is all we have. The challenge: make the file go from my device to my friends device in a pure p2p setting. If you know, for sure, that incoming connections are allowed this is very simple but here i want to explore which solutions exist that do not assume this.

      Assumptions:

      • Same network altough possibly different access points (one might be wired and the other wireless)
      • We have no prior knowledge about the network, incoming traffic might be blocked (outgoing isn't for sure)
      • No extra machines can aid in the transaction (no hole punching etc)
      • Should work reliably for any kind of device that you have free -- as in freedom -- control over. that is PCs, android phones/tablets and macs. most of Apple's other hardware can be excluded because they don't allow for anything anyway.
      • hard mode: We are both digitally illiterate

      Goal:

      • Send a file, p2p, from one party to another.

      Me (MSc cs) and my friend (PhD cs) tried to do this last week. And it appears to be among the hardest problems in CS. I would like to discuss this and hear which solutions you might have for this problem.

      Edits:

      1. this is not an assignment
      2. Added some specifics to the assumption set
      3. we're looking for practical solutions here.
      4. more specs
      10 votes
    29. What, if anything, makes a morally good war?

      I've been consuming the darkness that is wartime histories from the past three or four centuries and I feel like I've encountered a lot of people who had what they believed to be justifiable...

      I've been consuming the darkness that is wartime histories from the past three or four centuries and I feel like I've encountered a lot of people who had what they believed to be justifiable reasons to launch wars against other powers. There are people who thought they had divine right to a particular position of power and so would launch a war to assert that god-given right. There are people who believed in a citizen's right to have some (any) say in how their tax money gets used in government and so would fight wars over that. People would fight wars to, as John Cleese once said, "Keep China British." Many wars are started to save the honor of a country/nation. Some are started in what is claimed to be self-defense and later turns out to have been a political play instigated to end what has been a political thorn in their sides.

      In all this time, I've struggled to really justify many of these wars, but some of that comes with the knowledge of what other wars have cost in terms of human carnage and suffering. For some societies in some periods, the military is one of the few vehicles to social mobility (and I think tend to think social mobility is grease that keeps a society functioning). Often these conflicts come down to one man's penis and the inability to swallow their pride to find a workable solution unless at the end of a bayonet. These conflicts also come with the winning powers taking the opportunity to rid themselves of political threats and exacting new harms on the defeated powers (which comes back around again the next time people see each other in a conflict).

      So help keep me from embracing a totally pacifistic approach to war. When is a war justifiable? When it is not only morally acceptable but a moral imperative to go to war? Please point to examples throughout history where these situations have happened, if you can (though if you're prepared to admit that there has been no justifiable war that you're aware of, I suppose that's fine if bitter).

      20 votes
    30. Freelancer talk: Online marketplaces

      Wanted to see if we could get some conversations going with any freelancers who may be around. I figured a good place to start is with one of the more commonly discussed topics, which is the...

      Wanted to see if we could get some conversations going with any freelancers who may be around. I figured a good place to start is with one of the more commonly discussed topics, which is the online marketplaces catering to freelancers.

      These days, Upwork seems to have gobbled up a huge chunk of that market, while garnering plenty of criticism and complaints along the way for how they handle it. The graphic design space seems to have a little more competition in marketplaces, with 99designs being a frontrunner it seems. Truthfully, there just aren't that many platforms to pick from regardless of your specialty. Which can be a positive, as it provides a centralized place to look for and post available work, can increase exposure to the freelance market as a whole, and ensures you don't have to maintain profiles across numerous platforms which can be far too time consuming sometimes. But of course there are many downsides that come along with that.

      The standard advice that comes with such discussions is to ignore the online marketplaces entirely because of those downsides. Competing against an international labor pool, as well as an under-experienced labor pool much of the time, in a format that heavily encourages price competition above other factors can be disastrous for your bottom line (and your sanity). These platforms also generally remove a lot of the negotiating power that a freelancer needs to leverage, as it is much more difficult to establish the captive audience that can be built with more personal interactions.

      And frankly, that standard advice has continued to be my own, both for my career as well as to others who may seek such advice. But it does make me wonder if there is a better way to do it. Of course as a developer I'm always looking to find a way to solve problems, so I can concede I may be looking for solutions in a place that is misguided to try to fix.

      What has been your experiences with freelance online marketplaces? What advice do you give when asked about it? What would you like to change?

      10 votes
    31. What do you hope to see, content-wise, from Tildes?

      Last night I posted a topic called "real sad boi hours", a ritualistic kind of post I've carried over from Reddit. I chose to post it in ~talk since the description for the group says it is for...

      Last night I posted a topic called "real sad boi hours", a ritualistic kind of post I've carried over from Reddit. I chose to post it in ~talk since the description for the group says it is for "Open-ended discussions with fellow Tildes users, casual or serious", and I felt there is nothing more open-ended or casual than real sad boi hours. At first, the topic was meant just as it usually does on Reddit. Got a few responses in which people talked about their day and how they were feeling. But right now, the most voted comment is complaining about how we need to restrict invitations to prevent low effort users like me from joining. One thing the user said was that is is obvious there are users joining who have not read the manifesto. I'm just going to spew my own opinion on a few points here:

      1. I don't think gatekeeping is a solution, especially since iirc this site is not going to be permanently invite-only. Not to mention that's just a childish solution anyway.

      2. I don't know what is expected from ~talk. As I said before, I legitimately believe my nightly "real sad boi hours" posts fit exactly what the description of the group says. However, that is up to interpretation I suppose.

      3. If my post was against some rule (which apparently roughly 17 users believe it is), there should be some kind of rule set or moderation set in place (though I understand why there isn't, the site being private still and all). My impression so far has been that if you don't like content, you just ignore it. But now I'm seeing that apparently, people don't like to ignore it. They want me gone.

      4. Is every user expected to read the manifesto? You may be able to get away with this while it's private (and even then, there is still users like me who only read a few pages) but if/when this site goes public, expecting every user or even just most the users to read the manifesto is a pipe dream. As far as I can tell, the reddiquette (which I have also not read) is shorter than the manifesto and nobody reads that either unless they need to. The only reason I know the reddiquette is because I've picked up on bits of it as time went on.

      Maybe I'm just a butt-hurt bitch that people complained about me and I can't take criticism. I'm sure people who disliked my post will think that is it. I also may have a skewed perception of what this site is. I view it as an improvement upon Reddit and honestly I think some of this innovation may work great, which is why I'm here in the first place. I want to hear your take on what I said, and anything else you'd like to add.

      26 votes
    32. Password manager suggestions?

      I'm going to college soon, and I'm in the process of straightening out my accounts and login information. What password managers would any of you recommend? I'm looking for something that can be...

      I'm going to college soon, and I'm in the process of straightening out my accounts and login information. What password managers would any of you recommend? I'm looking for something that can be accessed on both desktop (PC) and mobile (Android).

      Edit: I have set up KeePass and it looks like a great solution! Thanks for the help.

      33 votes
    33. Programming Challenge: Given a triangle of numbers, find the path from the top to the bottom of the triangle with the largest sum.

      This problem is based on the Project Euler problem here. Goal: Given some input describing a triangle of numbers, find the path starting from the top-most row of the triangle and ending at the...

      This problem is based on the Project Euler problem here.

      Goal: Given some input describing a triangle of numbers, find the path starting from the top-most row of the triangle and ending at the bottom-most row of the triangle that contains the largest sum of all of the numbers along the path. You may only move downward and you must select an adjacent position to move to. Efficiency is not a requirement for completion.

      Constraints:

      • The first line of input for a triangle will be a single integer telling you how many rows the triangle will have.
      • Each following line of input will be the next row of the number triangle, starting at the first row.
      • For each line describing the number triangle, the individual numbers will be separated by a single space.

      Note: The constraints above are to keep hard-coded triangles out of submitted solutions while also ensuring that all languages can equally handle this problem without annoying workarounds for lower-level languages. The consistency also makes it easier for beginners to review and understand someone else's code, and makes it easier to receive help if you get stuck. They're not necessarily required, but are highly encouraged.

      Example input:

      4
      1
      3 2
      4 5 6
      7 8 9 10
      

      Corresponding triangle:

         1
        3 2
       4 5 6
      7 8 9 10
      

      Expected result: 19 (1 + 2 + 6 + 10)

      Extra Credit: As noted on the Project Euler page, you can solve this using a brute force method, but it's incredibly inefficient. Specifically, a brute force solution would be O(2n) time (exponential). There exists a solution that can be solved in O(n2) time (quadratic). Find this solution.

      13 votes
    34. Public access Unix systems, another alternative social environment

      I have been writing a paper on the history of a type of online social space called public access Unix systems, and I'm posting a Tildes-tailored summary here in case anyone is interested. If you...

      I have been writing a paper on the history of a type of online social space called public access Unix systems, and I'm posting a Tildes-tailored summary here in case anyone is interested. If you enjoy this and want to read more (like 10+ pages more) look at the bottom of this post for a link to the main paper-- it has citations, quotes, and everything, just like a real pseudo-academic paper!

      I wrote this because a summary didn't exist and writing it was a way for me to learn about the history. It was not written with the intent of commercial publication, but I'd still love to share it around and get more feedback, especially if that would help me further develop the description of this history and these ideas. If you have any thoughts about this, please let me know.

      What are Public Access Unix Systems?

      When the general public thinks of the Unix operating system (if it does at all), it probably isn't thinking about a social club. But at its core, Unix has a social architecture, and there is a surprisingly large subculture of people who have been using Unix and Unix-like operating systems this way for a long time.

      Public access Unix systems are multi-user systems that provide shell accounts to the general public for free or low cost. The shell account typically provides users with an email account, text-based web browsers, file storage space, a directory for hosting website files, software compilers and interpreters, and a number of tools for socializing with others on the system. The social tools include the well-known IRC (Internet Relay Chat), various flavors of bulletin-board systems, often a number of homegrown communication tools, and a set of classic Unix commands for finding information about or communicating with other system users.

      But more than just mere shell providers, public access Unix systems have always had a focus on the social community of users that develops within them. Some current systems have been online for several decades and many users have developed long-standing friendships and even business partnerships through them. i.e. they're a lot of fun and useful too.

      Of interest to Tildes members is that public access Unix systems have for the most part been non-commercial. Some take donations or charge membership fees for certain tiers of access (some in the U.S. are registered 501(c)(3) or 501(c)(7) non profits). They almost invariably do not take advertising revenue, do not sell user profile data, and the user bases within them maintain a fairly strong culture of concern about the state of the modern commercial Internet.

      This concept of a non-commercial, socially aware, creative space is what really got me interested in the history of these systems. Further, the fact that you have this socially aware, technically competent group of people using and maintaining a medium of electronic communication seems particularly important in the midst of the current corporate takeover of Internet media.

      History

      Public access Unix systems have been around since the early 1980's, back when most of the general public did not have home computers, before there was a commercial Internet, and long before the World Wide Web. Users of the early systems dialed in directly to a Unix server using a modem, and simultaneous user connections were limited by the number of modems a system had. If a system had just one modem, you might have to dial in repeatedly until the previous user logged off and the line opened up.

      These early systems were mostly used for bulletin-board functionality, in which users interacted with each other by leaving and reading text messages on the system. During this same time in the early 80's, other dial-in systems existed that were more definitively labeled "BBSes". Their history has been thoroughly documented in film (The BBS Documentary by Jason Scott) and in a great Wikipedia article. These other systems (pure BBSes) did not run the Unix OS and many advanced computer hobbyists turned up their noses at what they saw as toyish alternatives to the Unix OS.

      Access to early dial-in public access Unix systems was mostly constrained by prohibitively expensive long-distance phone charges, so the user bases drew from local calling areas. The consequence was that people might meet each other online, but there was a chance they could end up meeting in person too because they might literally be living just down the street from each other.

      The first two public access Unix systems were M-Net (in Ann Arbor, MI) and Chinet (in Chicago, IL), both started in 1982. By the late 1980's, there were more than 70 such systems online. And at their peak in the early 1990's, a list of public access Unix systems shared on Usenet contained well over 100 entries.

      Throughout the 1980's, modem speeds and computer power increased rapidly, and so did the functionality and number of users on these systems. But the 1990's were a time of major change for public access Unix systems. In 1991, the Linux operating system was first released, ushering in a new era of hobbyist system admins and programmers. And new commercial services like AOL, Prodigy and CompuServe brought hordes of new people online.

      The massive influx of new people online had two big impacts on public access Unix systems. For one, as access became easier, online time became less precious and people were less careful and thoughtful about their behavior online. Many still describe their disappointment with this period and their memory of the time when thoughtful and interesting interactions on public access Unix systems degraded to LOLCAT memes. In Usenet (newsgroups) history, the analogous impact is what is referred to as "The Eternal September".

      The second impact of this period was from the massive increase of computer hobbyists online. Within this group were a small but high-impact number of "script kiddies" and blackhat hackers that abused the openness of public access Unix systems for their own purposes (e.g. sending spam, hacking other systems, sharing illegal files). Because of this type of behavior, many public access Unix systems had to lock down previously open services, including outbound network connections and even email in some cases.

      For the next decade or so, public access Unix systems continued to evolve with the times, but usership leveled off or even decreased. The few systems that remained seemed to gain a particular sense of self-awareness in response to the growing cacophony and questionable ethics of the commercial World Wide Web. This awareness and sense of identity continues to this day, and I'll describe it more below because I think it is really important, and I expect Tildes members agree.

      2014 and Beyond

      In 2014, Paul Ford casually initiated a new phase in the history of public access Unix systems. He registered a URL for tilde.club (http://tilde.club) and pointed it at a relatively unmodified Linux server. (Note: if there is any relation between tilde.club and Tildes.net, I don't know about it.) After announcing via Twitter that anyone could sign up for a free shell account, Ford rapidly saw hundreds of new users sign up. Somehow this idea had caught the interest of a new generation. The system became really active and the model of offering a relatively unmodified *NIX server for public use (a public access Unix system under a different name) became a "thing".

      Tilde.club inspired many others to open similar systems, including tilde.town, tilde.team* and others which are still active and growing today. The ecosystem of these systems is sometimes called the tilde.verse. These systems maintain the same weariness of the commercial WWW that other public access Unix systems do, but they also have a much more active focus on building a "radically inclusive" and highly interactive community revolving around learning and teaching Unix and programming. These communities are much, much smaller than even small commercial social networks, but that is probably part of their charm. (* full disclosure, I wield sudo on tilde.team.)

      These tilde.boxes aren't the only public access Unix systems online today though. Many others have started up in the past several years, and others have carried on from older roots. One of the most well known systems alive today is the Super Dimension Fortress (SDF.org) that has been going strong for over three decades. Grex.org and Nyx.net have been online for nearly as long too. And Devio.us is another great system, with a community focused around the Unix OS, particularly OpenBSD. Not all these systems label themselves as "public access Unix systems", but they all share the same fundamental spirit.

      One system that I find particularly interesting is Hashbang (aka #!, https://hashbang.sh). Hashbang is a Debian server run and used by a number of IT professionals who are dedicated to the concept of an online hackerspace and training ground for sysadmins. The system itself is undergoing continual development, managed in a git repository, and users can interact to learn everything from basic shell scripting to devops automation tooling.

      Why is Hashbang so cool? Because it is community oriented system in which users can learn proficiency in the infrastructural skills that can keep electronic communications in the hands of the people. When you use Facebook, you don't learn how to run a Facebook. But when you use Hashbang (and by "use", I mean pour blood, sweat and tears into learning through doing), you can learn the skills to run your own system.

      Societal role

      If you've read other things I've written, or if you've interacted with me online, then you know that I feel corporate control of media is a huge, huge concern (like Herman and Chomsky type concern). It's one of the reasons I think Tildes.net is so special. Public access Unix systems are valuable here too because they are focused on person-to-person connections that are not mediated by a corporate-owned infrastructure, and they are typically non-profit organizations that do not track and sell user data.

      You're no doubt aware of the recent repeal of Net Neutrality laws in the U.S., and you're probably aware of what The Economist magazine calls "BAADD" tech companies (big, anti-competitive, addictive and destructive to democracy). One of the most important concerns underlying all of this is that corporations are increasingly in control of our news media and other means of communication. They have little incentive to provide us with important and unbiased information. Instead, they have incentive to dazzle us with vapid clickbait so that we can be corralled past advertisements.

      Public access Unix systems are not the solution to this problem, but they can be part of a broader solution. These systems are populated by independently minded users who are skeptical of the corporate mainstream media, and importantly, they teach about and control the medium of communication and social interaction itself.

      Unix as a social medium

      So what is it that makes public access Unix systems different? This seems like a particularly interesting question relative to Tildes (so interesting that I even wrote another Tildes post about it). My argument is partly that Unix itself is a social and communication medium and that the structure of this medium filters out low-effort participation. In addition to this, public access Unix systems tend to have user bases with a common sense of purpose (Unix and programming), so users can expect to find others with shared interests.

      In contrast to modern social media sites like Facebook or Twitter, you have to put in some effort to use Unix. You have to learn to connect, typically over ssh; you have to learn to navigate a command line shell; and you have to learn the commands and options to run various utilities. And to really use Unix, you have to learn a bit of programming. It's not incredibly hard in the end, but it takes significantly more effort than registering for a Facebook or Twitter account and permitting them to scan your email address book. Once you get over the learning curve, it is powerful and fun.

      This effortful medium does two things. For one, it weeds out people who aren't willing to put in effort. And for two, it provides learned users with a diverse palette of tools and utilities for building and sharing creative output.

      Public access Unix systems are all about active creation of content to be enjoyed and shared with others, and not about passive media consumption. They are about the community that develops around this purpose and not around the profit that can be squeezed out of users' attention.

      Future of public access Unix systems

      Public access Unix systems have been around for nearly four decades now. They have seen ups and downs in popularity, and they have been humming along in the background as computing has gone from the ARPANET to the spectacle of the commercial World Wide Web. Early public access Unix systems were largely about the novelty of socializing with other hobbyists through a computer, and that interest has evolved into the learning, doing and teaching model of an online hackerspace today.

      These systems are not huge, they are not coasting on advertising revenue, and they get by purely on the contributions, volunteer effort, and enthusiastic participation of their users. But as a contrast to commercial social network sites, they are an example of what online socializing can be when individuals put effort, thought, and compassion into their interactions with others. And just as importantly, they pass on the very skills that can independently maintain this social and communication medium for future generations of users.

      --

      As promised in the intro, if you're interested in reading a much more in-depth version of this article, here's the longer copy:
      https://cmccabe.sdf.org/files/pubax_unix_v01.pdf

      73 votes
    35. ~music Listening Club 0 - Outline and Prep

      Alright, so in the ideas thread, several of you expressed that you'd like / it would be more active if we went for a listening club that goes for something more general. As I think ~music is in a...

      Alright, so in the ideas thread, several of you expressed that you'd like / it would be more active if we went for a listening club that goes for something more general. As I think ~music is in a bit of a rough spot right now and needs a little more to bind it together, I'm going to try and have a bit of a hybrid solution that can hopefully be interesting for a lot of us.

      Again, the idea is to come together and listen to the same record each week, discussing our thoughts on that album over the course of that week in these threads. For now, let's make our goal to build a community and become familiar with the thoughts, tastes, and musical histories of each other!

      For every odd numbered week, we will listen to an acclaimed or important album of some kind that will hopefully have far-reaching appeal. I'm going to exercise my own judgement in picking these out of the qualifying albums, but expect them to be the OK Computers, A Love Supremes, and Illmatics of the world. If and when we reach a point where we've exhausted too many of these classics, we can restructure or retire this listening club.

      For every even numbered week, we will listen to a more obscure record as voted on by the participants of the thread. For an initial guide, as stolen from @Eva, we will define "obscure" simply as not being certified Gold (or anything higher, of course). This is of course a very loose definition of the term, but it's at least a concrete starting place. As ~ gives us a raw vote count, we will do this through voting on comments. All nominations must be made as a reply to my top level comment. Everything else will be ignored, and this will help keep things organized once this voting occurs on a thread that's dedicated to its own week's record. If it becomes necessary, we can vote on an external platform.

      I'm open to suggestions on how to change this process, but let's try to run it like this for a little bit. I don't want to get caught in that loop where you have so many tweaks and find so many flaws that you don't end up doing anything at all.

      The first thread will be posted tomorrow (Thursday the 21st here) and will continue on from there weekly.

      When we start our first record, feel free to listen, comment, and vote throughout the week. ~ gives us an opportunity to bump things and keep discussion going for a bit longer than Reddit, so let's take advantage of that where we can.

      16 votes
    36. An easy way to browse tildes on mobile

      Using Hermit - Lite Apps Browser you can make a shortcut to a dedicated browser session (with cookies and such, so you can stay logged in like an app) for tildes! I find that it works pretty well...

      Using Hermit - Lite Apps Browser you can make a shortcut to a dedicated browser session (with cookies and such, so you can stay logged in like an app) for tildes! I find that it works pretty well for a mobile app "substitute" and also it lets me keep tildes separate from all the tags I have open in my main web browser. Figured I'd share my solution for tildes mobile for the curious :)

      16 votes
    37. Best for Privacy: Local Recursive DNS vs Cloudflare's DNS over HTTPS

      I'm trying to decide what option I prefer here in terms of privacy. I'm curious of other's opinions on the issue, and if anyone has a better solution to offer more privacy. Option 1: Hosting a...

      I'm trying to decide what option I prefer here in terms of privacy. I'm curious of other's opinions on the issue, and if anyone has a better solution to offer more privacy.


      Option 1: Hosting a local recursive DNS


      I currently have a device running Pi-hole on my local network. I recently set it up as a recursive DNS server using unbound. This allows me to no longer rely on a public DNS such as GoogleDNS, OpenDNS, Cloudflare, etc. for my queries, and just point straight to the root servers.

      Pro: I removed a "pair of eyes" (Public DNS) out of the equation

      Con: All my queries are not encrypted so my ISP (and potentially others) can still see my DNS queries


      Option 2: Using DNS over HTTPS (DoH) using Cloudflare's client


      With this option I would use Cloudflare's cloudflared daemon they provide on their website. This would allow all my queries to be encrypted when sending them to Cloudflare.

      Pro: Encrypted DNS queries from my local network -> Cloudflare's servers. My ISP can no longer see my DNS queries

      Security Pro: Helps prevent MitM attacks

      Con: I now have a Public DNS back in the equation, which I have to put some trust into. Also, my queries are most likely only encrypted from my local network -> Cloudflare's network. When Cloudflare has to do the recursion, those queries may be not encrypted (my assumption is they will most likely be not encrypted)

      Possible Con: Does Server Name Indication (SNI) "leaking" apply to DNS queries at all? If so, then my query is revealed anyways right?

      As a note, I am nowhere near an expert on the specifics of DNS, so some of my assumptions on how things work may be super wrong!

      6 votes
    38. Anarchist Defense and Emergency Tactics

      I want to have a discussion about how decentralised communities and individuals best defend themselves. In the face of disaster there are many ways people can come together and find solutions...

      I want to have a discussion about how decentralised communities and individuals best defend themselves. In the face of disaster there are many ways people can come together and find solutions through direct action but i think that constantly planning ways with your affinities will help you survive a lot of disasters or a attacks and figuring out a way to do this is of hyper importance as the state attacks or declines. Anti-institutional and formal or federal ways of doing this should be valued and investigated allowing people to still be incredibly flexible with various contingency plans for self preservation.

      6 votes
    39. Would you pay for access to Tildes?

      Tildes is 100% donation-supported. It sounds great but I'm doubtful it's a sustainable model. Countless sites have started this way but ended up seeking other ways to monetize, including......

      Tildes is 100% donation-supported. It sounds great but I'm doubtful it's a sustainable model. Countless sites have started this way but ended up seeking other ways to monetize, including...

      1. Showing ads on the site
      2. Intermingling "sponsored posts" or "promoted posts" with regular posts, basically giving preferential treatment to content from users who paid for extra visibility (native advertising)
      3. Selling user data
      4. Cryptocurrency mining (either with user permission or on the sly)
      5. Opening a store for selling branded merch
      6. Periodic "pledge drive" fundraising campaigns
      7. Enacting paywalls

      I've been thinking a lot about site monetization in the abstract lately. Some of these options are better than others. Personally, I'd draw a hard line against 1-4 on Tildes. I think all of those are in direct opposition to what this site is all about.

      I think 5 is a "good in theory, but not in practice" idea. A merch store might generate enough revenue for the first few months but would see rapidly diminishing returns. It would have to resort to increasingly gimmicky promotions just to reach eyeballs and meet its goals.

      I think 6 could be a popular option but I personally recoil from the annual hard-sell guilt trip. The recurring drama of "THIS COULD BE OUR LAST YEAR IF YOU DO NOTHING" is exhausting and paints the site's future as constantly in turmoil.

      Finally we come to 7, the paywall. Traditionally I hate these too, especially when they block content like news that is available for free elsewhere. Sometimes they are "soft" paywalls that give you free access to an article (or the first few paragraphs of one) before they ask you to pony up. I feel that these are the worst form of paywall because they tease and frustrate users, and are often easily circumventable anyway.

      That said, I think a "hard" paywall might actually be a good choice for Tildes. For starters, this is already a walled garden. We're actively trying to cultivate a community by not exposing the site to the wider world. That would at least make the transition to a paywall easier to swallow than if the site had been open the whole time.

      It's 2018. By now it's evident to me that TANSTAAFL online. If you're not paying for something, you are the product. I'm a dyed in the wool cheapskate and I don't like opening my wallet to use a website, but at this point I'm even more tired of being treated like a commodity. If I'm going to invest in an online community, I'd much rather pay a small subscription for access than be jerked around in shady ways. I feel it's the most honest and straightforward solution for a site like this.

      Caveats are that it would need to be cheap. Really cheap, like $1 a month. I don't know what the site's operating expenses are, but I would hope something in that ballpark would cover them, at scale. Also @Deimos would face the temptation to implement multiple options from the list as time goes on. Like, after we're used to the paywall, he might want to add "unobtrusive" ads too, or start selling "non-identifiable" user information. I think it's vital that the site never compromise like that. Raise the price if it comes to that, but don't get greedy. A page in the docs formalizing some promises about respecting users would be a nice thing to put on the record.

      What are your thoughts? I should say that I'm talking about the future here, I think it's way too early to put up a paywall now. The community would have to be large and mature enough to justify a paid subscription to it, and we're not there yet.

      12 votes
    40. Ensuring users read documentation

      There have been many, many, many threads over the past few weeks in which users (some new, some with a few posts under their belts) ask questions or make suggestions about items that are...

      There have been many, many, many threads over the past few weeks in which users (some new, some with a few posts under their belts) ask questions or make suggestions about items that are explicitly discussed in the documentation. Additionally, the documentation contains a lot of thoughtful items discussing the goals of the site and the mechanics for achieving those goals. The documentation is an integral part of this community, yet many people don't seem to be reading it.

      How can the community help ensure that users read and understand the documentation prior to becoming a member of the community? A potential solution could be to have a short quiz based on the documentation, which would ensure that users at least skim it.

      Any other ideas?

      27 votes