Sunday, July 5, 2015

Reddit Revolt 2.0: Lessons learned about open discussion platforms


Digg's collapse


Years ago I was highly invested time and mindshare wise in a little website you might remember called digg. I was one of the very early users and spent a fair amount of time curating content on the site through 2005 into 2006. As digg became more popular I became more dissatisfied with the place. As the number of users increased I found the level of discourse decreasing and the insular nature increasing. Sometime after 2008 I had finally had enough and I had my digg account deleted.

I saw promise in digg and became intrigued with the idea of making digg or something like it work. How to have a successful large diverse platform for open discussion that doesn't devolve into stupidity and group think. I don't even remember how many blog posts I started between early 2006, when I started to see problems with digg, and it's eventual collapse in 2012. I never never finished let alone posted any of them. In the end what killed digg was not the things that annoyed me about it. People seemed to love it. Its users numbers increased dramatically long after I left. Digg version 4, a rather blunt attempt to monetize digg, caused a max exodus and after a couple of years digg was sold for almost nothing.

The problem wasn't just that digg v.4 was buggy but that it altered the way content got promoted on digg. It took power away from the users and pushed it toward high traffic sites that could benefit from being on digg. Digg was founded on and grew through the users controlling content. As Alexis Ohanian founder of digg competitor reddit said "this new version of digg reeks of VC meddling. It's cobbling together features from more popular sites and departing from the core of digg, which was to "give the power back to the people".

Reddit's Revolt


And that moves right onto reddit. Reddit similarly to what digg did, relies on its users to provide content for the site and upvote things to show they are important. Users also have the option to downvote things they don't like. Reddit puts even more demand on its users to keep the site successful. Anybody can make a discrete section of reddit called a subreddit. They then can add user moderates to help control that sub. This puts almost all the onus and all the power on the users.

Reddit faces the same problem digg did. How do they become profitable. All accounts are that reddit has never been In the black. I have thought that the subreddit concept has given reddit a slightly better chance of making money. The default subs which are the ones that show up if you are not logged in are controlled by reddit. They could manipulate that to push what content they want toward the masses. There is a mechanism by which non default stuff can make the front page but that could be manipulated to exclude undesirable results.

 As I type this reddit is experiencing yet another revolt. Revolts are not a new thing for reddit. This latest revolt is the end result of months of rather ham handed and contradictory actions by reddit co. Reddit announced that they would be dealing with harassment. They also announced they would be increasing transparency.  They have then gone about enforcing the policy randomly and in an obscure manner with no transparency whatsoever. On top of that, there has been a long simmering distrust that reddit no longer puts the users first.  This all came to a head when two admins were fired. Admins are reddit employees that sort of act like community managers for different aspects of the site. By all accounts these two admins really helped the communities they were involved with. This was the straw that broke the camel's back. For awhile now, a lot of the mods, who are volunteers, have felt a growing anger a the lack of help and interaction from official reddit employees. The users and mods are doing all the work. The mods fed up decided to flex their muscle with this little revolt.

Will reddit ever be profitable.  Will it collapse and die like digg?  Frankly I don't care. I see reddit as a useless place. It's either banal content or very unintelligent group think.  I challenge anybody to read comments in its politics section and not have a brain hemorrhage.

A few thoughts on making a successful online discussion platform


The above was a lot of words to get to what I really wanted to talk about.  Also a bit of clickbaiting to get on the hot topic of the moment. Heck there is an article in the New York Times about the reddit revolt. I have thought a lot about what would make an online community work successfully. I want an online community that fosters diverse intelligent discussion. I don't want the community to devolve into stupid content. A billion pictures of kittens, "this", and stupid pun threads dominate a good portion of reddit's popular areas. It needs to be a place were competing ideologies can be discussed without mocking. Or as in reddit's case just resorting to the down vote to silence things you don't agree with. There also needs to be some way to keep trolling to a minimum.

I have been a  part of s few very good online communities and they all had two main things in common.

Don't be about money


And with that statement most silicon valley people stopped reading this post. I know none of them are reading this anyway. The best communities I have been a part of were mostly run by volunteers, with server etc, paid for by donations or with a small amount of add revenue. Nobody was trying to get rich. Removing the profit motive removes any external pressures and can make things all about the community.

Keep it small and uniform?


The successful groups I have been a part of have all been fairly small and uniform. At the maximum, one of them might have been a thousand people. We also tended to discuss only one topic with general agreement. For example, the sports board might have argued over a 3-4 or a 4-3 defense but we were mostly Chicago Bears fans.

Obviously being uniform goes against my desire for a diverse discussion. But there might be something to keep the number of participants small. What I have noticed is once a communities discussions start going stupid the rate at which it devolves accelerates. Intelligent people tend to get frustrated and move on when the place is dominated by idiots.

I have one final important idea for fostering a good community. Though this may seem to go against my desire for openness.

Some cost and barriers to participation:


One of the big problems with reddit is the lack of cost to participate or interact.  You don't even need an email address to make an account. You can upvote and downvote to your hearts content and make all the silly comment you want. The comment karma system should work as a brake on bad content but it fails.  I had two main accounts during my time on reddit. One of them had over five thousand positive comment karma while the other had over three thousand negative karma. One of these was my troll  account and the other was my account were I tried to have serious discussions. Guess which was which. Yep the troll account had plus five thousand comment karma. The upvote/downvote mechanic on reddit is almost universally used to show disagreement with an opinion not as  a reflection of the quality of the content.

 A lot of online forums use certain barriers to try and improve the level of discourse. Some require you to have a certain number of comments on the site before you can submit content. Other employ a reddit like karma system but make you earn an amount of positive karma before you open up more access. I've seen this in heavily moderated site. The mods have to approve early submissions but once you have been approved enough you get automatic access.  Obviously this can be easily manipulated to only allow certain viewpoints to be expressed.  Some places require a minimum post length. This is to encourage well thought out contributions and to reduce quick troll comments.  Of course you can just post "F you!" and copy it a bunch of times.

I combine several of these efforts kernel of an idea. First off there would be no enclaves on my discussion forum.  There would be no conservative or liberal subsection. There would only be a sections to discuss with people who held different views. Each person would get a small number of mod points a day. There would be a limit to how far up or down something could be voted. Responses will need to be over a certain length and there would be a delay before someone could respond. I would also restrict the number of times a day a person could post.



Friday, June 12, 2015

Fixing a sticky middle button on a Logitech G500 mouse

For years I've used a Logitech G500 mouse.  I had a G5 mouse before which I thought was slightly better but I have really found the G500 to be a good mouse. Recently I began having a problem were the middle button would act like it was being pushed when it wasn't. This made things difficult.  Tabs in my browser would close when I tried to switch to them etc.  I looked online and this problem had been experienced by other owners. At this point the my G500 is something like four years old so it wouldn't be unreasonable to replace it. But I don't want to spend any money so I thought I would try and fix it. I found a video of a guy who had to put plastic in his mouse to keep the buttons from pushing. His theory was that static electricity was causing the other buttons to fire as if pressed.

So I took my mouse apart to see if there was anything I could do.  Watch the video below to see my somewhat hilarious attempt. I present it mostly for comedic value.  I apologize for the blurry picture and my mumbling.


Once I had the mouse apart I found a bunch of cat fur in and around the middle button/scroll wheel. I cleaned it out and blew out the mouse with compressed air. So for the verdict. Did it work?  It seems to have. That was three weeks ago and I am still using it with little problem. I guess I can blame everything on the cat.

Tuesday, May 26, 2015

Microsoft Continuum: dreaming of the future of computing

Almost ten years ago I sat with a friend and I explained to her what I thought would be the future of computing. This is what I described. You would have a device you would carry with you at all times your "phone". I actual prefer the old term MID(mobile internet device) but that ship has sailed. Far more than just making calls this device would be always connected to the internet. It would also be powerful enough both processor wise and memory wise to do almost everything a normal person does on a laptop. When you arrive home it automatically connects to your home network of devices. You sit on the coach and pull out a wireless keyboard. Hit a button and your phone projects a desktop screen onto your tv. Or perhaps there is a smaller photo frame type screen next to your couch and it displays there. Your phone would adapt its interface to whatever input and output devices you connect to it.


This was not some unique insight on my part. Many people have pursued this same concept. A few years ago, Motorola had a cell phone that you could buy a laptop like dock to use the phone as a laptop. It barely worked and was horrible but it showed people were looking at the sort of convergence I mentioned above. Apple has taken some steps in that direction with continuity. Just recently at their Build conference Microsoft announced something that seems really intriguing. With Continuum, Microsoft is moving computing in a direction that could make my dream a reality in only a few short years.  I'll let Microsoft's Joe Belfiore explain it for you.


The I don't watch videos version:  an app on your phone will automatically adjust to a bigger screen or a connected mouse. keyboard etc.

I was so excited about Microsoft's adaptive UX development kit and now I see its full potential.  You will be able to write an  app for the phone that can adjust its interface to any screen size or input devices.

The future is now. I just need my faster than light travel.



Thursday, May 14, 2015

Talking Microsoft Edge and Vivaldi: is there space in the market for new browsers

I have been running the Windows 10 technical Preview for a few months on my slow old netbook.  They have been including early looks at their new browser originally called Spartan now officially known as Edge. I've also downloaded and spent some time with Vivaldi a new browser from some of the original people who worked on Opera.


Project Spartan toolbar


Is there room in the browser space for new players?

Throughout the history of the web there has been great fluidity in the browser world. Netscape ruled the early world of the web. Then Internet explorer conquered all. At one point in the early 2000s IE had 95% market share.  You could have looked at that and just assumed it was over and the browser for all time had been found. But as we know, that is not what happened. Along came Firefox and then IE's market share fell and fell.  Firefox stood tall until Chrome came and started chipping away at Firefox.  Current statistics show a somewhat diverse landscape. Chrome is dominant at around 50% market share with the rest largely split between IE and Firefox. Though the smaller plays such as Safari still have their niches. What we learn is that people don't stay with the default. Many normal people will actively choose and download a new browser. Even my Mom downloaded Firefox.

Why is the browser space so volatile?

Most software areas tend to stagnate around one or a few dominant players with only an occasional tectonic shift. The browser space seems particularly unique and fluid. The early browser war  between Netscape and IE revolved around two main battlegrounds. First off, IE was provided as default on windows computers. I don't think this is the major reason that IE became dominant. The two browsers fought over who could bring the best unique powers to the browser. They didn't really care a whole lot about the standards.  Netscape came out first with javascript and IE introduced Active X.  IE won because it provided an easier platform for doing interesting things. Active X was a security nightmare but it gave a lot of power to developers.  As a web developer in the early 2000s It was easier to do interesting and dynamic things on IE. Thus it's dominance. Then things started to shift to Firefox.  Firefox offered tabbed browsing and then add-ons that allowed a lot of customization.  It also worked a lot faster and was more secure than IE. Then Chrome came along and and it was even faster than Firefox and offered great tools for web developers.

What will it take to succeed in the browser space?

The next successful browser will not win because of unique features.  With add-ons and extensions almost any feature can be added to any browser. Vivaldi is trying to push forward with excellent tab management for using a huge number of tabs, but this can be added to other browsers.  Edge touts its annotation features and minimalist design, but, once again, these can be added to other browsers. I believe three things will describe the next dominant browser. It will defined by speed. It will load pages quickly, do javascript quickly, and show videos quickly. Efficiency will be paramount. Chrome has earned a reputation as a memory hog.  The next browser winner will need to use as little memory and CPU as possible. This should be solvable, but both Firefox and Chrome eat memory. It will need to be easily extensible and theme-able. Whatever browser provides these will become dominant. Maybe it will be a future version of an existing browser or maybe it will come from somebody new.

Thursday, May 7, 2015

No, Silly Pundits, Google+ is not dead



Since the service's inception, declaring the imminent demise of Google+ has been a regular main stay of the lazy tech pundits. Steve Denning of Forbes went a step further recently and declared Google+ not dying but already dead. I call this sort of tech punditry lazy because it is a very easy way to get a lot of views and comments.  Google+ has a number of devoted followers that will rush off and defend it when it's threatened. Denning doubled down with a followup article about how he was really right and Google+ is dead. 

I'm not going to go through these articles point by point and rip them apart, others have done a good job doing that. The TL:DR version is that his claim is based on a secret report we can't see that isn't even about Google+ users and the fact that some other tech outlets have written click bait stories.  

I've noticed a common denominator for people who declare Google+ either dead or a graveyard. Whether the person is an actual tech journalist or just a standard person, they all have spent very little time on Google+. "I went on Google+ once and there was nothing going on." "Well who did you circle?  What communities did you join?"  "What now with the circle communities huh?" 


That guy who wrote those two google+ is dead articles, joined, posted twice and that was it. He then declared it dead. You want to know what social media site is a graveyard to me? Facebook. My Facebook stream, dash, whatever, gets about on average twenty posts a day. Most are fairly useless and stupid. No I will not take a quiz to figure out which Frozen character I am. Because of the people I've circled and the communities I have joined, I see about twenty posts an hour on google+.  A good four or five of the posts are even interesting.  On top of that google+ lets me tweak how much of the content from my communities and circles show up in my stream. You post three quizzes about what sort of plywood I am and I'll stick you in a circle I call purgatory where I will never hear from you again. 

From a corporate brand perspective Google+ has not been much of a success. In the early day, some brands made noise about going into Google+. They then posted three times and gave up.  A few brands have put some time into it and have seen some success on Google+.  Some individuals have had success at developing "personal brands". There are Google+ celebrities. 

There is an ever present threat looming over those of us you really like Google+.  Google has achieved an infamous reputation for shutting down things it no longer deems important to its business.  They don't care how many people love it and are still using it: see google reader. A good argument can be made for Google shutting Google+ down. Google+ failed to achieve their original goal. It seems clear they hoped to field a direct challenger to Facebook with the hope that some large number of the already two billion people who regularly use Google products becoming engaged with Google+. This can be seen in the many attempts to force it on other Google users.  I don't think they will shut Google+ down anytime soon. They claim continued growth. Yes maybe some secret report that nobody can see without paying money says they are losing 98% of active people year over year.  Which if you think about it makes no sense. There would only be one person talking to a squirrel left if that were the case. Even if Google+ is only at three to six million heavily active that is a lot of posts to suck in. Remember Google is all about taking in as much information from the internet as it can.

If you want a much better defense of Google+ check out Mike Elgan. He's a tech pundit but he's ok in my book because he agrees with me. That sentence is self deprecating sarcasm for those who didn't get it. 


Sunday, March 29, 2015

Some early info on writing Windows 10 Universal Apps

At Mobile World Congress in Barcelona, Microsoft gave some peeks of what it will be like to develop universal apps in Windows 10.

Watch the video embedded below or it can be seen at msdn.com.  The first fifteen minutes or so is just fluff about how much money you can make writing Windows 10 apps.

My Thoughts


Microsoft seems to be genuinely unifying the mobile and desktop Operating Systems.  The irony is not lost on me that Microsoft is doing the thing everyone said Apple would do. For years peoople have claimed Apple would turn OSX into IOS but they have done nothing in that direction. With Microsoft's new unified OS strategy, you code to one API that will produce one binary that will be able to run on all platforms: desktop, mobile, and xbox. There will be some specific to each platform API elements you can call but you don't have to.

The adaptive UX development kit allows you to create a user interface that will be responsive (As a web developer I hate that term) to different devices.  You can have controls, app elements, menus etc change the way the are represented based on screen or windows size.  You can also change interfaces based the the platforms capabilities. You can have the interface adjust to whether there the device has a touch screen or perhaps keyboard and mouse.

As a web developer I found the hosted web apps interesting.  Short version, you submit your web app, basically your website, to the App store. You can then send them some meta data to request access to certain OS APIs.  For example, you can have your web app open outlook and create a calendar event. It reminds me a lot of active x from years gone by.  I hope they don't have the plethora of security problems they had with active x.

I gotta say Microsoft is doing a lot of forward thinking and exciting things these days.





Thursday, March 26, 2015

Using vanilla javascript and php to change the select options on a form

For a project at work I needed a simple form component.  I wanted one select that showed organization.  When an organization was selected I needed it to populate the next select with the people in that organization. I decided I wanted to do this with old school vanilla javascript. So there will be no jquery or angular, etc. To take it a step further. The select options needed to be filled out from a mysql database.

We will need a form with two select fields.  The first one will have the name of of the organization and the value set to an identifying number. The second select will be empty.  We set an onchange event of the first select to call our javascript function, switchSecondSelect.

<form name="form" id="form">
<select name="first_select" id="firstselect" onchange="switchSecondSelect();">
<option selected="selected" value=""> </option>
<option value="1"> Value 1</option>
<option value="2"> Value 2</option>
<option value="3"> Value 3 </option>
</select>
<br />
<br />
<select name="second_select" id="second_select">
<option selected="selected" value=""></option>

</select>

</form>

In switchSecondSelect we will do several things. First we have to zero out the value of the second select.  If it had been previously set by an onchange event and the new options list was shorter than the old one, the option list would include what was left over from the previous. To set the options in a select we use the Option method.

  Since we want to set both the value of the option and the text displayed. In most languages this would be done with an associative array with the key being the text and the value being the option value.  But javascript doesn't have associative arrays. Luckily it does have Objects which are pretty much associative arrays. The syntax is similar to an array except for the use of {} and a key value pair separated by a :.  We then use the Option method to set the options on the second select.

Here is our function:

//move selections inside the function so I can choose which to use
function switchSecondSelect(){
 //Zero out the length of the select
 document.getElementById("second_select").options.length=0;
 var selections = {"": ""};
 
 var select_one = document.getElementById("firstselect").options.selectedIndex;
 var selected_value = document.getElementById("firstselect").options[select_one].value;
 if(selected_value == 1){
  var selections = {1: "Bob Smith", 2: "Barb Smith"};
 } else if(selected_value == 2){
  var selections = {3: "Kofi Okoro", 4: "Ba Okoro", 5: "Keita Okoro"};
 } else if(selected_value == 3)
 {
  var selections = {6: "Camille Rodriguez"};
 }
 
 
 
 //use option constructor to set second selects options.
//We always want the first option blank for our use here.
 document.getElementById("second_select").options[0] = new Option("", "", true, false);

 //now  go through the object and feed those values into the select
 var count = 1;
 for (value in selections)
 {
  
    
  document.getElementById("second_select").options[count] = new Option(selections[value], value, false, false);
  count++;
 } 
}

Now things get really complicated and I am not going to explain most of it. We need to use php to query mysql and then use the results to construct the first select and the javascript function. In the code, I call custom functions that are part of our framework. We use two tables in the database. The first has the organization name and a unique identifying number. The second table contains information for the people as well as a unique identifying number for that person and a field that records which organization they are involved with.

    <form name="form" id="form">
        <select name="first_select" id="firstselect" onchange="switchSecondSelect();">
            <option selected="selected" value=""> </option>





        </select>

<script type="text/javascript">

    //Set an array of the values you want to change the second select options to have to use an object since javascript doesn't have associative arrays
    //since we want to set the value and string
    //  Where as var array = ["one", "two", "three"];  Objects use the syntax below
    document.getElementById("firstselect").options[0] = new Option("", "", true, false);



    <?
        $companies = $this->app->getAllCompanies();
      
        $count = 1;
         foreach($companies as $company)
        {


                $company_id = $company['rec_id'];
                $company_name = $company['name'];
                echo "document.getElementById(\"firstselect\").options[$count] = new Option(\"$company_name\", \"$company_id\", false, false); \r\n";
                $count++;
        }
    ?>



    //move selections inside the function so I can choose which to use
    function switchSecondSelect(){
        //Zero out the length of the select
        document.getElementById("second_select").options.length=0;
        var selections = {"": ""};

        var select_one = document.getElementById("firstselect").options.selectedIndex;
        var selected_value = document.getElementById("firstselect").options[select_one].value;
        <?
            $sizeCompanyArray = sizeof($companies);
            $count = 1;
            foreach($companies as $company)
            {


                $company_id = $company['rec_id'];

                $employees = $this->app->getContactsByCompany($company_id);
                //set the first selects values which should be the company identifier and the name

                echo "if(selected_value == $company_id) {";
                echo "var selections = {";

                foreach($employees as $employee)
                {
              //  util_debug($employee);
                    $name = $employee['first_name'] . " " . $employee['last_name'];
                    $rec_id = $employee['rec_id'];
                    echo "$rec_id: \"$name\", ";


                }
                echo "}; }";
                if($count != $sizeCompanyArray)
                {
                    echo "else ";
                }
                $count++;

            }
        ?>






        //use option constructor to set second selects options. Always have the first one empty. This is necessary for our framework
        document.getElementById("second_select").options[0] = new Option("", "", true, false);
     
        //now  go through the object and feed those values into the select
        var count = 1;
        for (value in selections)
        {


            document.getElementById("second_select").options[count] = new Option(selections[value], value, false, false);
            count++;
        }
    }
</script>

    <br />
    <br />
    <select name="second_select" id="second_select">
        <option selected="selected" value=""></option>
        <?
    }