Blog The life and ramblings of just another data scientist.

My New High Frequency Vertical Antenna

For several years now I wanted to replace my older High Frequency antenna which had partially fallen down; it was a G5RV Jr. However it never really worked right; it used a metal mast which had detuned the antenna and after about a year it started to fall down and became completely inoperative anyway. Throughout the years it got me some DX, but overall it really never performed that well.

I am in a rather unique situation when it comes to antenna options. I live in south Philadelphia; that means there aren't many sky-scrappers immediately around my house, however, I am surrounded by a sea of row homes as far as the eye can see. Since a tower of any reasonable size is clearly off limits that meant my backyard wouldn't be a particularly useful place for an antenna. That left me with just one option, my roof. This of course has the advantage of being 25 feet off the ground and giving me a reasonably decent view of the horizon. Of course it also has the disadvantage of having very little room to work with.

In the end a vertical type antenna, with coil traps to make the size manageable, was selected; Specifically the Hustler BTV-6 antenna which is designed to work everything from 80m to 6m. A balanced dipole type antenna wouldn't work too well since I would have had very little control over the takeoff angle since the ground plane for such an antenna would be 25 feet down, and through my house. That meant a dipole type balanced antenna would be very hard to configure effectively. With a Vertical type antenna, however, the radials act as the ground plane, so seemed like a far better choice.

One other advantage to using the roof is that the distance to run the coaxial feed line from the radio to the antenna is very short. With only 10 to 15 feet of coax that means feed line loss will be very low even when the Standing Wave Ratio is high. I tried to position the coax on the roof such that the run is as short as possible. This should help prevent common mode current which could occur if the shielding of the coax becomes inductively coupled with active element of the antenna. Since the coax is significantly shorter than the wavelength being transmitted this effect should be minimized. Of course when putting a vertical in a yard you can actually dig a trench for the feed line placing it beneath the radials. Since this wasn't an option in my setup it became critical to keep the coax line as short as possible.

Here are some pictures of the newly installed antenna including all the radials.

Hustler BTV-6 Active Element Hustler BTV-6 Base Radials Towards Front of House Radials Towards Back of House

As you can see in the last picture the antenna occasionally made contact with the metal mast which supported it. When this happened it would create a short to ground and completely detune the antenna. As such I added some insulating foam to the supporting mast to ensure it wouldn't be able to make conductive contact with the antenna.

Mast Insulated

Finally to top everything off I added a new 8 foot by 5/8 inch ground rod to the system. For that I chipped a hole in the cement in my back yard and hammered it into the ground just outside the radio shack's window. I then attached a ground clamp to it and ran some solid bare copper wire (4 AWG) to the window on the second floor.

Ground Rod Groudn Rod Wide Angle

For now I have the coax and grounding cable coming directly through an open window. But I have a window panel to be installed to fix that. The ground cable must be connected with the house's electrical ground or else dangerous ground loops can occur; this connection was made in the shack and an additional connection will be added in the basement to ensure it is up to electrical code. Inside the shack at the window I installed an automatic remote tuner. The ground wire connects to the Tuner as well as running to a junction box which connects together all the radio equipment in the shack.

Remote Tuner

Ground Junction

It is important you use a grounding junction such as the one above rather than daisy chaining your ground together between devices. This ensures that even if one connection becomes loose all the others still maintain their connection to ground.

By having additional paths to ground it reduces the impedance as well as resistance for the path from the radio and antenna to the ground rod. This can and has had a noticeable effect on reducing unwanted effects and RF Interference.

And finally a picture of the entire shack just for completeness.

HAM Radio Shack

The Ultimate Ethereum Mining Rig

As many of you know for many years now I've invested in, and had an interest in, cryptocurrency. However until now I never owned a mining rig simply because it didn't seem profitable enough to be worth the trouble. However recently a few things changed; first, with Ethereum entering the scene it became a profitable endeavor with a ROI that would exceed the initial investment in less than a year. So after running all the numbers to make sure it was profitable, and testing it out on genesis-mining.com to see some cash flow first, I decided to give in and invest in a top of the line mining rig. Since I also do a lot of R&D in Machine Learning and Parallel Processing I figured it could double as a useful tool for my day job, one that will pay for itself when not actively being used. Really in many ways it is a win-win proposition.

Like so many other things I get into I had to take my endeavor to the extreme. I wanted the best, most profitable, mining rig I could build; something that would be equally powerful for my professional endeavors as well. This meant top of the line AMD OpenCL compatible GPUs with a significant number of cores, memory, and memory bandwidth. Of course I also needed to figure out how to accommodate four double-wide graphics cards on any normal motherboard. I spent about 2 days surfing NewEgg.com and Amazon.com and finally arrived at all the parts to build this beautiful mining rig.

Front View of Rig

Side View of Rig

UPDATE: Added some velcro to secure that 4th card. Looks much better now and is a bit safer than before.

Velcro used to fix the 4th card (light)

Velcro used to fix the 4th card (dark)

The specifications are as follows:

4x Radeon R9 Fury X Graphics Cards
1x AMD FX 4350 Unlocked Quad Core Processor (4.2 Ghz)
1x Corsair RM Series, RM1000, 1000 Watt PSU
1x Thermaltake CORE P5 ATX Open Frame Case
1x ASUS Crosshair V Formula-Z Motherboard
4x Kingston HyperX FURY 4GB 1600MHz DDR3 Memory
1x Samsung 850 EVO 120GB SATA III SSD Harddrive
4x PCI-e X16 Reisers

In the end once it was all setup and configured this beast produced an impressive hash rate.

111,149,056 hashes per second (111 MH/s)

With current network parameters; that means I mine about one block each day at about 5 ETH per block. Market prices fluctuate wildly so by the time you read this these numbers may change, but that is somewhere on the order of about 10$ per day. So the cost invested to build the computer should pay for itself in about a year assuming there aren't any significant changes to the network in that time. Not too shabby.

Roadblocks

It took me about 2 days to fully assemble the box and get it to the point where it was mining Ethereum. I am an Arch Linux fan so most of that time I spent trying to get it to run under Arch Linux. While normally Arch Linux is a pleasure to work with, no matter what I tried i found it impossible to get it to get the C++ Ethereum client to mine successfully. There were a slew of problems, with xorg-server being the wrong version as a dependency, and OpenCL throwing segfaults complaining "PPLib wasn't enabled". In the end I gave up and moved to Ubuntu. While I'm not usually a huge Ubuntu fan for day-to-day stuff, in this case it really did make the setup much easier.

Once Ubuntu was freshly installed on the system I just had to add a few repositories and install a few packages. I found a tutorial which described the process pretty accurately. Only difference was I didn't find i had to install AMD-APP-SDK or the C++ Ethereum code manually, all these were available precompiled in the repositories so I just installed them with apt-get.

One thing did perplex me though; anytime I tried to run the miner using the eth command as described in the tutorial it would run for a minute and then abort claiming it was "killed" without any details. After racking my head for hours I found that if i ran it with the ethmine command instead it ran successfully. Here are the commands I ran to get the miner going.

geth --rpc --rpccorsdomain localhost &
ethmine -G

Tweaking

Never content to just leave things as they are, I wanted to try to find ways to tweak the settings to boost performance slightly. While I wouldn't be willing to run a custom kernel, since security is still a major concern, that left me mostly with just the ethmine settings with which to tweak. Two settings in particular struck me as useful, as they effected how much work is sent to the GPU at one time. These were --cl-local-work and --cl-global-work. Knowing I had a top of the line GPU I figured boosting these values a bit might increase performance. Indeed they did, but I had to play with a lot of different numbers to get the benchmarks to max out. Finally the max hash rate I mentioned above of 111,149,056 hashes per second (111 MH/s) was achieved with the following command. This was about a 10% improvement over the default settings.

ethmine -G --cl-local-work 256 --cl-global-work 8192

I tried enabling the CPU too with --enable-opencl-cpu however that produced a segfault. So I left it out.

Conclusions

With an ROI that pays for itself in under a year, and the future usefulness of such a rig, it is really a no brainer for me to have set this up. It was also a lot of fun, and profitable. Though I think a cost-analysis might be useful to compare different rigs and hash rates to ultimately figure out what is the cheapest rig for the output it produces. Sadly I don't have the information on other rigs to be able to do this, nor do I have the time. Also it should be noted that while this rig works really well for Ethereum it would be far less effective on other cryptocurrency where the memory bandwidth isn't as critical; so don't expect it to be the ultimate rig for all cryptocurrency mining needs.

I hope that helps you guys in setting up your own mining rigs, happy mining!

Updates

turns out the power supply is under-powered for the system. I advice upgrading to something with a bit more power, next model up should do it.

Clones

Since I've posted this article there have been a few clones of the miner. I will add names and pictures here. The following is from Rolf Versluis rolfv@prioritycue.org:

Rolf's Ethereum Miner

Easy to Remember, Secure, Passwords

A few years back XKCD, as it so often does, got me thinking; this time about my choice of passwords. Up until that point I had always seen it as an intellectual challenge to memorize long random passwords for all my logins; usually 16 random characters, numbers, and symbols. But I've since learned that it is easier, and more importantly, more secure, to pick easy to memorize passwords. But how can we do this and still ensure the password is actually secure, it seemed a more in-depth analysis was in order.

XKCD: Password Strength

Picking a Secure Password

The first thing we need to break down is the bits of entropy mentioned in the original XKCD comic; what is that all about? Simply put if i had a password that was a single bit long it would basically be either a 1 or a 0, therefore it has a single bit of entropy. This means there are only 2 possible passwords, and as such it would be extremely easy to guess. However when we evaluate words, instead of letters or numbers, we have to ask "how many possible words are there?". If we were truly picking from every single word in the English language this would be huge; there are tens or even hundreds of thousands of words in the English language. However in reality your vocabulary probably isn't quite so comprehensive, and even if it were it might be hard to remember a password like this one.

Pseudoturbinal_Huswifery_Climbable_Eburin

Instead we want to choose a more limited, and easier to remember, vocabulary from which to generate our passwords. Similarly if we want to calculate the difficulty in hacking a password, via a brute force attack, we should recognize the possible vocabulary we want to target. For example if I chose to write a script to hack your account, and the script tries every possible combination of the 200 most common vocabulary words in various sequences, then it will eventually hack your account; it is just a question of how long it would take.

Lets run those numbers and see what we get. How long would it take to hack your password if you picked 4 words from the 200 most common English words, assuming the script used to hack the account could make 1000 guesses per second.


\\(200^4 = 1,600,000,000\\) possible passwords

\(\frac{1,600,000,000}{1,000} = 1,600,000\) seconds

\(\frac{1,600,000}{60} = 26,667\) minutes

\(\frac{26,667}{60} = 444\) hours

\(\frac{444}{24} = 18.5\) days


For fun we can also figure out how many bits of entropy that represents.
\\(1,600,000,000 = 2^n\\)

\(n = \frac{log(1,600,000,000)}{log(2)}\)

\(n \approx 30.575\)


Of course we can't have a fraction of a bit, so we round n up to the nearest whole number indicating that the current password scheme would give us exactly 31 bits of entropy.

It is clear from the math above that there are 1,600,000,000 possible passwords that can be created when using 200 of the most common English words combined in any combination of 4 words. If we can try each possible combination at a rate of 1,000 per second then it would only take 18.5 days to determine the password. In reality this is doable on a basic desktop computer, and could be hacked in a much shorter time on a Mainframe computer. Clearly that won't do.

If we truly want a secure password we are going to have to increase the number of bits of entropy, but hopefully without making the password significantly more difficult to remember. One way we can do that, as we already discussed, is simply by increasing the vocabulary used to generate your password. Lets try it with a vocabulary of 5,000 words.


\\({5,000}^{4} \approx 6.25 \cdot {10}^{14}\\) possible passwords

\(\frac{6.25 \cdot {10}^{14}}{1,000} \approx 6.25 \cdot {10}^{11}\) seconds

\(\frac{6.25 \cdot {10}^{11}}{60} \approx 1.041 \cdot {10}^{10}\) minutes

\(\frac{1.041 \cdot {10}^{10}}{60} \approx 1.736 \cdot {10}^{8}\) hours

\(\frac{1.736 \cdot {10}^{8}}{24} \approx 7.233 \cdot {10}^{6}\) days

\(\frac{7.233 \cdot {10}^{6}}{365} \approx 19,818.61\) Years


and the entropy...
\\(6.25 \cdot {10}^{14} = 2^n\\)

\(n = \frac{log(6.25 \cdot {10}^{14})}{log(2)}\)

\(n \approx 49.151\)


Well that looks much better. Now we have 50 bits of entropy which would take about 19,818.61 years at 1,000 tries per second to figure out your password. That is probably secure enough, however a Mainframe could probably still crack it in under a year. But unless the CIA is trying to get into your account, you are most likely safe if you wanted to stop there. For reference check out this site for a list of the 5,000 most common words in the English language. You can even use this list to generate your password by picking words from the list at random.

Still I am left wondering if there are any other simple steps we can take to increase the security without sacrificing anything. One thing you can do is add one more word into the mix that is not in the list of 5,000 most common English words, but still easy to remember; even better if the word is entirely unique. Some good examples might be a friend's nick name, an uncommon last name of a friend, or a proper noun of an obscure person, place, or thing; a good example would be a character from a little known book or play. This would expand the vocabulary needed to hack the account well beyond the 5,000 word vocabulary and as such would significantly increase the Security of the chosen password.

Make It Easy to Remember

Now that we know how to pick a secure password it still may not be terribly easy for you to remember. One trick you can use to get around that is to make your passwords into sentences that are easier to remember, but obscure enough that it isnt easy for a computer to guess. The following are a few examples.

SunDestroysVirginFlowers
AppleHurtsBabyTongue
LispKillsNewDevelopersJoy

To make it even easier to remember you can pick passwords which might remind you of the topic of the website it is to be used on. For example the first password of "SunDestroysVirginFlowers" might be the perfect password to use on a website for gardening. It may also help to remember if you make the sentence structure the same for every password. Here are some examples all using the same sentence structure.

HelpCatsWantLove
AdoptABabyINeedCompany
MakeJuiceQuenchThirst

In all these cases we have a verb, followed by a noun, followed by the reason the action was taken. By following a consistent structure your brain will have more clues to remember the password and thus will make remembering it much easier. Also you will notice I capitalized the first letter of each word, one variant that is slightly more obscure is to pick some other pattern of capitalization. You could pick the last letter of every word, or even the second letter, just be consistent with all your passwords so it is easier to remember.

Make Sure It Can Be Used

The only other consideration is to make sure the password can actually be used on the desired site. Also if you tend to reuse passwords, which isn't the best of ideas, then you want to make sure the password will be accepted by most websites. Since websites have some rules to make sure a password is acceptable we should pick a password that can pass most of these rules. Usually you are covered if your password has at least one of each of the following: capital letter, lower case letter, digit, and symbol. We already covered the capitalization, so all we need to throw into the mix are some digits and punctuation. Punctuation is easy, since we are already using sentence-like structures we can just throw in some punctuation.

Help!CatsWantLove.
AdoptABaby.INeedCompany.
MakeJuice,QuenchThirst!

Digits are a little more difficult. You have two options; the first is to replace letters with a number that looks similar to the letter being replaced.

3 -> B
1 -> I
7 -> T

The other option is to use the number to represent a word that has the same sound.

2 -> to, too
4 -> for
6 -> sex
8 -> ate

The key here, again, is to be consistent so you don't get confused. So for example if you choose to replace the letter with the number it looks like, make sure you replace the same letter with the same number in all your passwords. This way you don't need to remember what pattern you used on a case by case basis. It is important to note if you use the number to represent an entire word it should not replace one of the four typed words chosen earlier but rather should be in addition to it. This ensures you don't reduce the overall entropy of your password.

In the end you should wind up with some passwords like the following:

Help!Cats8AllTheFood!
AdoptABaby.No64Me.
MakeJuice4Tolkein!

Conclusions

It should be clear now that it is trivial to create easy to remember passwords that are also secure.The only other thing I'd suggest is to keep the number of passwords you need to memorize to a minimum. Use a secure password store like LastPass to store all your passwords and instead only memorize a master password for encrypting your LastPass vault. This way you can make sure your master password is secure and you only need to remember one password. I like to have about 5 or 6 passwords I memorize for all my high security stuff like root login, LastPass, or encryption keys, and then keep the rest stored in LastPass. Any password which I rely on LastPass to store I won't need to memorize so they are psudorandom strings.

I hope that helps. Stay safe everyone.

Holy Guardian Angel

Giving part of one's self so another can thrive,
no greater a gift could I ever contrive.
Thus my soul I do give to your worthy embrace,
to an endless quest, for your fears to displace.
Oh!
To give you a world where your happiness thrives,
that fate I shall seek through both of our lives.

For once the great goal is no longer self pride,
the entire vast universe does stand by our side.
Not a fault can we have that we don't overcome,
the whole of our parts is the lesser to our sum.
Ah!
To make us a life where our true selves do reign,
what a glorious cause I shall never need feign.

So here we do stand with our flaws to be seen;
the trust in each other does wash it all clean.
My love for myself is my love for you too,
for your love is my love, we both can imbue.
See!
I need naught from you, for its part of myself,
and to give from that part only strengthens ourself.

But what if the chaos does haunt us one night?
Our blessed holy guards will then give us true sight.
For chaos is born of illusion's worst fear,
be true to ourselves so it shall never be near.
Eh.
The storm was a dream, not a thing to contend,
I have found us clear skies that never will end.

If the body only gives what it will there receive,
then the mind will be hollow with no hope to relieve.
Thus I use all I have just to light up your eyes,
because I wish you to live, to reach past compromise.
So!
To bring you to life is all I ever did want,
your soul just to smile, not a trophy to flaunt.

Take all that I give, because you give it to me,
since two are the one it brings both of us glee.
Consume all my love, never fear you'll do pain,
for truth of one's self is never heart's bane.
Ah-ha!
The key to our world is the truth held inside,
So forever will I seek ourselves to confide.

--Jeffrey Phillips Freeman

A poem I wrote inspired by Amanda. She has really opened up with me lately, and me to her. I'm glad I get to talk to her as often as I do, she inspires great poems. So this poem talks about finding ones "Holy Guardian Angel" or in occult terms "one's true self". The conversations is directed both at Amanda, and at my HGA simultaneously.

Initiation

There in the living wood,
I found the moon,
and she gave herself to me.

She is mine,
though not to be owned.
Sitting high in the heavens,
radiating her grace for all to love.
Though still all the more mine.

All I knew was emptiness,
knowing of nothing,
blind to my existence.
Never seeing color.
Never seeing white, nor black.

Then,
there in the heavens,
there she hung,
the newborn moon.
Born to an endless darkness,
my world was given contrast.
Where once there was nothing
now lay mysterious shadows,
hinting at distant memories.
Her beauty crisp and clear,
merely a sliver,
a faint whisper,
a hint of her full glory,
yet glowing brightly.

She taught me.
Taught me shapes, lines, form.
Taught me light and dark.
She gave me a world beyond myself.
Gave me a reason to open my eyes.
A reason to be alive.

But her radiance grew,
and the stars themselves did envy her.
Yet she gave of herself freely,
turning envy to love.
So that they did dance,
the stars with the moon,
happily overhead,
for all to see.

And as blissful love shined down,
a pale blue earth was brought to my eyes,
giving my world substance.
Once all that was real hung distantly out of reach,
yet now it surrounds me,
giving me purpose,
revealing the depth of my kingdom.

In every crack there I find her,
reminding me she will always be there,
always sharing herself,
always lighting my path,
never letting go.

And though her light may wane,
it is never extinguished.
For all I need do is look to her,
and she will wax full again.

I no longer fear the night,
because the moon is mine.

--Jeffrey Phillips Freeman

This is a poem I just wrote about Amanda. I was feeling inspired and only wrote it over about 15 minutes. But I'm just glad poetry is coming so easy to me lately! I will be curious to hear what people think of it.