• Activity
  • Votes
  • Comments
  • New
  • All activity
    1. Having issues setting goals and sticking with them? I’m working on a solution

      I am working on an app called Percent Done that is a combination of goal setting, time tracking and habit tracking. I like setting time-based goals for myself every day, such as “write for an...

      I am working on an app called Percent Done that is a combination of goal setting, time tracking and habit tracking.

      I like setting time-based goals for myself every day, such as “write for an hour” or “work on Percent Done for four hours.”

      I also like Seinfeld’s “don’t break the chain” method. For example, Apple Watch shows you how many days you have completed your exercise circle and tells you that you have been keeping at it for x days.

      Percent Done is a marriage of these two concepts. It allows you to set goals and track the time you spend on them, as well as how many days in a row you have consistently completed them. For example, you can add a goal that says “write for an hour every day,” and Percent Done will notify you every day to write for an hour. You will be able to tap on this goal and Percent Done will start counting back from one hour. You will also be able to see how many days in a row you have written for an hour.

      Here is a demo GIF.

      You can also add one-time goals to Percent Done with or without time tracking, so it is a task management tool as well.

      You can play with the design prototype here: Percent Done design prototype

      I would really love to get your feedback on this. If you are interested in being a beta tester, feel free to reply to this topic or e-mail me at "hi at evrim dot io."

      By the way, this is almost completely a self-promotion post. If it is against the rules, I'd be happy to remove this.

      23 votes
    2. Reddit has quarantined /r/The_Donald

      Just happened minutes ago, so not much information yet. I think it's likely that this article from Monday might have finally pushed it over the edge (since it's usually media attention that does...

      Just happened minutes ago, so not much information yet.

      I think it's likely that this article from Monday might have finally pushed it over the edge (since it's usually media attention that does it): You can’t offer to murder cops on Reddit unless you’re on r/TheDonald

      The quarantine message says:

      It is restricted due to significant issues with reporting and addressing violations of the Reddit Content Policy. Most recently the violations have included threats of violence against police and public officials.

      As a visitor or member, you can help moderators maintain the community by reporting and downvoting rule-breaking content.

      Here's the message the admins sent them:

      Dear Mods,

      We want to let you know that your community has been quarantined, as outlined in Reddit’s Content Policy.

      The reason for the quarantine is that over the last few months we have observed repeated rule-breaking behavior in your community and an over-reliance on Reddit admins to manage users and remove posts that violate our content policy, including content that encourages or incites violence. Most recently, we have observed this behavior in the form of encouragement of violence towards police officers and public officials in Oregon. This is not only in violation of our site-wide policies, but also your own community rules (rule #9). You can find violating content that we removed in your mod logs.

      As we have discussed in the past, and as detailed in our content policy and moderator guidelines, we expect you to enforce against rule-breaking content. You’ve made progress over the last year, but we continue to observe and take action on a disproportionate amount of rule-breaking behavior in this community. We recognize that you do remove posts that are reported, but we are troubled that violent content more often goes unreported, and worse, is upvoted.

      User reports and downvotes are an essential way that Reddit functions to moderate content. Limiting or prohibiting them prevents you from moderating your community effectively. Because of this, we are disabling your custom styling in order to restore these essential functions.

      As stated in our Moderator Guidelines, our goal is to keep the platform alive and vibrant, as well as to ensure your community can reach people interested in it. Accordingly, here are the specific terms of the quarantine and the next steps we are asking from you as a mod team to resolve this situation.

      Quarantine terms:

      Visitors to this community will see a warning that requires users to explicitly opt-in to viewing it. This messaging reminds users of the importance of reporting rule-breaking content.

      Custom styling has been disabled to restore the report and downvote buttons.

      We hope both these changes will help improve the signal around rule-breaking content and improve your ability to effectively address it.

      Next steps:

      You unambiguously communicate to your subscribers that violent content is unacceptable.

      You communicate to your users that reporting is a core function of Reddit and is essential to maintaining the health and viability of the community.

      Following that, we will continue to monitor your community, specifically looking at report rate and for patterns of rule-violating content.

      Undertake any other actions you determine to reduce the amount of rule-violating content.

      Following these changes, we will consider an appeal to lift the quarantine, in line with the process outlined here.

      We hope that this process provides a viable way forward to restore the health of the community. However, if this situation continues to escalate, we will explore further actions, including the possible banning of your community.

      Please confirm that you have received and understand this message.

      109 votes
    3. Is it possible to moderate a group chat on Facebook?

      Long story, but I've ended up becoming the admin of a group on Facebook (the previous admin stepped down in a rush, and added me as he left). And the group has an existing group chat associated...

      Long story, but I've ended up becoming the admin of a group on Facebook (the previous admin stepped down in a rush, and added me as he left). And the group has an existing group chat associated with it.

      Is it possible to "moderate" this group chat? Specifically, as an admin of the group, can I remove unsavoury/unwanted messages from the chat associated with the group? It looks like I can't.

      Can even the creator of a group chat do this? If I close the group chat and create a new one, will I (as its creator) be able to remove unsavoury/unwanted messages from that new chat?

      I've done some searching via Google, and I'm not finding anything to indicate that this is possible. If someone posts something unsavoury in a group chat, it looks like the only option is to remove the person from the chat - but the unsavoury messages can't be deleted.

      Please tell me that's wrong!

      6 votes
    4. A layperson's introduction to Spintronics Memory

      Introduction I want to give an introduction on several physics topics at a level understandable to laypeople (high school level physics background). Making physics accessible to laypeople is a...

      Introduction

      I want to give an introduction on several physics topics at a level understandable to laypeople (high school level physics background). Making physics accessible to laypeople is a much discussed topic at universities. It can be very hard to translate the professional terms into a language understandable by people outside the field. So I will take this opportunity to challenge myself to (hopefully) create an understandable introduction to interesting topics in modern physics. To this end, I will take liberties in explaining things, and not always go for full scientific accuracy, while hopefully still getting the core concepts across. If a more in-depth explanation is wanted, please ask in the comments and I will do my best to answer.

      Previous topics

      Bookmarkable meta post with links to all previous topics

      Today's topic

      Today's topic is spintronics storage devices for computers. I will try to explain how we can use an electron's spin to read and write data and why this is more efficient than current technologies.

      What do we need to have a storage device?

      In order to be able to save a bit (a 0 or a 1 in computer science speak), we need to be able to represent both the 0 and the 1 in some physical way. We could for example flip a light switch and say light on is 1, light off is 0. We will also need to be able to read the information we stored, in this case we can simply look at the lamp to see if we're storing a 0 or a 1. We would also like for this information to be stored even when power is cut, so that next time we power the hardware back on, we will still be able to read the data. Lastly, we want to be able to change between 0 and 1 freely; no one wants to go back to the CD days for storage.

      Now for some basic concepts.

      What is spin?

      Spin arises from quantum mechanics. However, for the purpose of explaining spin storage devices we can think of an electron's spin as a bar magnet. Each electron can be thought of as a freely rotating bar magnet that will align itself with the fields from nearby magnets. Think of it as a compass (the electron) aligning itself to a fridge magnet when it's held near the compass.

      Why are some metals magnetic?

      Why can we make permanent magnets out of iron, but not copper? In all metals, we have spins that are free to rotate. This means that we can turn a metal into a magnet by holding it near another magnet, it will "copy" the other magnet's magnetisation - its spins will rotate in the direction of the field. But as soon as we remove the magnet, our metal will stop being magnetic. This is because the spins are freely rotating, the spins will align to the magnet's magnetisation when they feel it, but nothing is holding them in place as soon as it's removed. We call this property paramagnetism.

      However, iron (and some other metals) will retain a nearby magnet's magnetisation even when the magnet is removed. This is because in these materials, called ferromagnets, it costs energy for the spins to rotate away from the material's magnetisation. They are pinned into place.

      What happens if we expose half of our ferromagnet to a magnetisation pointing in one way (let's call it up), and the other half to a magnet whose magnetisation is pointing the other way (which we call down)? The ferromagnet would copy both magnetisation directions and create a boundary region - a so-called domain wall - in the centre. The spins in this domain wall will slowly rotate over the thickness of the wall so that at one end they're pointing up and at the other end they're pointing down.

      How can we use spin to store data?

      What if, instead of a light bulb, we used a bar magnet as our storage medium. We could magnetise our bar magnet in one direction to store a 1 and magnetise it in the other direction to store a 0. To read what we have stored, we simply check the bar magnet's magnetisation.

      Let's work out this idea. We want to be able to efficiently change the magnetisation of a bar magnet and we want to be able to read the bar magnet's magnetisation. We will use a ferromagnet because it will retain our data indefinitely (its magnetisation will not change unless we force it to). We know it costs energy to flip the spins inside a ferromagnet, so we will want to use a very tiny ferromagnet - it will have less spins which means it will cost us less energy to change the magnetisation (i.e. flip the spins).

      Magnetoresistance

      A-ha, now we're getting into the fancy-titled paragraphs. What do you, dear reader, think would happen when we send a current (e.g. a bunch of electrons) through a magnet? What would happen to the current's electrons (also called itinerant electrons, to distinguish them from the non-moving electrons of the metal)? At the boundary of the magnet, where the current enters, only the electrons who (through random chance) have a spin that's aligned to the magnet's magnetisation will pass through. We call this effect magnetoresistance, as in effect part of our current will feel a resistance - they cannot pass through to the magnet. So to rephrase, the current inside the magnet will be "magnetised" - all of the spins of the itinerant electrons are pointing the same way.

      Current induced domain wall motion

      So now we know what happens to a current that's inside a magnet. What happens when this current meets a domain wall - the region where the magnetisation changes direction? The itinerant electrons' spins will start rotating along with the magnetisation, but the static electrons of the ferromagnet will also start rotating in the opposite way due to the magnetisation they feel from the current (more experienced readers will recognise this as conservation of angular momentum). So the spins inside the current will slowly rotate until they are pointing the opposite direction and can continue passage from the up-magnetised part of the ferromagnet into the down-magnetised part. But the spins that belong to the ferromagnet itself will be rotating in the opposite manner, slowly rotating from down to up as the current passes through. This means the boundary region between up and down magnetisation, the domain wall, will move along with the current.

      So in short, by sending a current through a magnet that's magnetised in opposite directions at each end, we can force our preferred magnetisation to expand in the current's direction. By reversing the direction of the current we can then magnetise the other way again.

      So we can say magnetising up (pushing current through (let's say) from left to right) can be our 1 and magnetising down (pushing current through from right to left) can be our 0. This would allow us to store data permanently as even when we remove the current our magnet will remember its magnetisation. If we make a really tiny ferromagnet we will only need a really tiny current to flip it's magnetisation too. So we can scale this process down to get to really good efficiencies. In the lab these types of devices are down to nanometre scale and require extremely little current to be operated.

      Reading the data

      OK, so now we know how to write data. But how do we read it? The key effect here will be magnetoresistance, as explained earlier in the post.

      Let's look at this picture. The red dotted line shows our write currents, the big bar is our ferromagnet. The arrows pointing up and down at the sides are our magnetisation direction, the double-pointed arrow in the centre shows the region where we flip the magnetisation by sending through a current.

      Now we jam a third, permanently magnetised, bit of metal (let's call it the read terminal) on top of the centre of our bar. We send a current from this read connector to one of the ends of the ferromagnet. If the ferromagnet's magnetisation is aligned to that of the read terminal we will experience a low (magneto)resistance, but if the ferromagnet is magnetised in the opposite direction we will experience a high resistance. By measuring the difference in resistance we can determine if we have a 0 or a 1 stored. We just need to be careful not to send too big of a current, else that would influence our ferromagnet's magnetisation. But small currents means better efficiency, so this is not a problem at all.

      Conclusion

      This concludes the post, we have seen how to use spins and magnets to both write and read data and we understand why this is efficient.

      Feedback

      As usual, please let me know where I missed the mark. Also let me know if things are not clear to you, I will try to explain further in the comments!

      27 votes
    5. I believe Google search is restricting what articles I can see in my searches, based on my location. What can I do?

      Whenever I search for information about something - especially about a news event - Google returns me a lot of results from Australian sites. Any foreign sites come further down the list,...

      Whenever I search for information about something - especially about a news event - Google returns me a lot of results from Australian sites. Any foreign sites come further down the list, sometimes even on the second page of results. I've never really paid much attention to this behaviour, beyond some occasional mild frustration at not being able to find local sources.

      However, this came to a head this week when I was searching for a local US-based news article about something I'd read in an Australian news site, so I could post that local US article here on Tildes (I always try to get as close to the source as possible). But, try as I might, I just could not find any good non-Australian articles about this news! It was almost like Google was deliberately blocking my attempts to read non-Australian sites. I mean, it's possible that this news wasn't reported outside Australia, but that's unlikely, seeing as it was Uber's announcement about trialling electric aircraft in Texas and Victoria. That had to get American coverage. But I struggled to find it in my searches.

      I then noticed something I've never noticed before: at the bottom of my Google searches, there's a small line which tells me my current location. It's as specific as my local council area, not just my state or the country.

      Is this location affecting what Google shows me in my searches? If so, how do I remove this restriction?

      For context: I use Chrome, but I only sign in when I'm accessing a Google service (usually the Calendar). After I've finished with the service, I sign out. So Google isn't tracking me as a person, it's just tracking my browser's search activity.

      EDIT: Thank you all. I've already set up DuckDuckGo as my default search engine, and am trying it out.

      16 votes
    6. Voting on suggestions for the name of this group.

      Following this previous thread in which we shared our suggestions for the name of this group, you can now vote for your preferred name(s) on Survey Monkey. Voting is by ranking. You will be...

      Following this previous thread in which we shared our suggestions for the name of this group, you can now vote for your preferred name(s) on Survey Monkey.

      Voting is by ranking. You will be presented with a list of 8 suggested names. You need to drag-and-drop these names into your preferred order, from top to bottom. (After you've dragged one name into place, the list will then number itself and you can manually number each option if you don't like dragging-and-dropping.) Put the name you like best at #1, the name you like second-best at #2, the name you like third-best at #3, and so on to the end of the list.

      If you do not like an name and do not want to vote for it at all, tick the "N/A" box beside it. This will remove it from your submitted vote and give it a zero weighting in the count.

      The names will be displayed in a random order for each person.

      Make sure you click on "DONE". "OK" is only the first step. You must submit your response by clicking
      "DONE" or it won't be counted.

      Vote counting will be done automatically by Survey Monkey. The algorithm allocates a weighted number of votes to each option, based on its order in your list. If you vote for all 8 names by preference, your 1st preferred name will receive a weighting of 8, your 2nd preferred name will receive a weighting of 7, your 3rd preferred name will receive a weighting of 6, and so on to to your 8th preferred name which will receive a weighting of 1. Here is an explanatory video for anyone who's interested.

      The survey prevents multiple responses from the same device. However, I've set it to "anonymous" so that IP addresses are not included in the results (why would that even be an option?).

      Here is the survey: https://www.surveymonkey.com/r/ZKD76FS

      Happy voting!

      25 votes
    7. When is validation good/bad?

      The recent topic about vote counts being removed has sprung up some discussion about the nature of validation. Given that the comments over there seem to address the idea in the context of Tildes...

      The recent topic about vote counts being removed has sprung up some discussion about the nature of validation. Given that the comments over there seem to address the idea in the context of Tildes specifically, I figured I'd create an offshoot thread for a more philosophical discussion of the question at large.

      • When is validation a good or bad thing?
      • Is seeking validation fundamentally a bad thing?
      • Is receiving validation for something great you've done fundamentally a good thing?
      • What is your own relationship like with validation?
      • Should platforms structurally encourage/discourage/balance methods for validation?
      23 votes
    8. What are you most proud of in your life?

      Someone asked me this recently, and I wasn't sure how to answer. Not because I can't self-identify things I've accomplished, but because it can seem boastful to openly express them. For this...

      Someone asked me this recently, and I wasn't sure how to answer. Not because I can't self-identify things I've accomplished, but because it can seem boastful to openly express them.

      For this thread, I want to remove any and all social restrictions on boasting. Talk yourself up! Be loud and proud! Navel-gazing is not only allowed, but encouraged!

      I chose the title based off how the question was phrased to me, but I'm really interested in what you consider to be your most positive achievements and characteristics. As such, consider the following series of questions as a jumping off point:

      • What are you most proud of in your life?
      • What are your biggest accomplishments/successes in life?
      • What are you good at?
      • What are your unique talents and skills?
      • What makes you individually awesome and stand out from others?
      • What significant hardships have you overcome?
      • How you have you changed your life, others' lives, or the world for the better?
      20 votes
    9. Hierarchical tags: How they're used and working toward a community standard [Draft part 1]

      among the things i have been working on for the past day and change is documentation of the novel uses of hierarchical tags on tildes, how they vary by group (or in the cases here, across most or...

      among the things i have been working on for the past day and change is documentation of the novel uses of hierarchical tags on tildes, how they vary by group (or in the cases here, across most or all of the site), and how we might best begin to standardize, introduce, or deprecate them going forward so we're on the same page and end up with tags that aren't a giant, unfriendly, user-unintuitive mess.

      obviously, though, this is something that should probably include community input since the community generally determines the tags used in the first place; therefore, this is your chance to check my work, suggest additions, removals, etc. to this draft and in the end, hopefully help craft a standard of hierarchical tagging that's simpler, more intuitive, and more consistent for everybody on the website to use so we can reduce future meta discussions on this and make tags better overall.

      this will be done in chunks for convenience purposes (your sake and mine). therefore, if you would be so kind as to try and limit your suggestions to the pertinent tags, that would be most helpful.



      Mostly group non-specific tags

      There are also a number of tags which are more general and occur or can occur in several or all groups on the website. Some of the more common conventions of hierarchical tags that are generally not group-specific are:


      economics. and similar tags

      The economics tag can occur in several groups, most often ~science, ~news, and ~misc. While it can take hierarchical tags, standalone economics is usually fine. Nonetheless, with specific branches of economics like microeconomics and macroeconomics, hierarchical tags should probably be used (thus economics.micro, economics.macro, economics.applied, and so on). Examples of this in action (and further specification under this scheme) are:

      • economics.trade (economics and trade)
      • economics.micro.urban (urban microeconomics)
      • economics.policy.employment (economic policy with respect to employment)

      However, when placed in ~science, the standard is always socialsciences.economics over economics. to align with the standards of tagging in that group, thus socialsciences.economics.trade instead of economics.trade. Given that economics. in this case is itself a hierarchical tag, it may be pertinent to break off the last hierarchical tag into its own tag where it would lead to three consecutive hierarchical tags, like so:

      • socialsciences.economics.micro and urban areas
      • socialsciences.economics.policy and employment

      law.

      The law tag takes a very large number of modifiers and can be used in just about every group due to the fact that law generally transcends the current set of groups Tildes has. Historically, topics related to law have been tagged in the [modifier] law format (i.e. medical law, copyright law, us law, and so on); however, this has generally been phased out by the community in favor of using hierarchical tags for the modifiers. Therefore, with respect to pre-existing tags, constructions like medical law should be deprecated in favor of law.medical. In addition, the following tags which do exist should be converted accordingly:

      • medical law (convert to law.medical)
      • international law (convert to law.international)
      • labor law (convert to law.labor)
      • employment law (convert to law.employment)
      • antidiscrimination laws (convert to law.antidiscrimination)
      • copyright law (convert to law.copyright)
      • maritime law (convert to law.maritime)
      • environmental law (convert to law.environmental)
      • gun laws (convert to law.guns)

      All single modifier tags should follow a pattern like this. In other words, if you were going to tag something as "abortion law", you should do law.abortion instead of abortion law. Currently well established tags following this format are: law.citizenship, law.international, law.labor, law.marriage, and law.juvenile.

      The following tags with location tags in them (and similar tags like them) should be converted slightly differently from the above tags. Instead of being rolled directly, the locator tag (or what would be the locator tag) should be broken out from the tag, and the tag that is left should have its modifier turned into a hierarchical tag if possible. Thus:

      • usa federal laws is converted to law.federal and usa. (To elaborate in this case, the usa is separated, leaving federal laws which can be converted into law.federal)
      • us law is similarly converted to law and usa
      • european law is converted to law and european union

      However, this should generally not be done with tags which refer to specific laws. For example religious neutrality law, blue laws and safe haven law are tags which should not be converted to use hierarchical tags because it makes little sense to do so.

      There are also two specific tags which should generally not be rolled, which are martial law and law enforcement. Martial law is mostly used to refer to a specific state of affairs rather than an actual subset of law, so it makes little sense for this to be grouped into the law tag, while law enforcement is not really law in the sense being tagged here and is also covered by other tags like policing; using law.enforcement for this purpose would also be ambiguous, since it more likely would refer to enforcement of legal doctrine.

      The use of the sharia law tag is ambiguous. Since sharia is de jure a form of law, it would make sense to roll it like the other examples so that the tag is law.sharia; however the two uses of it on Tildes are sharia law and there is currently no real consensus on whether or not to roll it in this manner.


      nsfw., trigger., tw., cw. and similar tags

      nsfw., trigger., tw, and cw. are all universal tags that have been used in one form or another to separate out content which might be objectionable and which are still useful for these purposes. Although all four have been used, the community has largely settled on a standard of using trigger. over tw. and cw. with potentially triggering content primarily for reasons of clarity (the trigger. tag also been put forward by Deimos previously as a way of handing potentially triggering and objectionable content). nsfw. is also sometimes used, but this is less frequent and usually carries a different implication than trigger. does.

      As mentioned above, if you are using intending to use a tag of this sort, the preferred option in almost all cases is trigger. over tw. or cw.. For all intents and purposes, tw. and cw. should be considered mothballed and previous uses of them should probably be converted into trigger. at some point (particularly the duplicates tw.death, tw.suicide, and tw.selfharm).

      The main established tags under the trigger. banner are:

      • trigger.death
      • trigger.selfharm
      • trigger.suicide
      • trigger.sexual violence
      • trigger.rape
      • trigger.assault
      • trigger.child abuse
      • trigger.transphobia
      • trigger.homophobia (not used yet, but presumably applicable due to trigger.transphobia's existence)

      These are self explanatory for the most part, and cover most bases; however, if you feel that a particular topic is likely to be triggering for some people, it would be courteous to tag it accordingly in line the above tags. (Do also note that all of these tags can be and often are applied as standalone tags instead of being grouped under trigger. due to the fact that trigger. has waxed and waned in popularity over Tildes's existence.)

      If you are intending to post graphic content, or content which has the potential of exposing people to graphic content (broadly construed) and want to tag it accordingly, nsfw. is generally preferable over trigger.. nsfw. is quite rare, but one example of it in action is the nsfw.racism tag on Ignore The Poway Synagogue Shooter’s Manifesto: Pay Attention To 8chan’s /pol/ Board due to the exceptionally racist content screencapped as a part of the submitted article. nsfw.sex is also seen on Do Police Know How To Handle Abuse Within Kinky Relationships? due to the explicitly sexual nature of the article's subject, but this is more of a courteous measure than a necessary one--a qualified nsfw tag is generally not necessary, and if one is a moderator will most likely add it after the fact.


      hurricanes., cyclones., and typhoons.

      Tropical cyclone news generally fits into several places, most often ~news, ~enviro, or ~science. Generally, the standard for tagging tropical cyclones, whether they are hurricanes, cyclones, typhoons, or other similar storms is to use the applicable term for the storm in question, and then use a hierarchical tag for the storm's name. Actual examples of this are:

      This is relatively straightforward, and covers the nomenclature of all existing basins. However, some basins have not been represented on Tildes thus far, so here are the two cases where standards overlap for reference:

      • the Pacific hurricane basin and the South Atlantic basin would both be represented by the same standard as the Atlantic basin (thus, hurricanes.patricia for the Pacific Hurricane Patricia and hurricanes.catarina for the South Atlantic Hurricane Catarina)
      • the Australian, North Indian, and South Pacific basins would be represented by the South-West Indian basin's standard (thus, cyclones.tracy for Australian Cyclone Tracy, cyclones.fani for North Indian Cyclone Fani, and cyclones.gita for South Pacific Cyclone Gita).

      For convenience purposes, storms which are named but have not hit hurricane status should probably still be referred to with the corresponding cyclonic storm tag for their basin, even though they have not formally reached hurricane, cyclone, or typhoon status.

      If there is no name to refer to (i.e. a name has not been designated for the storm), a hierarchical tag should probably not be applied at all, since that would get messy and likely necessitate updates. With storms that have only nicknames or lack a name under the nomenclature since they predate cyclone naming (for example, the 1938 New England Hurricane) there's really no best way to do things, however, using a truncation of the nickname may be the most preferable option (for example: hurricanes.1938 new england).

      36 votes
    10. Any developers/designers interested in a helping build a proof-of-concept for a new type of data-centric app?

      Wow it was hard to describe this in the title! I should have said "data-centric APP" not UI. Sorry! LOL I have had an idea for 25 years that I keep NOT pursuing because I was convinced that the...

      Wow it was hard to describe this in the title! I should have said "data-centric APP" not UI. Sorry! LOL
      I have had an idea for 25 years that I keep NOT pursuing because I was convinced that the next big version of Linux/Windows/etc would include a more civilized way to manage data. It just seems obvious in my strange mind, I guess that means intuitive. I've discussed the idea and worked on refining the concepts with about 20 people and they all agreed.

      My idea is based on a huge paradigm shift about managing all forms of data by the user. It's about how we manage data, not just file-system stuff or yet-another Windows/File Explorer or any of the numerous current Linux varieties. I'm honestly shocked that in 2019, the most original idea that's come about is to remove all the menus and toolbars (freeman) or add a bunch of tabs and hundreds of buttons (pretty much everything on Windows).

      I am a software engineer and designer with 35 years experience - but with business class apps, not OS stuff. I am semi-retired and have a great deal of time to work on whatever interests me. And please note: Despite my advanced years ;-) LOL I am very current on the technologies I work with daily, which is mainly .net/c#. However, I just finished a year-long project that had a Java client running on a Raspberry Pi (which I love) paired with a WCF service running in IIS, along with an asp.net web client. Now I'm not an expert in any of that, but I'm not too shabby I don't think as I've made a good living and do mostly volunteer work right now.

      I currently manage a massive amount of data, from files/dirs on Windows and Linux file-systems, to MSSQL and mySQL on both Windows and Linux, and of course some cloud data. And it takes several tools as you know, and it's incredibly inefficient and painful. And of course on Windows, Windows/File Explorer is - eh, I can't find a word strong enough. On Linux not much better. And I've spent the past two years searching, researching, testing, and praying.

      My idea is to build an app that allows users - not just developers like me - but mostly aimed at business users - to manage data from various sources/technologies in a single unified and intuitive manner. The physical aspect is divorced from the UI which is divorced from the management engine. And it's grouped the way the user THINKS and WORKS with it. For example, let's say for PROJECT-A (and Client-1) I have various source code locations on 2 local hard drives, but also documents (technical specs, or maybe letters to the client, spreadsheets or timelines), and of course likely a database or two, some web-site links. How many places and how many apps would I have to use today to keep them all close by so I could get to them? Well, there'd be a couple of drive letters probably, maybe a few sub-folder levels deep, maybe documents on a network share, some collaborative docs in the cloud, and some web-site links in whatever-browser-you-use. You get the idea.

      No file manager on any OS can give you much more than "Places" or file-system - drive letters on Windows or some mount points on Linux. Things like MyDocuments, MyMusic, MyInsanity - that stuff makes no sense because it's not how people work. What I want is a "work-space" where I can have any number of what I call "Data Sources" - and it doesn't matter what physical technology is underneath it - local hard drive, local sub-folder, mapped drive, unc mount, cloud, ftp - don't care - don't need to. I create a work-space, add data sources, order them however I want, name them whatever I want, and each "Data Source" has a manager or provider. A filesystem provider would make your data source look like Windows Explorer. But a database provider could look like MS SQL Server Manager or other db admin tool. And you put that workspace in a tab if you want, and have as many others in other tabs - or you put them on a menu, or on a popup that a middle-click brings up - doesn't matter. And everything I've just written, plus it's settings, is represented by Viewer objects. A hierarchical - tree-view or the likes - a flat view - a list-view - a preview pane, or editor pane - navigation tool (path/breadcrumbs) - a command line shell pane - drag/dock wherever in the tab you want. A main menu/toolbar + status-bar would be global and shared. And all THAT is bundled into a PARENT object - which contains the work-spaces, which contains the tabs, which contains the data sources + provider views/panes. And you can have as many of THOSE - parent objects - as you need, easily accessible in the custom titlebar at the top, or bottom, etc..

      The point is - when I am working on PROJECT-A I manage it in a tab that contains ONLY the drive letters, or mount points, that are relevant (and named what I choose, meaning no drive letters forced on me even if that is the underlying reality nor any full paths or full URLs - just logical names I assign). This will NOT be some massive file manager with every folder on the system or 18 drive letters I'll never use. It will have all the web-site bookmarks I need, as well as databases I'm working with. This won't be an ALL-IN-ONE type of thing - you will STILL use your external apps, web browser, IDE or editor, mail app - but it will be a SINGLE place where ALL those data items get represented and where you can manage them in exactly the same way. I can copy/paste an email message to a file on my workstation, or copy a file from a network share to some machine remotely using ftp or http.

      I hope this makes some kinda sense and doesn't just sound like the ramblings of yet-another aging geek who thinks he's got a great new idea. My usage scenarios are literally based on things I do every day, and are the result of observing myself as I work to see what my mind is doing. I do realize that we all work in our own way, and I've taken that into account. But there are basic things we all do concerning data management. And as I have hired, trained, and worked with a huge number of fellow programmers over my 35 years - without exception this was the most common soft point for them all. Keeping track of data. The same applies to all my clients. I've written software for accountants and attorneys, and a wide variety of business types - and without exception - every one of them had trouble with managing their data. One look at their Desktop or MyDocuments - or just watching them trying to find a letter in MS-Word - tells the whole story.

      Ok there's my pitch - I'm looking for anyone who has interest, no matter what your skill level or how much time you can or cannot devote. We need people who can contribute only opinion and advice, as well as hardcore keyboard jocks like me who love to code for 36 hours at a clip ;-) LOL

      12 votes
    11. A personal story about fake news

      I had an interesting conversation with my housemate last night, which opened my eyes to just how easily fake news gets into ordinary people's minds. We were discussing an episode of 'The Orville'...

      I had an interesting conversation with my housemate last night, which opened my eyes to just how easily fake news gets into ordinary people's minds.

      We were discussing an episode of 'The Orville' we had just watched, and conversation shifted topics (as it does), and we ended up talking about free speech and political correctness - and he told me, quite matter-of-factly, that at least one local school had removed all books which referred to "boys" or "girls" from its library, and that other schools wanted to ban children from referring to themselves as "boys" or "girls". This was part of a politically correct drive to remove all references to gender, so that noone is "male" or "female".

      My housemate is not a raving lunatic. He's not a rabid fascist or alt-right person. He's just an ordinary Aussie guy, going about his ordinary life, with no malice to anyone.

      But his extended family watches certain TV channels and reads certain newspapers, and he had picked up this little nugget of knowledge from a TV show one of them was watching.

      We discussed the matter, and I told him that what he had just said is fake news. I explained that I didn't think he was wrong, but that his sources were wrong. He wouldn't believe me - to the point where he demanded that we go to a computer and double-check it.

      It didn't take me long to find both the newspaper articles and television segments spreading this fake news, and the other sources debunking it (because I knew what I was looking for). It turns out that some ivory-tower academics had done a study which showed that making little girls play with "hyper-feminised toys like Barbies" was reinforcing certain sexist stereotypes, and maybe that should be changed. That was it. But certain newspapers (owned by a certain media tycoon) had twisted this into a scare story involving evil teachers who were coming to steal your children's identities by stopping them from being boys and girls and removing everything that said "boys" and "girls" from libraries - and other news outlets had picked up this story and run with it, adding their own touches as it bounced from one outlet to another.

      As soon as I showed him the debunking sources, he accepted them. He got a bit defensive, and deflected blame on to his family and the news - but he believed the truth when I showed it to him. He's not stupid or malicious, just misinformed. I agreed with him that it wasn't his fault. As he said, most normal people aren't like me, reading deep into the news and double-checking what they say. Most people just read the paper or watch the TV and accept what they're told.

      Fake news is so easy to spread. Most people don't question their news sources. If a newspaper or newsreader tells them something, they believe it because it's coming from a supposedly reliable source.

      32 votes
    12. In my opinion, censorship is a bad way to combat hate speech.

      (Let me make this clear before you continue reading, I don't know any good solutions) Recently, all over the internet, I feel like I am seeing more and more companies filtering out content that...

      (Let me make this clear before you continue reading, I don't know any good solutions)

      Recently, all over the internet, I feel like I am seeing more and more companies filtering out content that are considered hate speech. I personally do not like this for two reasons.

      1. I think it is a band-aid solution. People who have their voice taken away from themselves are not suddenly going to change their mind.
      2. In a way, it is a form of removing freedom of speech. Now, I understand that a lot of the companies that are censoring hate speech are doing it primarily for the sake of sponsors, but I mean this in a more broad scope.
      3. It is effectively hiding societal problems.

      I think one argument for the increased censorship is: even if it doesn't combat hate speech, it stops the spreading of hate speech. By spreading, I mean more people believing that hate speech. Though at first this could be a good idea, I think it is the wrong way to go about it. I really don't know what exactly is the right way to deal with this issue. Maybe more inclusion of different communities? Maybe education? Learn how to think critically?

      Here are a couple other things I have been thinking about, but I am not too sure about. I do not know if they are true or not, but if any of you could provide more insight, I would like to know more:

      1. Hate speech is actually lower than ever. The reason why some people feel like it is higher is because the hate speech is entering to people's bubbles through the internet. Before the internet, there was still that kind of talk, it was just in a different medium.
      2. Though not hate speech, but in a way related, with Anti-vax, the people who are most susceptible to converting to an anti-vaxxer, are parents. A lot of times these are the people who didn't grow up with the internet, the way they view the internet is not exactly how younger people view the internet. There is more doubt in what we see online between younger people than older.

      And I have had people say I must be a white upper class person to have these kinds of opinions. No. I am not white. Not upper class. I have dealt with racism in one way or another for all of my childhood, less so as an adult.

      28 votes
    13. Experimenting with a way of avoiding deeply nested comment threads

      One of the difficulties with a nested/tree commenting system is finding a way to deal with threads that get very "deep", when people continue replying back and forth under the same threads. The...

      One of the difficulties with a nested/tree commenting system is finding a way to deal with threads that get very "deep", when people continue replying back and forth under the same threads. The deep threads end up getting indented very far, and this looks bad, can be hard to follow, and wastes a ton of space (especially on smaller screens like phones).

      I'm not a huge fan of any of the ways that I've seen other sites try to handle this, so I've been trying to figure out if there might be any other possibilities that would work well. I've noticed that in most of the cases where a thread gets very deep, a lot of the depth comes from back-and-forth replies, where there's only one comment on each "level". So I'm testing a method that will flatten those sections out and just put a note on each comment that it's a direct reply to the comment above it.

      Specifically, the current method (which is now live), works like this: if a comment is at least 4 levels deep and only has a single reply, don't indent the reply any further. Instead, keep the reply at the same indentation and add a note at the top of it indicating that it's a reply to the above comment.

      I managed to implement this entirely through CSS, by writing what's probably the worst best chunk of CSS (really, SASS) of my life, which I want to show off here. If you don't know CSS and can't read this, trust me, you're better off:

      .comment:not([data-comment-depth="0"]):not([data-comment-depth="1"]):not([data-comment-depth="2"]):not([data-comment-depth="3"]) {
        &[data-comment-replies="1"] {
          & > .comment-tree-replies {
            margin-left: -1px;  // compensate for border
      
            & > .comment-tree-item > .comment > .comment-itself {
              & > .comment-text::before,
              & > header > .is-comment-deleted::before,
              & > header > .is-comment-removed::before {
                content: "(Reply to above comment)";
                font-size: 0.6rem;
                font-style: italic;
                margin-right: 0.2rem;
              }
            }
          }
        }
      }
      

      One of the really interesting things about implementing this entirely in CSS is that we can easily change what level it happens at based on screen size. So I have it set to always start at depth >= 4 right now to help with testing and deciding whether it works well or not, but if we decide to keep it I could easily change the threshold to higher on desktop and keep it lower on smaller screens.

      As an example of how it works, the previous ~tildes.official thread works really well. @Amarok and @cfabbro had a long discussion about music metadata that went very deep. The thread ends up 16 levels deep, but this new change makes it so that it only indents by 5 levels instead of 16. Here's a comparison between how the end of the thread looks on my phone: before this change vs. after this change (yes, something's not quite right with the indentation lines yet).

      Let me know what you think. I'm mostly concerned that this might make it a little harder to follow long threads since the information from the indentation is lost, but I think we need to test it out in real threads for a while to see if that actually ends up being significant or just takes a bit of getting used to.

      76 votes
    14. Mod annotations for removed comments

      I just came across this field of 13 admin-removed comments and frankly it left me feeling rather unsettled. That's a lot of content to just nuke all at once. Contextually, the thread up to that...

      I just came across this field of 13 admin-removed comments and frankly it left me feeling rather unsettled. That's a lot of content to just nuke all at once. Contextually, the thread up to that point was genial and non-controversial, so it seems especially odd that there's just this black hole there. What struck me mostly was how opaque the moderation was. There is no indication of what kind of content was removed, why it was removed, or specifically who did the removal or when it happened.

      Then I scrolled down and at the very bottom I found what I guess is meant to address these concerns, a comment from Deimos:

      Sigh, I saw this thread was active and thought it was going to have an actual on-topic discussion in it. Let's (mostly) start this over.

      It's not always clear online so I want to say that I'm not rage-posting or bellyaching about censorship or any of the usual drama that tends to crop up on sites like Tildes from time to time. I trust Deimos' moderation and give this the benefit of the doubt. What I'm actually doing, I guess, is making a feature request about better annotation for removed comments.

      Would it make sense to show a note (like Deimos' comment) in-thread at the position of the deleted content? Instead of down at the bottom of the page or unattached to anything relevant? In my opinion some kind of "reason" message should always be provided with any moderation activity as a matter of course. Even if it's just boilerplate text chosen from a dropdown menu.

      Also, would a single bulk-annotation for all of the related removals make for better UX than 13 separate ones? I think that would be both easier to read, and easier for Deimos to generate on the backend.

      I feel like we may have had this conversation previously, but I couldn't find it. Apologies if I'm beating a dead horse.

      13 votes
    15. Feature request: Use "/t/" in alternative to "~" in the url of a tilde.

      My title sucks, couldn't word it better. So, I hate having to use the tilde char. Doing tildes.net~tildes is much harder for me than tildes.net/t/tildes. It would be cool if tildes also supported...

      My title sucks, couldn't word it better.

      So, I hate having to use the tilde char. Doing tildes.net~tildes is much harder for me than tildes.net/t/tildes. It would be cool if tildes also supported using "/t/". I am not suggesting to remove the "~", but make one redirect to the other.

      22 votes
    16. Favorite homebrew console applications/games

      What is your favorite homebrew console application/game? A really cool thing I saw recently was someone moved the dsi version of flipnote to a 3ds and connected it to an unofficial server to...

      What is your favorite homebrew console application/game? A really cool thing I saw recently was someone moved the dsi version of flipnote to a 3ds and connected it to an unofficial server to continue using it like when the servers were still online. Another cool thing was DS linux, I never managed to get it working but as part of the install process it removed the health and safety warning screen which is kinda neat.

      8 votes
    17. [SOLVED] I might switch my PC media player from VLC to something else due to potential data leaks. What other media player should I choose if I do so?

      edit: Problem solved, davidb informed me about the vulnerability in version 3.0.4, and that it is fixed in the new version 3.0.6. Somehow Spyhunter thinks i still use 3.0.4, which in turn is the...

      edit: Problem solved, davidb informed me about the vulnerability in version 3.0.4, and that it is fixed in the new version 3.0.6. Somehow Spyhunter thinks i still use 3.0.4, which in turn is the actual problem i had with Spyhunter, not VLC.

      Spyhunter 5 has been bothering me about potential data leaks from vlc media player. The vulnerability is generally based on publicly available information.
      It would be a shame if i have to switch, been using vlc for as long as i remember. It is probably the best media player out there, but i hate sharing my personal data in any way or form.

      Spyhunter msg:

      • Severity: Medium, VLC media player (Version 3.0.4)
        • The CAF demuxer in modules/demux/cad.c in VideoLan media player 3.0.4 may read memory from an uninitialized pointer when processing magic cookies in Caf files, because a ReadKukiChunk() cast converts a return value to an unsigned int, even if that value is negative. This could result in a denial of service and/or potential infoleak.

      Is this even anything to care about? I have updated VLC including removing cashe and still get the alert. Is a rollback another option perhaps?

      5 votes
    18. What are people's thoughts on CAPITALIZATION in headlines/titles for EMPHASIS?

      One of my favorite YouTube channels, Linus Tech Tips, does this all the time, but I have seen many others doing this as well, and I personally find it rather obnoxious. I understand that it's more...

      One of my favorite YouTube channels, Linus Tech Tips, does this all the time, but I have seen many others doing this as well, and I personally find it rather obnoxious. I understand that it's more effective at getting them views, which they rely on to stay in business... but I see it as just another form of clickbait, and so when I submit LTT videos I tend to remove that capitalization.

      However, are there any cases where capitalization for emphasis is appropriate in a headline/title? And if not, should titles be edited to remove them?

      p.s. Acronyms and Initialisms are obviously different, so let's ignore those and put them in the "clearly acceptable" category.

      19 votes
    19. Crazy idea to help stop the spreading of untruthful news

      One of the main issues with news on social media is the spread of fake or false news. This happens on every platform that allows sharing news. If Tildes continues to gain popularity, this will...

      One of the main issues with news on social media is the spread of fake or false news. This happens on every platform that allows sharing news. If Tildes continues to gain popularity, this will likely happen on Tildes. I had an Idea: what if tildes had a group of fact checkers that check to see if the news is truthful, and block posts that link to untrustworthy new sites? could be like a 3 strikes thing, where if a new source has 3 articles posted that have misinformation, they would be blocked (the post also removed).

      This is just an idea, feel free to highlight any issues with it.

      10 votes
    20. I want the next Borderlands to be good... but it probably isn't going to be

      So the pre-announcement announcement for the next Borderlands game (which is probably not going to be Bord3rlands but something else) was posted today. It's pretty neato. But, as a HUGE fan of the...

      So the pre-announcement announcement for the next Borderlands game (which is probably not going to be Bord3rlands but something else) was posted today. It's pretty neato. But, as a HUGE fan of the first 2 games (Pre-Sequel was aight), to say that I'm pessimistic about the future of the franchise would be the understatement of the decade.

      The odds are so completely stacked against the next Borderlands game, that it will be a miracle if the game is anything less than a catastrophe.

      Every possible thing that could go wrong with the game, will go wrong, from the industry's standards to the developer and publisher of the title. I want to be wrong about this, but considering the circumstances surrounding it, I'm very comfortable expecting otherwise.

      Allow me to go down the list, here:

      • The Borderlands formula was built for loot boxes. You could even argue that it was the first AAA game to be designed AROUND them. The W/G/B/P/O rarity system that the game established has been used by every other similar system since. The entire game revolves around tiered loot, attained primarily through low-chance drop tables which the player has to grind through the game to find. The previous entries in the series made this formula fun for a bunch of reasons that are self-evident while playing, and by some miracle, Borderlands: TPS somehow came out before Overwatch showed the industry just how amazingly profitable it is to put unregulated gambling in a game made for minors.

      I expect that the next game won't JUST have monetized loot boxes, but because they'll likely nerf Borderlands 2's already comparatively abysmal drop rates to make them more appealing, the game will REVOLVE around monetized loot boxes. Different tiers, different prices, approximately 30% of which can be earned in game, but only if you grind your heart out, because the game is also going to be designed for that. Next point:

      • 2k Games, publisher of the previous three titles, is one of the only AAA publishers out there that hasn't yet successfully jumped onto the "games as services" bandwagon, and with the Borderlands formula basically being that of an MMO minus the enormous playerbase, plus decent shooting mechanics, you can expect it to follow in the footsteps of other such glorious recent titles as Anthem and Destiny 2.

      Not only will the game likely be released unfinished and with the standard array of season passes and roadmaps that plague the industry, but the game will likely sacrifice what made the first 2-1/2 compelling and enjoyable (them being first and primarily progression-based RPGs) to keep players playing, grinding, and waiting for the next DLC drop. I'm expecting that the game will not have a proper end or a new-game-plus mode, instead turning the formula on it's head and following the aforementioned "Live Services" in their footsteps to create a dull, grindy experience which will basically serve as a platform to sell the aforementioned loot boxes and whatever else will be included, which, speaking of...

      • like every other game produced by a company accountable to shareholders, you can expect aggressive monetization, stopping just short of pay-to-win gameplay, if it even does. 2k is one of the worst offenders for this, and at launch, I'm expecting a full, $60 game with a $25-$30 season pass that's ESSENTIAL to eventually get the finished product, and an array of loot boxes to further dig into your wallet. Not only that, but you can easily also expect other gameplay "enhancements", including:
      • Drop chance and quality boosters (to make up for piss-poor drop rates)
      • Experience and progression-circumvention boosters (to make up for the god-awful grind)
      • A full array of new cosmetic options (now removed from the base game entirely, available only by purchase)
      • 2-3 in-game currencies (and at least one premium currency on top of that, used to buy better loot)
      • A vast swath of DLC which is NOT included in the season pass, announced anywhere from a few weeks to a few months after launch (most of all of which will be disappointing or the absolute bare minimum, at best)
      • this is only barely touching on the gameplay and story itself, which is being developed and produced by Gearbox, a company who is at this point legendary for their inability to... function. From their CEO being one of the industry's most prominent jackasses to their... interesting... writing department their (apparently) sexist, rather uber-like office bro-culture, the most astonishing thing about the company is that it still exists - their last and only 3 major releases since Borderlands 2 in 2012 were Borderlands: The Pre-Sequel, Aliens: Colonial Marines, and Battleborn. They're also known for such titles as Bulletstorm, the most recent Duke Nukem, and, hilariously, are front-and-center in the publishing clusterfuck that surrounded We Happy Few being awful.

      With their record, it's not just a surprise that they still exist, it's a surprise that the Borderlands franchise was ever produced successfully at all. Now, they're relying basically entirely on the next Borderlands launch in order to stay afloat - only one more nail in the coffin for the above points about monetization.

      To say the odds are stacked against this game is doing it a disservice. The idea that it might be DECENT, never mind as good as it's predecessors, is laughable.

      It saddens me to say it, too. I hold out hope that they'll pull a rabbit outta the hat on this and that the game will magically be one of the only examples of an uncompromising AAA game in the last 5 years. They somehow managed to produce the first few games in the franchise, and this one's been in development for a hellova lot longer.

      But I'm not holding my breath.

      10 votes
    21. New Zealand & Australia ISPs and telcos block access to sites hosting Christchurch shooting video

      New Zealand ISPs are blocking sites that do not remove Christchurch shooting video New Zealand Mobile Carriers Block 8chan, 4chan, and LiveLeak And, in Australia: Telco giants block websites...
      15 votes
    22. Reddit has banned r/watchpeopledie

      An undoubtedly horrific subreddit that always seemed to comply with reddit TOS and the admins has been banned, probably related to the NZ shooting video that was in the subreddit yesterday until...

      An undoubtedly horrific subreddit that always seemed to comply with reddit TOS and the admins has been banned, probably related to the NZ shooting video that was in the subreddit yesterday until it was taken down by admins. Looks like they're getting ahead of MSM discovering that this shit exists on the site?

      Will add any updates here.

      r/gore is gone as well.

      From @nacho:

      It's not ahead of controversy, it's in response to the Reuters article calling out /r/watchpeopledie.

      Members of a group called “watchpeopledie” on internet discussion board Reddit, for example, discussed how to share the footage even as the website took steps to limit its spread.

      Reddit - which has over 20 investors, including Conde Nast owner Advance Publications - said it was actively monitoring the situation in New Zealand.

      “Any content containing links to the video stream are being removed in accordance with our site-wide policy,” it said.

      68 votes
    23. Removing or editing "Exemplary" labels?

      Might it be useful for our Exemplary (and I imagine Malice) labels to be removable or editable? I recently added an Exemplary label with a description that was a bit more "fuck that other guy!"...

      Might it be useful for our Exemplary (and I imagine Malice) labels to be removable or editable? I recently added an Exemplary label with a description that was a bit more "fuck that other guy!" than I would've liked, and despite it not being publicly visible, I still felt the need to in some way correct my mistake to not drag the other user into my hostility, but there's no option to do so. If we can't remove the labels because users shouldn't be juggling the timer or something, I get that, but editing seems like a good (yet low-priority) thing to implement.

      I can't recall this being explicitly outlined anywhere when labels were being introduced, sorry if I've forgotten something. Knowing me, I probably argued against it somewhere :P

      16 votes
    24. Code Quality Tip: Cyclomatic complexity in depth.

      Preface Recently I briefly touched on the subject of cyclomatic complexity. This is an important concept for any programmer to understand and think about as they write their code. In order to...

      Preface

      Recently I briefly touched on the subject of cyclomatic complexity. This is an important concept for any programmer to understand and think about as they write their code. In order to provide a more solid understanding of the subject, however, I feel that I need to address the topic more thoroughly with a more practical example.


      What is cyclomatic complexity?

      The concept of "cyclomatic complexity" is simple: the more conditional branching and looping in your code, the more complex--and therefore the more difficult to maintain--that code is. We can visualize this complexity by drawing a diagram that illustrates the flow of logic in our program. For example, let's take the following toy example of a user login attempt:

      <?php
      
      $login_data = getLoginCredentialsFromInput();
      
      $login_succeeded = false;
      $error = '';
      if(usernameExists($login_data['username'])) {
          $user = getUser($login_data['username']);
          
          if(!isDeleted($user)) {
              if(!isBanned($user)) {
                  if(!loginRateLimitReached($user)) {
                      if(passwordMatches($user, $login_data['password'])) {
                          loginUser($user);
                          $login_succeeded = true;
                      } else {
                          $error = getBadPasswordError();
                          logBadLoginAttempt();
                      }
                  } else {
                      $error = getLoginRateLimitError($user);
                  }
              } else {
                  $error = getUserBannedError($user);
              }
          } else {
              $error = getUserDeletedError($user);
          }
      } else {
          $error = getBadUsernameError($login_data['username']);
      }
      
      if($login_succeeded) {
          sendSuccessResponse();
      } else {
          sendErrorResponse($error);
      }
      
      ?>
      

      A diagram for this logic might look something like this:

      +-----------------+
      |                 |
      |  Program Start  |
      |                 |
      +--------+--------+
               |
               |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |    Username     +--->+    Set Error    +--+
      |    Exists?      | No |                 |  |
      |                 |    +-----------------+  |
      +--------+--------+                         |
               |                                  |
           Yes |                                  |
               v                                  |
      +--------+--------+    +-----------------+  |
      |                 |    |                 |  |
      |  User Deleted?  +--->+    Set Error    +->+
      |                 | Yes|                 |  |
      +--------+--------+    +-----------------+  |
               |                                  |
            No |                                  |
               v                                  |
      +--------+--------+    +-----------------+  |
      |                 |    |                 |  |
      |  User Banned?   +--->+    Set Error    +->+
      |                 | Yes|                 |  |
      +--------+--------+    +-----------------+  |
               |                                  |
            No |                                  |
               v                                  |
      +--------+--------+    +-----------------+  |
      |                 |    |                 |  |
      |   Login Rate    +--->+    Set Error    +->+
      | Limit Reached?  | Yes|                 |  |
      |                 |    +-----------------+  |
      +--------+--------+                         |
               |                                  |
            No |                                  |
               v                                  |
      +--------+--------+    +-----------------+  |
      |                 |    |                 |  |
      |Password Matches?+--->+    Set Error    +->+
      |                 | No |                 |  |
      +--------+--------+    +-----------------+  |
               |                                  |
           Yes |                                  |
               v                                  |
      +--------+--------+    +----------+         |
      |                 |    |          |         |
      |   Login User    +--->+ Converge +<--------+
      |                 |    |          |
      +-----------------+    +---+------+
                                 |
                                 |
               +-----------------+
               |
               v
      +--------+--------+
      |                 |
      |   Succeeded?    +-------------+
      |                 | No          |
      +--------+--------+             |
               |                      |
           Yes |                      |
               v                      v
      +--------+--------+    +--------+--------+
      |                 |    |                 |
      |  Send Success   |    |   Send Error    |
      |    Message      |    |    Message      |
      |                 |    |                 |
      +-----------------+    +-----------------+
      

      It's important to note that between nodes in this directed graph, you can find certain enclosed regions being formed. Specifically, each conditional branch that converges back into the main line of execution generates an additional region. The number of these distinct enclosed regions is directly proportional to the level of cyclomatic complexity of the system--that is, more regions means more complicated code.


      Clocking out early.

      There's an important piece of information I noted when describing the above example:

      . . . each conditional branch that converges back into the main line of execution generates an additional region.

      The above example is made complex largely due to an attempt to create a single exit point at the end of the program logic, causing these conditional branches to converge and thus generate the additional enclosed regions within our diagram.

      But what if we stopped trying to converge back into the main line of execution? What if, instead, we decided to interrupt the program execution as soon as we encountered an error? Our code might look something like this:

      <?php
      
      $login_data = getLoginCredentialsFromInput();
      
      if(!usernameExists($login_data['username'])) {
          sendErrorResponse(getBadUsernameError($login_data['username']));
          return;
      }
      
      $user = getUser($login_data['username']);
      if(isDeleted($user)) {
          sendErrorResponse(getUserDeletedError($user));
          return;
      }
      
      if(isBanned($user)) {
          sendErrorResponse(getUserBannedError($user));
          return;
      }
      
      if(loginRateLimitReached($user)) {
          logBadLoginAttempt($user);
          sendErrorResponse(getLoginRateLimitError($user));
          return;
      }
      
      if(!passwordMatches($user, $login_data['password'])) {
          logBadLoginAttempt($user);
          sendErrorResponse(getBadPasswordError());
          return;
      }
      
      loginUser($user);
      sendSuccessResponse();
      
      ?>
      

      Before we've even constructed a diagram for this logic, we can already see just how much simpler this logic is. We don't need to traverse a tree of if statements to determine which error message has priority to be sent out, we don't need to attempt to follow indentation levels, and our behavior on success is right at the very end and at the lowest level of indentation, where it's easily and obviously located at a glance.

      Now, however, let's verify this reduction in complexity by examining the associated diagram:

      +-----------------+
      |                 |
      |  Program Start  |
      |                 |
      +--------+--------+
               |
               |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |    Username     +--->+   Send Error    |
      |    Exists?      | No |    Message      |
      |                 |    |                 |
      +--------+--------+    +-----------------+
               |
           Yes |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |  User Deleted?  +--->+   Send Error    |
      |                 | Yes|    Message      |
      +--------+--------+    |                 |
               |             +-----------------+
            No |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |  User Banned?   +--->+   Send Error    |
      |                 | Yes|    Message      |
      +--------+--------+    |                 |
               |             +-----------------+
            No |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |   Login Rate    +--->+   Send Error    |
      | Limit Reached?  | Yes|    Message      |
      |                 |    |                 |
      +--------+--------+    +-----------------+
               |
            No |
               v
      +--------+--------+    +-----------------+
      |                 |    |                 |
      |Password Matches?+--->+   Send Error    |
      |                 | No |    Message      |
      +--------+--------+    |                 |
               |             +-----------------+
           Yes |
               v
      +--------+--------+
      |                 |
      |   Login User    |
      |                 |
      +--------+--------+
               |
               |
               v
      +--------+--------+
      |                 |
      |  Send Success   |
      |    Message      |
      |                 |
      +-----------------+
      

      Something should immediately stand out here: there are no enclosed regions in this diagram! Furthermore, even our new diagram is much simpler to follow than the old one was.


      Reality is rarely simple.

      The above is a really forgiving example. It has no loops, and loops are going to create enclosed regions that can't be broken apart so easily; it has no conditional branches that are so tightly coupled with the main path of execution that they can't be broken up; and the scope of functionality and side effects are minimal. Sometimes you can't break those regions up. So what do we do when we inevitably encounter these cases?

      High cyclomatic complexity in your program as a whole is inevitable for sufficiently large projects, especially in a production environment, and your efforts to reduce it can only go so far. In fact, I don't recommend trying to remove all or even most instances of cyclomatic complexity at all--instead, you should just be keeping the concept in mind to determine whether or not a function, method, class, module, or other component of your system is accumulating technical debt and therefore in need of refactoring.

      At this point, astute readers might ask, "How does refactoring help if the cyclomatic complexity doesn't actually go away?", and this is a valid concern. The answer to that is simple, however: we're hiding complexity behind abstractions.

      To test this, let's forget about cyclomatic complexity for a moment and instead focus on simplifying the refactored version of our toy example using abstraction:

      <?php
      
      function handleLoginAttempt($login_data) {
          if(!usernameExists($login_data['username'])) {
              sendErrorResponse(getBadUsernameError($login_data['username']));
              return;
          }
      
          $user = getUser($login_data['username']);
          if(isDeleted($user)) {
              sendErrorResponse(getUserDeletedError($user));
              return;
          }
      
          if(isBanned($user)) {
              sendErrorResponse(getUserBannedError($user));
              return;
          }
      
          if(loginRateLimitReached($user)) {
              logBadLoginAttempt($user);
              sendErrorResponse(getLoginRateLimitError($user));
              return;
          }
      
          if(!passwordMatches($user, $login_data['password'])) {
              logBadLoginAttempt($user);
              sendErrorResponse(getBadPasswordError());
              return;
          }
      
          loginUser($user);
          sendSuccessResponse();
      }
      
      $login_data = getLoginCredentialsFromInput();
      
      handleLoginAttempt($login_data);
      
      ?>
      

      The code above is functionally identical to our refactored example from earlier, but has an additional abstraction via a function. Now we can diagram this higher-level abstraction as follows:

      +-----------------+
      |                 |
      |  Program Start  |
      |                 |
      +--------+--------+
               |
               |
               v
      +--------+--------+
      |                 |
      |  Attempt Login  |
      |                 |
      +-----------------+
      

      This is, of course, a pretty extreme example, but this is how we handle thinking about complex program logic. We abstract it down to the barest basics so that we can visualize, in its simplest form, what the program is supposed to do. We don't actually care about the implementation unless we're digging into that specific part of the system, because otherwise we would be so bogged down by the details that we wouldn't be able to reason about what our program is supposed to do.

      Likewise, we can use these abstractions to hide away the cyclomatic complexity underlying different components of our software. This keeps everything clean and clutter-free in our head. And the more we do to keep our smaller components simple and easy to think about, the easier the larger components are to deal with, no matter how much cyclomatic complexity all of those components share as a collective.


      Final Thoughts

      Cyclomatic complexity isn't a bad thing to have in your code. The concept itself is only intended to be used as one of many tools to assess when your code is accumulating too much technical debt. It's a warning sign that you may need to change something, nothing more. But it's an incredibly useful tool to have available to you and you should get comfortable using it.

      As a general rule of thumb, you can usually just take a glance at your code and assess whether or not there's too much cyclomatic complexity in a component by looking for either of the following:

      • Too many loops and/or conditional statements nested within each other, i.e. you have a lot of indentation.
      • Many loops in the same function/method.

      It's not a perfect rule of thumb, but it's useful for at least 90% of your development needs, and there will inevitably be cases where you will prefer to accept some greater cyclomatic complexity because there is some benefit that makes it a better trade-off. Making that judgment is up to you as a developer.

      As always, I'm more than willing to listen to feedback and answer any questions!

      25 votes
    25. Thoughts on the idea of "subscribing" to a topic?

      Basically, the ability to receive a notification whenever someone comments on a subscribed topic. Currently, there is a save option (Unless it's been removed? I'm looking now and can't seem to...

      Basically, the ability to receive a notification whenever someone comments on a subscribed topic. Currently, there is a save option (Unless it's been removed? I'm looking now and can't seem to find it) which makes for a decent solution for the time being, but personally I know how easy it is to forget all about what you have saved and have it fly completely under your radar. I, for one, think it would be a good idea if you could subscribe to a topic you're interested so you don't completely forget and miss some discussion.

      15 votes
    26. A case for why labels should be removed

      EDIT: I'm only talking about the Exemplary tag Greetings. I'm Alexis, and I signed up for this site back on May 30th, when it was just beginning. However, I have returned and I see something that...

      EDIT: I'm only talking about the Exemplary tag

      Greetings. I'm Alexis, and I signed up for this site back on May 30th, when it was just beginning. However, I have returned and I see something that doesn't seem like that big an issue, but I fear it will lead to the same sort of 'circlejerk' that Reddit has.

      The issue is with this comment. At first, it doesn't really seem that bad - it is a person (we'll call them Adam) replying to someone else (Barbara) who says the subject matter (Charlie) is using white nationalism as a means to cause chaos. Adam takes this to mean Barbara supports Neo-Nazis, as Barbara states the following:

      Hate to say it, but neo-Nazism is better than this, if by a small margin: at least its followers have an ideology.

      Adam asks what "lofty ideology do you think Neo-Nazis" have, including a long rebuttal of this miscommunication.

      The real problem with this is the labels. On the top of Adam's comment: "2x Exemplary". I have not seen any labels whatsoever anywhere else on this forum when I have been browsing it. On a miscommunicative post. Adam seems to claim Barbara is downplaying the issue, despite the miscommunication.

      To see why this is an issue, let's take a second post discussing a network of paedophiles on Youtube. As on 1:14 PM EST, Feb 21, 2019, not a single label is there. This is in spite of communication being just as civil and developed.

      My theory is that the Exemplary labels were not used as a "Well done" to Adam's post, but rather as a "We hate Neo-Nazis as well", or "super-vote". What I fear is that this will lead to an echo chamber where Devil's advocates, such as Barbara, are shunned for things from a simple miscommunication to having 'wrongthink' and defending ideas that people think should not be.

      Let me be clear: I am not conservative or a Nazi. If anything, I am a socialist - but it shouldn't matter. You should be allowed to discuss the pros and cons of relevant political views as long as it is in a civil manner.

      35 votes
    27. Are certain message boards like Tildes, Reddit etc. social engineering?

      The active development of Tildes and the feedback/discussions about features and mechanisms had me thinking. Is the conscious design and moderation of forums for public discourse a manner of...

      The active development of Tildes and the feedback/discussions about features and mechanisms had me thinking. Is the conscious design and moderation of forums for public discourse a manner of social engineering?

      I know the connotation of social engineering is usually negative, as in manipulating people for politics. But it's a double edged sword.

      Most recently I was reading this feedback on removing usernames from link topics and while reading the comments I was thinking of how meta this all is. It's meta-meta-cognition in that we (well, by far the actual developers) are designing the space within which we execute our discourse and thinking. To paraphrase the above example: user identification can bias one's own impulse reaction to content, either to a beneficial or detrimental end, so how do we want this?

      The moderation-influenced scenario is a bit more tricky because it can become too top-heavy, as in one prominent example many of us came from recently... But I think with a balance of direction from the overlords (jk, there is also public input as mentioned) and the chaos of natural public discourse, you could obtain an efficient environment for the exchange of ideas.

      I'm not sure what my stimulating question would be for you all, so just tell me what you think.

      33 votes
    28. An option to hide topics from the front page.

      As per subject - it'd be nice to hide topics from the front page. The use case is very simple - if I see a topic that I have no interest in, I'd rather for its spot to be taken by some other topic...

      As per subject - it'd be nice to hide topics from the front page.

      The use case is very simple - if I see a topic that I have no interest in, I'd rather for its spot to be taken by some other topic that currently sits "below the fold".

      Hiding a topic should remove it from the front page only, but leave it visible on the group page. It would also probably make sense to mark the topic there in some way and have an "unhide" option there.

      Alternatively, have a switch for the front page to toggle between "full view" and "view without hidden topics".

      12 votes
    29. List of motion-control games for Nintendo Switch

      Just as with the Wii, I think the motion controls are a big and fun feature of the Switch. I have already searched online, but could not find a list of games that have motion controls (and in what...

      Just as with the Wii, I think the motion controls are a big and fun feature of the Switch.

      I have already searched online, but could not find a list of games that have motion controls (and in what way). I did see some attempt to put it on Wikipedia, but it was removed due to being too specific to be on Wikipedia itself.

      If anyone found anything or is willing to help out, we could collaboratively write one up. What the best place for it would be, I do not know yet, but WikiData pops to mind.

      I see votes, but I see no comments ...no idea how to interpret that.

      7 votes
    30. VLC on iOS - Late to the party on this but I have to GUSH!

      Like many on here I've been moving away from cloud services. I used to think that the open-source-heads that grumbled about loss of control were just out of touch. Just "get-off-my-lawn-types" but...

      Like many on here I've been moving away from cloud services. I used to think that the open-source-heads that grumbled about loss of control were just out of touch. Just "get-off-my-lawn-types" but now I'm one of them. One of the things that pushed me over the edge was Amazon removing a bunch of tracks I had in my workout mix. Just so not cool.

      So I'm done with Amazon but hesitated to stop paying for Prime because I couldn't figure out a good way of getting music onto my old iPhone 5S that didn't involve the absolute steaming pile of garbage that is iTunes sync. Why oh why does ti have to be so hard? And the answer is DRM. It's always DRM. Fuck DRM.

      I have mp3s from hundreds of CDs I bought and burned to my computer back in the 90s and early 00s. These have largely sat unused. But not now! Now they are free!

      And that is all thanks to the magical open source media player VLC. I've long used it on my laptop and desktops but didn't even know there was a mobile option for iOS. I stumbled across it while struggling to find the default iPhone Music app in Apple's app store. I never found it - I found one that looked like it could be it but it talked about an online store to buy music from so I wasn't sure. Anyways, up popped VLC.

      The VLC app is awesome! I can get audio/video to it so, so easily in a variety of ways. I can drag-and-drop across my network, use a number of different kind of online services like dropbox, etc (which is not what I did, but that's cool). In theory, I could sync through iTunes as well, but F that noise!

      So now I have 5-10 of my favorite albums, including good music to work out to. And best of all, I have "you are my sunshine" which I was able to download off of Youtube. I play that every night for my daughter and ever since they nerfed the YouTube app to prevent it from playing music while other apps were open, well it's been a pain to just sit an listen to it while she falls asleep each night without doing anything else. But not now! VLC isn't trying to market the shit out of me and lock me into their app. I can put on a song and finally use other apps.

      So if you are one of those "get-off-my-lawn" types like me, I invite you to check it out. I don't know if there is an Android version but I sure hope so.

      This is all stream of consciousness so forgive my typos and likely poor grammar. I'll clean it up after a I get tired of rocking out to these awesome tunes (maybe...)

      24 votes