Sunday, August 21, 2016

Conversational AI, Chatbots, Abot, and the Microsoft Bot Framework

The unveiling of the Microsoft Bot Framework is pretty amazing, and I agree with Natya Sadella when he emphasizes that human conversation should be the computer interface of the future.

Chatbots are quite popular; however, they are stuck in the stone age with weak implementations like AIML. The real answer will be much more like Microsoft's Xiaoice or the OpenCog project. In fact, I'm investigating seq2seq in TensorFlow for the purpose of making conversational AI.

In fact, I'd like to integrate Abot with Sikuli X to create a bot to control my Ubuntu installation. I'd also like Abot to be used for human-aided programming. Basically, I want to get templates for programming languages and use a bot like Abot to interpret human intent directly into software.

I'd just like to drop some more links:

http://www.hutoma.com/

https://www.rivescript.com/

https://github.com/gunthercox/ChatterBot

http://machinelearningmastery.com/how-do-i-get-started-in-machine-learning/

ACPI Error: Method parse/execution failed [_GPE._L6F]

Just wanted to share this useful information:

http://jhshi.me/2015/11/14/acpi-error-method-parseexecution-failed-_gpe_l6f/index.html

Ubuntu 16.04 and OpenSUSE 42.1

Well, I tried out OpenSUSE and have decided to switch back to Ubuntu 16. First of all I want to say that while updates to Ubuntu 15 broke my installation, the Ubuntu 16 installation is way better. I was concerned about the lack of fglrx support, but amdgpu just works. Also, my Bluetooth headset now works right out of the box, but not the Gigabyte card, rather the BT dongle I found from thinkpenguin.com. OpenSUSE wasn't performing very well given the graphics card situation. I'd buy a new graphics card, but I don't want to spend a lot of money at the moment.

Sunday, May 15, 2016

3 weeks without an update?!

I haven't given an update recently, so here it is:

I got nata.li and pat.nata.li hosted on AWS. I backed up all my stuff on AWS. I pruned my Redmine backlog. I investigated some other productivity products. I tried to install the Gigabyte GC-WB867D Wi-Fi/Bluetooth card but it doesn't seem to work. I plan on wiping my old Dell laptop and then installing OpenSUSE and a few other Linux installations on it. I uploaded a few things to bitbucket. I contracted someone for a small software project. Now I'm lurking in some programming related IRC channels. I discovered that there are some programming groups in Pittsburgh which could be interesting.

Hopefully, I'll have a bit for you next Sunday. :)

Sunday, April 24, 2016

Not much exciting

I continued practicing with rails, I'm backing things up to AWS, I reorganized my domain name setup... I still haven't put nata.li back up. We'll see how things go this next week.

Thursday, April 14, 2016

(Not much) progress report

Still not much progress on the security system lately. I've been doubling down and focusing at work. I also changed my diet, which is still giving me issues.

I have not installed other operating systems on this computer yet. I'm not altogether convinced it'll solve my issues. I'll probably end up having to use Windows to get any kind of decent gaming performance on this graphics card. How disappointing. I'd rather not use Nvidia since their business tactics are immoral.

While doing an exercise on KhanAcademy, I discovered an easter egg in GNU Octave. fact(n) gives a random fact, not the factorial.

octave:2> fact(10)
Whenever someone writes a "Hello, world" program, Richard Stallman says "Hello"
back.

Factorial is just factorial(n).

Anyways, I've also worked on encrypted backups in AWS. In order to facilitate this, I wrote this script called simpleluks.sh: https://gist.github.com/beta0x64/a9db67131080a2c277a50b7a36661287


Saturday, April 9, 2016

Rootcrit security system prototype problem solved

I'm such a dummy! Remember in my update earlier this week when I mentioned that Rootcrit wasn't starting at all, mysteriously? I know why: it was trying to connect to my AWS Cassandra instance and I wasn't waiting long enough for the timeout. Oops. Since I stopped my AWS instance and started it back up, its IP changed. I'll need to associate it with an IP, then associate that IP with a subdomain of mine.

Speaking of which, I really ought to sort out my domain name situation. Right now, I believe my n nata.li domain name is transferred from namecheap to arvixe.com. Arvixe is an OK service for the price, but it could be much better. I might transfer the domain and my website to Amazon.

Thursday, April 7, 2016

fizzbuzz.asm

It's finally here. I just got done cleaning up fizzbuzz.asm. Endless amusement.

https://gist.github.com/beta0x64/d3b6762c638b4a6784edd81a80d95aa7

I tried making doing values -50 to +50 but for some reason it did not work on the negative modulo. For example, -50 would not be considered fizz or buzz (divisible by 3 or 5). I didn't look into it any further.

Sunday, April 3, 2016

Weekly update - Progress was slow! Not anymore

The past couple weeks have been slow for me, but that is all in the past. I had some medical stuff go on that made me quite sluggish and a little irritable.

General update: I would like to reinstall this machine. In my opinion, Ubuntu has declined in quality lately. I would ideally like to install a couple operating systems with a large shared filesystem. For example, I would like to try Fedora, OpenSUSE and Debian.

Remote backup update: I realized that Amazon Web Services only provides disk level encryption (EBS volume encryption) for instances over a certain massive size. No thank you! I might try this out on Linode. Anyway, a surefire solution would be to use cryptoLUKS containers and possibly git. Put the entire backup in cryptoLUKS containers, then use a git filesystem inside of that to keep track of the changes.

Security system: I am having an issue running my cartonized perl. No idea why this is. Anyway, I decided to start working on new features in branches finally. Right now, there's a 'show_incidents' branch for Rootcrit here: https://github.com/beta0x64/Rootcrit/tree/show_incidents I noticed that when opening a very large number of images and attempting to decrypt them, asynchronous processes would apparently timeout inevitably. That's a challenge of client-side JS programming: how can I know what the client is capable of? How do we recover in that situation? Well, my plan is to pool the workers at least. I would also like to add paging, but that is a little bit outside of my paygrade right now when it comes to Cassandra. I know it can be done, though.

Statistics: I've been doing some work on z-scores lately. There's not much to say about this. z-scores will tell me where a value lies on a normal distribution, which lets me answer questions like "How likely is it that someone is X or more and Y or more?" etc. etc..

Assembly: I haven't done much of anything here. I have not so much as edited my FizzBuzz program, which is very disappointing, I know. :) After looking at it briefly, I think the main issue I had was in "knowing when to stop." Or in other words, my loop was broken. I should look into how to write functions in nasm. That would help keep the repetition down tremendously.

That's all I can think of for now to update.

Goals for next Sunday:

General: Reinstall this computer.

Remote backups: Make it easy to work with cryptoLUKS (probably a perl or ruby wrapper).

Rootcrit: Reinstall carton and get Rootcrit running again. Then check out the decryption pooling.

Statistics: Keep on chugging along.

Assembly: Find out how to write a function in nasm. Address the fizzbuzz loop.

Saturday, March 26, 2016

Security system update - we have decryption!

Good news everyone, I got OpenPGP.js to work. I gave up on jBinary and decided to go with a plain XHR request that uses the arraybuffer type. From there, it's a cinch to load the binary data into OpenPGP.js. I've never been so happy to decrypt a file. :)

However, there are bugs and the current UX is terrible. It tries to list all the files in Cassandra (lol), and it also seems to be decrypting only the last image in the list despite loading all the others. No good! I would also like to make it easier to view individual images.

Anyway, I also learned that Google has its own end-to-end PGP encryption in the works. I think that's pretty awesome, and I hope we see more uses for client side encryption. SSL is not enough! Especially in today's cloud-driven world where it's all too easy to lose control of your own data.

Monday, March 21, 2016

Reverse engineering with GDB? Maybe

I'm learning a bit about reverse engineering, and I have to say: using GDB is a real pain. Gee, I wish I had IDA Pro right now! Anyway, GDB is a pain to use because I can't view all the registers and flags at once. Allegedly, I should be able to also reverse-step in gdb 7 but I am not seeing the option to. I might need to custom compile my own. I'll need to get a lot more comfortable with gdb so I can expand some tools for my own dev work. They should become quite valuable since gdb isn't going anywhere soon.

Also, 'gdb -tui' and thank me later.

'Ctrl-x 2' will split the screen for source and assembly code. Then, 'layout asm', 'break *start', 'run', 'step' and 'next.' That's the quick and dirty primer for you. Expect to see me talk more about this later.

Sunday, March 20, 2016

Another security system update

I'm running into issues loading the GPG encrypted data into a Uint8Array which should then be read by OpenPGP.js. I am seeing a discrepancy between the values of what is going in the Uint8Array and what I am seeing in a hex editor. xxd hex editor shows a leading value of 133. The Uint8Array is showing a value of 125. I downloaded the gpg encrypted file and decrypted it with gpg2, so the file is actually valid. It must be how I'm transporting it. I'm loading over AJAX right now.

Here's my first pass: OpenPGP.js Nightmare

I am getting an error on line 19 of the gist.

I'll keep at it and see what I can uncover. I knew I was going to run into issues with encoding, especially with a language as hectic as JavaScript. Sometimes web developers forget that there's anything but strings and numbers out there!

Saturday, March 19, 2016

Security system update

I made a little bit of progress. I've added a textarea for the GPG private key. Basically, you just paste the ASCII private key into the textarea, we load it into openpgp, prompt for a password, then we begin decrypting all of the incident data. There's a lot more work to be done here.

Redmine, AWS Backup, and more

So, I was looking for a private issue tracker for my personal use. I discovered Redmine and installed it on cloud AWS. I assigned it a domain name and now I can connect and check on my issues, estimating time etc.. It's so extremely convenient. I hope to expand its utility into planning etc.. I'm already reaping the benefits of having priority management built in an accessible manner.

I'm toying with the idea of backing up my data to AWS. I can import a keypair, so the data should remain secure. Right now, I have a 512 GB Magnetic EBS volume attached to one of my micro instances. It should be interesting to try to upload the data to it and see what happens.

Friday, March 18, 2016

Redmine, codility, khanacademy, nasm, asm.js and some maintenance

I didn't make any progress on the security system today. Instead, I worked on some other things. I did a little bit more configuration on Redmine. Now, I can track and queue things that I want to get done, and if done correctly, I should be able to track my own time.

I did the first part of the training from Codility. This was an interesting problem. I had to find the largest number of consecutive zeroes in a binary representation of an entire unsigned int. I accomplished this by while looping and shifting the number to the right and checking the value with & or %...I forget. Next time, I'll copy my code. Anyway, I only got an 80%. So, I'll need to do some more work there.

On KhanAcademy, I did some z-scores work. This is pretty simple work. It's simple subtraction and division, table lookups, etc..

I also did a little bit more tutorial programming through nasm. I wanted to implement Fizzbuzz in ASM but didn't quite get there. Instead, I am starting with a fibonacci sample from http://cs.lmu.edu/~ray/notes/nasmtutorial/ and adapting it to the Fizzbuzz problem. Writing it in assembly is a refreshingly low level challenge. There's something therapeutic about the low level operations.

I've done a little investigation into asm.js and WebAssembly since the WebAsm announcement earlier this week. Basically, WebAsm and asm.js are compilation targets via emscripten. A project called binaryen, I believe, can convert asm.js to WebAsm. https://github.com/kripken/emscripten/wiki/WebAssembly

I hooked up my other TB drives, encrypted a partition on one of them and started copying things over. I detected a potential issue through SMART unfortunately. I need to watch that drive to see if it's a real failure or just a false positive.

Thursday, March 17, 2016

Security system update

Of course I couldn't leave Rootcrit in the state it is right now. I have openpgp.js loaded finally. I may make a requirejs Mojolicious skeleton available, to make everyone's life easier in the future.

Anyway, I'm generating a keypair in the browser. Very nifty. This could be a service all on its own, actually. It can be integrated into a public keyserver.

Next up, I'll see about 'uploading' a private key to the javascript itself and then trying to decrypt the incident image data and display it to the user in place.

Wednesday, March 16, 2016

Security system update

I just couldn't let the issue with Rootcrit go, so I did some debugging via carton on Mojolicious::Static. I discovered that it was a misunderstanding on my part. The documentation could be a little clearer on this one. When I access "localhost/public/x" it then tries to look in "/home/user/whatever/public/public/x" or in other words, I needed to omit "/public" from my script link. So, I can now move ahead with openpgp.js.

Tuesday, March 15, 2016

Progress on the security system

My plan was to add OpenPGP.js to the Rootcrit system, but unfortunately, I can't seem to get Mojolicious to serve static files no matter what I do. I'm not sure if it's a chmod issue or what. I can clearly see that it's listed in the static files. I may seek help on StackOverflow for the mojolicious issue.

Instead of implementing the solution for Rootcrit, I'm moving ahead with working in Ruby on Rails. This means creating a few different small test case applications, working through railstutorial etc. before tackling the main event.

Sunday, January 17, 2016

Is someone stealing your wifi? Detect it with this script

I wrote a small Ruby script to detect new mac addresses (roughly equivalent to detecting a new device) on your wireless network. It allows you, via gmail, to receive an alert when a new device is detected on the network, which could mean you have a compromised network.

Here's the gist: https://gist.github.com/beta0x64/afbc46ba7b173f4411ca