• Activity
  • Votes
  • Comments
  • New
  • All activity
  • Showing only topics with the tag "user created". Back to normal view
    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. Genetic Algorithms

      Introduction to Genetic Algorithms Genetic algorithms can be used to solve problems that are difficult, or impossible to solve with traditional algorithms. Much like neural networks, they provide...

      Introduction to Genetic Algorithms

      Genetic algorithms can be used to solve problems that are difficult, or impossible to solve with traditional algorithms. Much like neural networks, they provide good-enough solution in short amount of time, but rarely find the best one. While they're not as popular as neural networks nor as widely used, they still have their place, as we can use them to solve complicated problems very fast, without expensive training rigs and with no knowledge of math.

      Genetic algorithms can be used for variety of tasks, for example for determining the best radio antenna shape, aerodynamic shapes of cars and planes, wind mill shapes, or various queing problems. We'll use it to print "Hello, World!".

      How does it work?

      Genetic algorithm works in three steps.

      1. Generate random solutions
      2. Test how good they are
      3. Pick the best ones, breed and mutate them, go to step 2

      It works just like evolution in nature. First, we generate randomised solutions to our problem (in this case: random strings of letters).

      Then, we test each solution and give it points, where better solutions gain more points. In our problem, we would give one point for each correct letter in the string.

      Afterwards, we pick the best solutions and breed it together (just combine the strings). It's not bad idea to mutate (or randomize) the string a bit.

      We collect the offsprings, and repeat the process until we find good enough solution.

      Generate random solutions

      First of all, we need to decide in which form we will encode our solutions. In this case, it will be simply string. If we wanted to build race cars, we would encode each solution (each car) as array of numbers, where first number would be size of the first wheel, the second number would be size of the second wheel, etc. If we wanted to build animals that try to find food, fight and survive, we would choose a decision tree (something like this).

      So let's start and make few solutions, or entities. One hundred should be enough.

      from random import randint
      
      goal = "Hello, World!"
      allowed_characters = list("qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM ,!")
      
      def get_random_entity(n, string_length):
          entities = []
          for _ in range(0, n):
              entity = ""
              for _ in range(0, string_length):
                  entity += allowed_characters[randint(0, len(allowed_characters)-1)]
              entities.append(entity)
          return entities
      
      print(get_random_entity(100, 13))
      

      Test how good they are

      This is called a "fitness function". Fitness function determines how good a solution is, be it a car (travel distance), animal (food gathered), or a string (number of correct letters).

      The most simple function we can use right now will simply count correct letters. If we wanted, we could make something like Levenshtein distance instead.

      def get_fitness(entity):
          points = 0
          for i in range(0, len(entity)):
              if goal[i] == entity[i]:
                  points += 1
          return points
      

      Crossover and mutation

      Now it's time to select the best ones and throw away the less fortunate entities. Let's order entities by their fitness.

      Crossover is a process, when we take two entities (strings) and breed them to create new one. For example, we could just give the offspring one part from one parent and another part from second parent.

      There are many ways how to do this, and I encourage you to try multiple approaches when you will be doing something like this.

      P:  AAAABBB|BCCCC
      P:  DDDDEEE|FGGGG
      
      F1: AAAABBB|FGGGG
      

      Or we can just choose at random which letter will go from which parent, which works the best here. After we have the offsprint (F1), we should mutate it. What if we were unfortunate, and H (which we need for our Hello, World!) was not in any of the 100 entities? So we take the string and for each character of the string, there is a small chance to mutate it - change it at random.

      F1:  ADDDEBEFGCGG
      F1`: ADHDEBEFGCGG
      

      And it's done. Now kill certain part of old population. I don't know which percentage is best, but I usually kill about 90% of old population. The 90% that we killed will be replaced by new offsprings.

      There is just one more thing: which entities do we select for crossover? It isn't bad idea - and it generally works just fine - to just give better entities higher chance to breed.

      def get_offspring(first_parent, second_parent, mutation_chance):
          new_entity = ""
          for i in range(0, len(first_parent)):
              if randint(0, 100) < mutation_chance:
                  new_entity += allowed_characters[randint(0, len(allowed_characters)-1)]
              else:
                  if randint(0, 1) == 0:
                      new_entity += first_parent[i]
                  else:
                      new_entity += second_parent[i]
          return new_entity
      

      When we add everything together, we get this output:

      Generation 1, best score: 2 ::: QxZPjoptHfNgX
      Generation 2, best score: 3 ::: XeNlTOQuAZjuZ
      Generation 3, best score: 4 ::: weolTSQuoZjuK
      Generation 4, best score: 5 ::: weTgnC uobNdJ
      Generation 5, best score: 6 ::: weTvny uobldb
      Generation 6, best score: 6 ::: HellSy mYbZdC
      Generation 7, best score: 7 ::: selOoXBWoAKn!
      Generation 8, best score: 8 ::: HeTloSoWYZlh!
      Generation 9, best score: 8 ::: sellpX WobKd!
      Generation 10, best score: 9 ::: welloq WobSdb
      Generation 11, best score: 9 ::: selloc WoZjd!
      Generation 12, best score: 10 ::: wellxX WoVld!
      Generation 13, best score: 10 ::: welltX World!
      Generation 14, best score: 10 ::: welltX World!
      Generation 15, best score: 10 ::: welltX World!
      Generation 16, best score: 11 ::: zellov Wobld!
      Generation 17, best score: 11 ::: Hellty World!
      Generation 18, best score: 11 ::: welloX World!
      Generation 19, best score: 11 ::: welloX World!
      Generation 20, best score: 11 ::: welloX World!
      Generation 21, best score: 12 ::: welloX World!
      Generation 22, best score: 12 ::: Helloy World!
      Generation 23, best score: 12 ::: Helloy World!
      Generation 24, best score: 12 ::: Helloy World!
      Generation 25, best score: 12 ::: Helloy World!
      Generation 26, best score: 12 ::: Helloy World!
      Generation 27, best score: 12 ::: Helloy World!
      Generation 28, best score: 12 ::: Helloy World!
      Generation 29, best score: 12 ::: Helloy World!
      Generation 30, best score: 12 ::: Helloy World!
      Generation 31, best score: 12 ::: Helloy World!
      Generation 32, best score: 12 ::: Helloy World!
      Generation 33, best score: 12 ::: Helloy World!
      Generation 34, best score: 13 ::: Helloy World!
      Generation 35, best score: 13 ::: Hello, World!
      

      As we can see, we find pretty good solution very fast, but it takes very long to find perfect solution. The complete code is here.

      Maintaining diversity

      When we solve difficult problems, it starts to be increasingly important to maintain diversity. When all your entities are basically the same (which happened in this example), it's difficult to find other solutions than those that are almost the same as the currently best one. There might be a much better solution, but we didn't find it, because all solutions that are different to currently best one are discarded. Solving this is the real challenge of genetic algorithms. One of the ideas is to boost diverse solutions in fitness function. So for every solution, we compute distance to the current best solutions and add bonus points for distance from it.

      20 votes
    3. I made a program that creates the colour palette of a film

      I saw these things originally on Reddit that extracted the average colour of frames from films and put them together to make a colour palette for said film, the original creator has a site called...

      I saw these things originally on Reddit that extracted the average colour of frames from films and put them together to make a colour palette for said film, the original creator has a site called The Colors of Motion. I thought it would be cool to try and create a simple PowerShell script that does the same thing.

      Here are a few examples:
      Finding Nemo: https://i.imgur.com/8YwOlwK.png
      The Bee Movie: https://i.imgur.com/umbd3co.png
      Harry Potter and the Philosopher's Stone: https://i.imgur.com/6rsbv0M.png

      I've hosted my code on GitHub so if anyone wants to use my PowerShell script or suggest some ways to improve it feel free. You can use pretty much any video file as input as it uses ffmpeg to extract the frames.

      GitHub link: https://github.com/ArkadiusBear/FilmStrip

      17 votes
    4. I made a post awhile back about asking for inspiration for a new project. I built a thing.

      hey all! i made a post awhile back talking about how i was in a tech rut, and tired of creating the same things over and over again, working with the same libraries and the same frameworks. i was...

      hey all!

      i made a post awhile back talking about how i was in a tech rut, and tired of creating the same things over and over again, working with the same libraries and the same frameworks.

      i was bored of it!

      so last week i said hell with it and i spent more money than i should've on udemy courses, learned a lot about javascript and the mern stack (mongodb, express.js, react, node.js)

      then, after a few nights of staying up way later than i should have (i have presently been awake for 27 hours) i built this thing:

      https://dry-castle-80238.herokuapp.com/dashboard

      dev-connector.

      a small little social media site for the technically-minded.

      nothing groundbreaking or super fancy - just a basic social media site with posts, comments, user profiles and all that. but it's the first thing in awhile that i've actually finished and put into production on some capacity (even if it's just heroku)

      jump in, leave a few comments, and let me know what you think. :)

      passwords are hashed with bcryptjs, but i've been recommending everyone just use fake login info on sign up for safety's sake.

      12 votes
    5. Struggling to find a new TV show to watch? Check out my Google doc detailing shows I've watched, shows I'm currently watching, and shows I want to watch. All with IMDB links and ratings.

      Link to Google doc: https://docs.google.com/spreadsheets/d/1Hc-Ti6Pff_qUZLAfzzL7WjhFNh2m_XPvMkdYBL6mLzI/edit?usp=sharing I created this document a while back and update it every couple months....

      Link to Google doc: https://docs.google.com/spreadsheets/d/1Hc-Ti6Pff_qUZLAfzzL7WjhFNh2m_XPvMkdYBL6mLzI/edit?usp=sharing

      I created this document a while back and update it every couple months. There's an Introduction tab with guidance on how to browse the spreadsheets, which I've copied below for reference:

      (1) This document outlines various TV shows and is broken up into 3 tabs: Watched, Watching, and Want to Watch.

      Watched: Shows I've completed through series finale or given up on. Some of these were canceled early.

      Watching: Shows I'm actively watching day-to-day or shows in between seasons that will air new episodes in the future.

      Want to Watch: Shows I haven't started and want to watch. Many of them are recommendations I jotted down to avoid forgetting, so this list will sometimes be unalphabetized.

      (2) Certain columns of information were exported directly from IMDB, and the page for each show is linked in the rating from the IMDB column.

      (3) On the Watched and Watching tabs, there are columns for Recommend? and Notes to provide background that will help decide what to watch. Don't let any of my negative comments stop you from watching a show you're interested in.

      (4) The Recommended? column is divided into the following categories: Must Watch, Yes, Maybe, No. These are all based on personal opinion with extra discussion/information in the Notes column.

      (5) I've shared this with most people using View Only permissions, so download the Excel file (or copy to your Drive account) to filter columns by genre, rating, and personal recommendation.


      Disclaimer: not everyone will have the same tastes as me - that's okay. I welcome any disagreement about how I've rated shows and hope to get some discussion going.

      • What shows have I missed that I need to watch?

      • What shows did I strongly recommend that you didn't like?

      • What shows did I give up on too early?

      I expect to take some heat for quitting Brooklyn 99 around season 3.

      • What shows haven't come out that I should keep an eye out for?

      Like Jack Ryan which debuts this month.

      • How can I improve the document?

      I considered including a column with the show's network or where it can be legally streamed, but this is pretty tedious given the nature of broadcast rights.

      35 votes
    6. I built a keychain LED flashlight to practice my soldering

      Someone recently asked me to replace the battery in their old iPod, and I found myself wondering what I should do with the old battery. It still works, but has less capacity than when it was new....

      Someone recently asked me to replace the battery in their old iPod, and I found myself wondering what I should do with the old battery. It still works, but has less capacity than when it was new. So I looked around my workshop and found some of these surface mount LEDs and decided to test the limits of my soldering skills and make a flashlight out of them.

      These LEDs are very hard to solder, since they're surface-mount and the pads are on the bottom of the LED. They were never meant to be soldered by hand, but rather placed by machine onto a specific amount of solder paste, which is then baked in a fancy oven at very specific temperatures for very specific times. To solder these by hand, you need to create a liquid puddle of solder and sorta float the LED on top, while being careful to not short the pads which are very close together as well as not overheating the LED. The temperature the plastic melts at seems to be only a few degrees higher than the solder melts at.

      I wired up 5 of the LEDs in parallel, each with its own 6.8ohm resistor wired in series with the LED. This should limit the current to 150mA per LED. I hot glued this in place, as well as a lithium battery charging circuit I got off ebay for a dollar. Here's one such listing.

      I slapped on a pushbutton, and Bob's your uncle! It worked first try!

      Here's a blurry picture of the finished product. I'm pretty proud of how it came out, considering how tiny and fiddly the soldering was. And, I think I'll actually get some use out of it too. The battery ought to last at least an hour of runtime, and the thing is seriously bright.

      Anyone here into electronics as a hobby?

      Edit: Better-ish pic: https://i.imgur.com/Kxqy1jg.jpg

      No potatoes were harmed in the making of this photo.

      9 votes
    7. I'm an indie gamedev. Here is 5 tracks from my game Rashtal.

      5 tracks from my game Rashtal. Feedback would be appreciated. Playlist Or each song separately: Life in the Treetops; Song of the Forest; Through the Sunken Glades; The Canopy; The Forest Floor;...

      5 tracks from my game Rashtal. Feedback would be appreciated.

      Playlist

      Or each song separately:

      The game is still in development. Just sharing some music to get feedback.

      13 votes
    8. For any newer Linux users looking to install Arch, I wrote a quick guide for an encrypted install on UEFI

      Guide can be found here Right now, the guide assumes you aren't dual booting. This is because I've never really dual booted off a single HDD, so while I probably could include it in the guide, I...

      Guide can be found here

      Right now, the guide assumes you aren't dual booting. This is because I've never really dual booted off a single HDD, so while I probably could include it in the guide, I don't feel comfortable without first testing the process.

      This guide also sets you up with BTRFS, but you can still use ext4, just requires changing two lines.

      11 votes
    9. Poetry Slam - A word/party game from Mayday Games. I'm the designer and we went live on Kickstarter this morning!

      Hey all, I'm a board game designer named Adam Wyse and I just wanted to share my latest project that went live on Kickstarter this morning! A little bit about me; I'm a former software engineer...

      Hey all, I'm a board game designer named Adam Wyse and I just wanted to share my latest project that went live on Kickstarter this morning!

      A little bit about me; I'm a former software engineer who now works in the board game industry full time. I have a few published games (Head of Mousehold, Masque of the Red Death), and many more that have been signed and will be coming out over the next year or two. I work for Roxley Games doing logistics and development. If you're a fan of modern tabletop games you've probably heard of Santorini or Brass.

      Anyways, Mayday Games is publishing Poetry Slam; a word/party game for 3 to 8 players (10 if we reach the stretch goal). It's all about writing a word based on a prompt, then coming up with a short poem that allows other players to guess your word. Each player loses a letter each round that they can no longer use in later rounds. Coming up with your word faster will earn you more points, but you will lose more valuable letters! It's a strategic and hilarious word game that you can play with a big group - it makes for a pretty fun and unique experience.

      https://www.kickstarter.com/projects/maydaygames/poetry-slam-a-beatnik-3-8-player-party-game

      I did up a full how to play video here a couple weeks ago:
      https://www.youtube.com/watch?v=c_Y-0FBCjyM

      One of the cool things that Mayday is doing is a referral system. If you back the game you get a referral link. If you get someone else to back the game using your link, you get a free playmat. Whoever refers the most people will get a cool prize pack!

      If you have any questions about Poetry Slam, board game design in general, the tabletop industry, or Roxley Games, I'm happy to answer! I hope you'll give the project a look!

      Edit: The project was cancelled because it kind of stalled in the middle, but the game is still going to be produced! It will be available at Origins board game convention in June, and then in retail shortly afterwards. If you are interested in checking out a gameplay video, we recorded on at my local game store last night: https://www.facebook.com/sentrybox/videos/10156328694703428/

      13 votes