Search

Geek Girl Joy

Artificial Intelligence, Simulations & Software

Tag

Bookmark Ninja

Are you a Bookmark Ninja?

Welcome back, I mentioned in my last few posts that I would be doing a review of Bookmark Ninja soon and today we’re going to talk about how Bookmark Ninja is the ultimate online bookmark manager and organizer!

However, before we do, in accordance with FTC Guidlines I’d like to make you aware that this post does contain sponsored content. That being said I pride myself on being open and honest and my statements in this article are my true and actual opinions.

Now with that out of the way… in my post Happy New Years 2018 + Special Announcement I discussed the origins of this post:

“It all started when I contacted Jozsef Torzan…”

Needless to say one thing led to another and I was well on my way to reviewing Bookmark Ninja 🙂

If you need the TL;DR here it is: You will not find a better option when it comes to the simplicity, ease and affability of storing your bookmarks with Bookmark Ninja!

If you have time to keep reading, here’s why…

Imagine never having to sync all your bookmarks again! Never having to worry about about your research links and preying that your disaster recovery software shadow copied the latest bookmarks before your system died…

Imagine not having to send yourself links from your work email and instead having them immediately available to you whether you are on your phone, tablet, home system or AFK… With Bookmark Ninja your links are available no matter where you are or what device you are on!

Honestly, I wish I had thought of the idea myself because its such a great concept but since I can’t build it I might as well evaluate it. 😛

Installation

Let’s start with installation, this one is a little hard to score because while bookmark Ninja is a web app, there is sort of an instillation step that you have to do if you want to bookmark a URL.

You only need to do it once and it basically amounts to creating a browser bookmark.

Once you have a bookmark created in your browser of choice you replace the URL with some Javascript they give you and you don’t even have to copy it, there is a “Copy to Clipboard” button so they have really taken the PITA out of it.

After which you are ready to start saving new bookmarks to your Ninja account by navigating to the URL and then clicking the saved bookmark.

It’s super easy and takes 10 seconds of effort, the thing is that this might seem a little weird to a novice user but the fact that it’s a one time thing and super quick to do (and they DO provide all instructions necessary) makes it hard to reduce points for this.

Additionally, the reason for doing this has more to do with a limitation of how browser’s & web apps work and is not really reflective of a failing on behalf of the Bookmark Ninja developer team. Frankly, if I were to sit down and build a system like Bookmark Ninja I would likely use the exact same method so I think I will give this an 9 out of 10 because while it does take a second to do, its really not that big of a deal.

9/10

 

Cross-platform Compatibility

I conducted my evaluation of Bookmark Ninja using Linux and Windows OS desktops as well as my personal Android cellphone, an iPhone in addition to an Amazon Fire Tablet and in all cases I was pleased with how seamless the experience was!

I was a little reluctant initially to try Bookmark Ninja on anything but my desktop because of how well it worked on my computer, however after getting over my inceptive trepidation I was pleasantly rewarded!

Bookmark Ninja is a browser based web application so you can be confident in knowing that it will basically always work the same no matter what devices you happen to use.

10/10

 

Portability

Let’s face it, using cloud services inherently means that you are handing over your data for safe keeping with a 3rd party that you NEED to be able to trust. Should you decide that you need to walk away with your data, whatever your reasons may be, that you can.

Further, you may simply want to store offline backup copies for your own use and or sanity.

Bookmark Ninja has you covered and makes this super easy! You can do this by accessing the Tools menu where you will find a couple of options.

The first method is to just have a list of selected bookmarks emailed to you and this seems like a nice way to have a relatively short list of URLs sent to you (or somebody) for reference. I believe you can export all your bookmarks this way too but that’s potentially a really long email and not the most efficient for migration though excellent for sharing URLs with friends, colleagues & customers via email!

The second method is to download an html file. This file can contain all your bookmarks and is ideal for migrating your data or simply maintaining an offline personal backup because essentially all modern browsers these days can import bookmarks via an HTML file.

Further, your organization structure is maintained via tabs becoming folders and any tags you create and add to a bookmark are preserved via this method as well. Effectively this means that there is ABSOLUTELY NO PENALTY for storing your bookmarks with Bookmark Ninja.

In fact, the file I got back from them did a better job of organizing my bookmarks when I imported it into Firefox than I have ever personally done!

I am inclined to give this a 10 out of 10 as well however to be fair I’m going to remove half a point because I know there is 1% of you out there going “but I wanted…” and insert your specific file format (txt, json, csv, xml, xls, xlsx, ods, pdf, sql, etc.) and while I agree conceptually it would be nice to have other file formats available should you want them, 99% of users are really going to prefer the HTML format because all browsers will import it and that 1% that wants something different have the unique technical skills required & the tools available to easily read, parse and convert the data to fit their needs from the base HTML file anyway.

Perhaps Bookmark Ninja could decide to offer other formats should their user base ask for it but to be fair to Bookmark Ninja and most users I am going to give Portability a 9.5 out of a possible 10.

9.5/10

 

Account Recovery

I also examined the password recovery system. I didn’t actually lose my credentials but I went through the process anyway to see how well it worked.

It’s been my experience that building a good account recovery system is easily overlooked by even skilled developers, which can be a real pain for end users!

Here again, Bookmark Ninja gets it exactly right!

The Ninja server sent me an email promptly with a link to reset my password and in just a couple of minutes I was back accessing my bookmarks.

Overall very smooth and exactly as expected.

10/10

 

UI/UX

If you spend any amount of time at all reviewing either Jozsef’s Blog or the Bookmark Ninja Blog its easy to see that creating a seamless user friendly UI & UX is a core concern of the Bookmark Ninja Dev team and recently Jozsef even blogged about some updates to their UI & UX (The UI And UX Design Of The Advanced Search) where he describes the latest set of improvements to Bookmark Ninja and I believe the Ninja Dev’s will continue to innovate so long as there remains anything they can improve upon for their customers!

Bookmark Ninja sports a modern Flat Design which many of my regular readers will know is not my personal favorite, (though I’ve implemented it plenty of times myself 😛 ) however if you are going for the flat look in your own projects you would do well to follow in the footsteps of Bookmark Ninja because they strike the right balance of simplicity and usability.

Everything you are going to want to do is available and easily found without any superfluous visual cruft I.E. the “Goldilocks Principle” as it applies to design where you strive for “not too much & not too little”, but “just… right” which in practice can be difficult to achieve without a sincere and concerted effort.

The menus and interfaces themselves are various shades of whites & grays which present a clean experience and at times is mildly reminiscent of Apple, though personally I found myself wanting just a bit more color and contrast on the screen to make navigating menus and pages easier and more pleasant.

Ninja does offer you the ability to apply color to category headings which is a great feature that helps to differentiate categories especially while visually sorting and finding bookmarks on the Dashboard interface. My only gripe here is that there is a small list of colors to choose from and either adding more colors to that list or adding an RGB color wheel (or RGB HEX field) would expand personalization and further enhance the user experience.

Bookmarks & Categories are treated as objects and you can simply drag and drop to move them around which is rather wonderful in how easy and direct that makes organizing and managing your links.

Before I proceed to render my score however I feel like an additional point should be addressed.

One of my regular readers had read my article where I mentioned that I was reviewing Bookmark Ninja and decided to check it out for themselves and actually subscribed to the service.  Since they had subscribed I decided to “pick their brain” a little and get their impression of Bookmark Ninja.

Generally they gave Ninja high marks as well but they raised a valid though minor point that I think speaks to the importance of making UX a serious focus when developing a product and how even when you get it right it can be difficult to address every issue.

The point they raised to me was simply having a little confusion over the proper formating when adding tags to a bookmark. Specifically they were uncertain if they needed to use hash marks # in front of the tag name or not.

Ultimately this makes sense as we all understand what the concept of a “tag” is but the actual implementation can very depending on what “tag” meant to the design team.

Of course I directed them to the Ninja blog search for all references to tags, where they show examples without hash marks.

Further, I believe tags are likely searched in the database using some form of “greedy/inclusive” wildcard or %LIKE% search (assuming SQL or an equivalent if not) so if you create tags using hash marks it shouldn’t really matter as %mytag% or *mytag* should match #mytag however I think it would probably be simpler not to use them.

So getting back to the importance of UX which stands for (User eXperience) I believe this type of confusion could be resolved quite simply by adding a “tool tip” component on the form fields or by having a dedicated help button somewhere nearby that either displays relevant help or links directly to the related articles on the blog.

To be fair, the blog covers every topic under the sun and information is organized so that is easily found. The issue here is one of not having to stop your current action to go find information, hence my suggestion of adding tooltips or perhaps even a “local context”  help popover, modal or even popup to offer prompts, examples or explanations.

Overall I was highly satisfied with the UI & UX offered by Bookmark Ninja and I’m going to give them an 9 out of 10.

9/10

 

Support

When I think of support as an issue by which to rate or score a service like Bookmark Ninja I tend to define it as an issue that requires me (the user) to submit a support request because I cannot resolve the issue by myself.

Using this definition I never actually ran into any issues that would allow me to request support.

Which if you think about it is actually a great indication of how well Bookmark Ninja is designed (though see the next section Reliability) and I was unable to think of something convincing that wasn’t actually occurring that would allow me to submit a support request.

Further I wanted to avoid any “special treatment” that might unduly affect my overall opinion of their service though I am unaware if anyone on the Dev team other than Jozsef who was actually aware of who specifically was reviewing their service.

As a result I am unable to objectively say how responsive the Bookmark Ninja team is with support requests, however I can honestly say that if my email correspondence with Jozsef is any indication of how he and his team conduct support then they will be prompt and courteous without fail!

I’m going to give this one a 10 out of 10 as well but with the expressed caveat that this is inferred.

If you decide to give Bookmark Ninja a try and find that you need support you can send an email to  support@bookmarkninja.com. If you end up submitting a support request go ahead and let me know how your experience went and I would be happy to include a summery here for the benefit of my readers.

10/10

 

Reliability

Despite it not being an issue worth submitting a support request over and fully acknowledging that I suppose I could have, I did encounter a weird behavior that occurred occasionally and seems to have more to do with browser security and executing Javascript code than anything Bookmark Ninja did wrong.

Essentially, every so often when I would use my browser bookmark to access my Bookmark Ninja account to create a new bookmark, the actual URL I wanted to save wasn’t transfered to the popup form and instead I would get an About:Blank link.

This was easily fixed by a second try or by manually copying the link and pasting it in the field. I don’t feel like this was a major pain at all and I am not even sure if there is anything the Ninja Dev’s can do to resolve this but because it did occur enough that I did notice it, I am going to ding Reliability 1 point.

9/10

 

Cost

Bookmark Ninja costs $1.99 a month (admit it, thats less than you spend on coffee every day!) and is billed annually, just $23.88 gets you an entire year of service!

10/10

 

So out of a possible 80 Bookmark Ninja scored 76.5 (that’s 95.625%) or an ‘A’ if I were handing out letter grades 😛

Bookmark Ninja offers an affordable way to simplify accessing and managing important links at work, home and on the go!

If you would like to try Bookmark Ninja you can get your Free 30 day Trial by using this link.

I don’t receive any compensation if you choose to use Bookmark Ninja however I do like and recommend their product and should they ever decide to implement an affiliate program I would certainly be willing to endorse Bookmark Ninja because I know my readers will benefit from it!

With that, everyone have a great day and I will see you all in my next post.

 

Much Love,

~Joy

Lets build an Auto Coding GIT Commit Bot

My friend Oliver approached me recently with an idea for a project that we could both work on together and after he explained the basic premise I was on board!

The initial concept was wouldn’t it be fun to have a bot that could publish your git commits for you? Which of course the only correct answer is “HELL YEAH!”!

Oliver, built a prototype and then had the great idea of using a Raspberry Pi to act as a sort of “Auto Commit Robot” and to test his newly minted bot he modified it to create randomly generated files to commit, and that’s when it hit us… There was a bigger story here…

One of the first uses for the bot we considered was the the idea that although most employers are reasonable and will look at the quality of your code, there are still some that look at how frequently you commit as a large indicator of how ‘driven’ or ‘voracious’ of a programmer you are, which if you think about it makes absolutely no sense at all!

So Oliver suggested, what if you were to just commit the random text he was generating to a private repo but have your commit data publicly available on your GitHub account, this would allow you to push commits every day (or at least on a schedule) and establish a history of regularly pushing commits which is exactly what he built! When he publishes his half of this project I will link to it here.

I highly recommend when it’s published that you head over to read his post and give it a like too! He’s also really nice so feel free to leave him a comment as well, I am sure he would appreciate it! 😉

Now this is where I come in. My portion of this project stems from the fact that not everyone has a Raspberry Pi (or Linux machine since for this purpose they are basically are one in the same) lying around and also not everyone pays GitHub to maintain private repos, so a lot of people are just using GitHub to store free public repositories.

So, my challenge is to turn his bot into a cross platform solution so that it also works with public repos because anyone looking past just the number of commits would discover the ruse of randomly generated data.

So I modified my scenario a little bit so that my challenge was clearer.

Consider the following: It’s the the new year and you are looking to “get a head start on commits”… or maybe you have a bet with a friend that you can make more commits to your GitHub than they can between now and next month… or maybe you just want to watch the Stock Market fall… Whatever the reason is you decide that you happen to need an auto commit bot…

Once I had a scenario I knew that in order to solve this challenge the data that Oliver’s bot was pushing to the repo had to pass a basic “visual test” ( if not a run test ) even if the results of the code was useless.

With that in mind I set to work designing my methodology.

    1. First, I make the following assumption… ANY line of code that is capable of passing an eval() MUST be good because it “runs” so if I can generate the code segments and make it look like real code (more or less) even if it essentially does nothing, well it’s that much harder to question the validity of the commit, isn’t it?
    2. Further, use shell_exec() to execute the git commands in a cross-platform way.

I could hypothetically generate unit tests using the ASSERT function (thinking in PHP here 😛 ) if I wanted to go that route, though I’ll leave that for you to add to your own implementation!

  1. In any case I set to work coding generate-functions-example.php

    generate-functions-example.php

     


<?php 


function RandomString($length) {		
    $output = '';
    $alphabet = 'abcdefghijklmnopqrstuvwxyz';
    $alphabet_length = strlen($alphabet);

    for ($i = 0; $i <  $length; $i++) {
        $output .= $alphabet[mt_rand(0, $alphabet_length - 1)];
    }
	
	return $output;
}


function SelectLanguageFunction($param) {		
	$output = '';
	$action = mt_rand(0, 38);
	
	// abs
	 if($action == 0){
		$output .= 'abs(' . $param . ')';
	 }
	 // acos
	elseif($action == 1){
		$output .= 'acos(' . $param . ')';
	 } 
	 // acosh
	elseif($action == 2){
		$output .= 'acosh(' . $param . ')';
	 }
	 // asin
	elseif($action == 3){
		$output .= 'asin(' . $param . ')';
	 }
	 // asinh
	elseif($action == 4){
		$output .= 'asinh(' . $param . ')';
	 }
	  // atan
	elseif($action == 5){
		$output .= 'atan(' . $param. ')';
	 }
	 // atan2
	elseif($action == 6){
		$output .= 'atan2(' . $param . ', ' . "($param + " . mt_rand(3, 7) . ')  * pi())';
	 }
	 // atan
	elseif($action == 7){
		$output .= 'atan(' . $param . ')';
	 }
	 // atanh
	elseif($action == 8){
		$output .= 'atanh(' . $param . ')';
	 }
	 // bindec
	elseif($action == 9){
		$output .= 'bindec(' . $param . ')';
	 }
	 // ceil
	elseif($action == 10){
		$output .= 'ceil(' . $param . ')';
	 }
	 // cos
	elseif($action == 11){
		$output .= 'cos(' . $param . ')';
	 }
	 // cosh
	elseif($action == 12){
		$output .= 'cosh(' . $param . ')';
	 }
	 // decbin
	elseif($action == 13){
		$output .= 'decbin(' . $param . ')';
	 }
	 // dechex
	elseif($action == 14){
		$output .= 'dechex(' . $param . ')';
	 }
	 // decoct
	elseif($action == 15){
		$output .= 'decoct(' . $param . ')';
	 }
	 // deg2rad
	elseif($action == 16){
		$output .= 'decoct(' . $param . ')';
	 }
	 // exp
	elseif($action == 17){
		$output .= 'exp(' . $param . ')';
	 }
	 // expm1
	elseif($action == 18){
		$output .= 'expm1(' . $param . ')';
	 }
	 // floor
	elseif($action == 19){
		$output .= 'floor(' . $param . ')';
	 }
	 // fmod
	elseif($action == 20){
		$output .= 'fmod(' . $param . ', 0)';
	 }
	 // hexdec
	elseif($action == 21){
		$output .= 'hexdec(' . $param . ')';
	 }
	 // hypot
	elseif($action == 22){
		$output .= 'hypot(' . $param . ', ' . $param . ' * 2)';
	 }
	  // is_finite
	elseif($action == 23){
		$output .= 'is_finite(' . $param . ')';
	 }
	  // is_infinite
	elseif($action == 24){
		$output .= 'is_infinite(' . $param . ')';
	 }
	 // is_nan
	elseif($action == 25){
		$output .= 'is_nan(' . $param . ')';
	 }
	 // log10
	elseif($action == 26){
		$output .= 'log10(' . $param . ')';
	 }
	 // log1p
	elseif($action == 27){
		$output .= 'log1p(' . $param . ')';
	 }
	 // log
	elseif($action == 28){
		$output .= 'log(' . $param . ')';
	 }
	 // max
	elseif($action == 29){
		$output .= 'max(' . $param . ')';
	 }
	 // min
	elseif($action == 30){
		$output .= 'min(' . $param . ')';
	 }
	 // octdec
	elseif($action == 31){
		$output .= 'octdec(' . $param . ')';
	 }
	 // pow
	 elseif($action == 32){
		$output .= 'pow(' . $param . ',' . mt_rand(2, 7) . ')';
	 }
	 // rad2deg
	 elseif($action == 33){
		$output .= 'rad2deg(' . $param . ')';
	 }
	 // round
	 elseif($action == 34){
		$output .= 'round(' . $param . ')';
	 }
	 // sin
	 elseif($action == 34){
		$output .= 'sin(' . $param . ')';
	 }
	 // sinh
	 elseif($action == 35){
		$output .= 'sinh(' . $param . ')';
	 }
	 // sqrt
	 elseif($action == 36){
		$output .= 'sqrt(' . $param . ')';
	 }
	 // tan
	 elseif($action == 37){
		$output .= 'tan(' . $param . ')';
	 }
	 // tanh
	 elseif($action == 38){
		$output .= 'tanh(' . $param . ')';
	 }
	 return $output;		 
}


function SelectOpperation() {
	$action = mt_rand(0, 5);
	
	// Addition + 
	 if($action == 0){
		 return '+';
	 }
	// Subtraction -
	elseif($action == 1){
		 return '-';
	 }
	// Multiplication *
	elseif($action == 2){
		 return '*';
	 }
	// Division /
	elseif($action == 3){
		 return '/';
	 }
	// Modulus %
	elseif($action == 4){
		 return '%';
	 }
	// Exponentiation **
	elseif($action == 5){
		 return '**';
	 }
}




function GenerateRandomFunction() {	
	
	// name the function
    $function_name = ucfirst(RandomString(mt_rand(2, 7)));

	// how many parameters should the function take?
	$number_of_parameters = mt_rand(1, 3);
	$parameters = array();
	for ($i = 0; $i < $number_of_parameters; $i++) {
		 $param_name = RandomString(mt_rand(2, 5));
		 $parameters[] = "$$param_name";
    }
	
	// build function comment
	$funk_header = '/**' . PHP_EOL; // open comment
	$funk_header .= ' * Does Something' . PHP_EOL;  // function description
	$funk_header .= ' *' . PHP_EOL; 
	foreach($parameters as $parameter){
		$funk_header .= ' * @param ' . $parameter . ' Add Description' . PHP_EOL; // parameter description
	}
	$funk_header .= ' *' . PHP_EOL; 
	$funk_header .= ' */' . PHP_EOL;  // close comment
		
	// build function
	$funk = 'function ' . $function_name . '(' . implode(', ', $parameters) . '){ ' . PHP_EOL;
	
	// do something with the parameters
	$funk .= str_repeat(' ', 4) . 'return ';
	foreach( $parameters as $key=>$parameter){
		$funk .= SelectLanguageFunction($parameter); // do something with the parameters
		if($key < $number_of_parameters - 1){
			$funk .= ' '. SelectOpperation() .' '; // add opperation
		}
	}
	$funk .= ';'; // add semicolon

	// build end of function
	$funk .= PHP_EOL . '}' . PHP_EOL . PHP_EOL;
	
	return  $funk_header . $funk;
}
/////////////////////////////////////////////


$number_of_files = 10; // how many files to generate

// create the files
for($f = 1; $f <= $number_of_files; $f++)
{
	$file = fopen('functions/' . RandomString(mt_rand(3, 7)) . '.php','w');
	fwrite($file, '<?php' .  PHP_EOL);
	for($i = 0; $i < mt_rand(3, 17); $i++){
		fwrite($file, GenerateRandomFunction() . PHP_EOL);
	}
	fclose($file);
}

This code could be simplified by making use of arrays of language functions rather than hard coding them as if/else statements however I’ll leave that for you to implement if you want.

If you run this code the you will get 10 PHP files that contain a random number of functions (that will eval()) in a sub-folder called ‘functions’ and each function will have it’s own comment header that lists the parameters and included a place for a description of the function and the parameters.

At first glance the generated code appears complicated and useful, here is an example function generated:

/**
 * Does Something
 *
 * @param $cl Add Description
 * @param $jw Add Description
 * @param $qobwa Add Description
 *
 */
function Icbekz($cl, $jw, $qobwa){ 
    return atan($cl) + hypot($jw, $jw * 2) ** atan2($qobwa, ($qobwa + 3)  * pi());
}

You could use this function like this:


echo Icbekz(4.3, 7.1, 22);

With the resulting output being: 3.470139188433

Of course this works but the output is essentially useless except for exactly what we want it for, generating functional non-sense code!

At this point whatever you set the $number_of_files variable to is how many new files you will get in the functions folder every time the script is run.

Schedule this PHP script to run on a Linux machine using a Chron Job or on a Mac using a Scheduled Job or Windows using Scheduled Task so that it runs weekly, daily or even hourly depending on your needs.

Now all we need is a cross platform script to use GIT to upload the new files to your repo once the other script is complete.

update-repo.php

// !IMPORTANT! Manually Pull/Create your repo before using this script 

// This script assumes that you keep your repos in your 
// user folder in a folder called repos.
// Adjust the $local_path variable as needed
$repo_name = 'test';
$local_path = '$HOME'."/repos/$repo_name/"; // linux & mac path example
// $local_path = "%userprofile%\repos\$repo_name"; // win path example
////////////////////////////////////////////////////////////////////////////////////
/// Put anything you want to occur before the push here.
////////////////////////////////////////////////////////////////////////////////////

// comment this line after the script has run once
// it updates the config file for the repo to tell git to store the
// credentials after you enter them once
shell_exec("cd $local_path;git config credential.helper store");

// Pull Repo
shell_exec("cd $local_path;git pull");

// THE FIRST TIME THIS SCRIPT RUNS YOU WILL BE PROMPTED
// TO MANUALLY ENTER CREDENTIALS HERE.

// Add all new files
shell_exec("cd $local_path;git add *");

// Push new data
shell_exec("cd $local_path;git push origin master");

///////////////////////////////////////////////////////////////////////////////////
/// Put anything you want to occur after the push here.
///////////////////////////////////////////////////////////////////////////////////

Schedule this Script to run after the generator and all the newly generated code will be pushed to your GitHub repo on a regular interval! 😉

You can find this project on my GitHub account for free here: Auto Commit Bot

I have also created a version that will generate complete class files and you can see examples of the output on my GitHub in the classes subfolder for this project. All of my $1 or greater supporters on Patreon can download a copy of this project that includes the Class Generator.

Don’t forget to follow my up-to-date & ongoing research over on my public BookmarkNinja tab!

With that, everyone have a great day and I will see you all in my next post.

Much Love,

~Joy

Happy New Years 2018 + Special Announcement

Hello everyone, HAPPY NEW YEARS!

Just wanted to check in since its been a few weeks… OK about a month 😛 since my last post so lets dish!

I caught (then got over) a cold and Xavier did the same 😛

I did TONS of year end house cleaning, with a little consulting mixed in there and I even found time to built a prototype app for a friend of mine who Identified an interesting potential market niche. He is going to demo the prototype soon and if all goes well we MAY use Electron which is a desktop cross-platform build tool to deploy it, though I would say we are far from a product we can actually bring to market just yet. I hope to discuss more about this in future posts so for now I will leave this as is.

I’ve also recently started collaborating with another developer (note to self: EMAIL OLIVER!) on a set of posts centering on a bot concept he had and we should be ready to publish that soon so I also don’t want to give too much about this topic away… and Ive also since started collaborating with this same developer on my writer/coder bot, I’m building out the bot API and he will be working on a front-end interface.

In regard to the bot, I managed to build out a functional language model (Bi-Grams & Tri-Grams). I’m hoping early this year to expand it up to and including Deca-Grams by adding and improving the abstraction in the bot class.

I expect we will have some real fun with this bot in the coming year because outside of writing and code, I want to see how well my bot could learn things like music generation and perhaps chat or natural conversation… we’ll see. 😉

There was also a New Years camping trip which was relaxing but not much to tell.

Which brings me to a special announcement…

Special Announcement

I have my first first sponsored content coming soon and I am really looking forward to telling you guys all about it! Of course I will reserve my review for the actual review post which I plan to publish in a month or two (depending on how everything goes) but I have a good reason for telling you now which I’ll get into in a moment.

It all started when I contacted Jozsef Torzan, a blogger I follow who hadn’t published in a few weeks and I was curious as to why he stopped and to see if he was okay.

Turns out everything was fine and he was deep in development on a whole series of updates and new features on his web service Bookmark Ninja (Ninja) which quite literally is the ultimate online bookmark manager and organizer!

In any case, after Jozsef described the new features I just had to try Ninja for myself and offered to do a review, Jozsef agreed and graciously extended to me a trial membership!

One of Ninja’s new features is the ability to publicly share a “tab” which is a collection of your bookmarks via a URL with anyone! This means I can give you guys a sneak peak into what I am working on by saving all my “current research” here and you also get a real world example of  how Bookmark Ninja can be used, a win/win if I ever saw one! 🙂

So, for the next month or two I would like you to use the link below to go to one of my public tabs which I am updating constantly so check this link frequently if you want a sneek peek to see the kinds of things I am researching for my work and posts.

Bookmark & Share This Link: https://www.bookmarkninja.com/share/25819465

All my posts are made possible by the generous contributions and hard work of my sponsors!

If you like my work please consider supporting me over on Patreon for as little as $1 a month

With that, everyone have a great day and I will see you all in my next post.

Much Love,

~Joy

Blog at WordPress.com.

Up ↑