Wednesday, September 29, 2021

 So this blog is and has been long since abandoned a number of things have shifted and changed in my life but my core idea that I want to learn everything hasn't really changed so I am going to continue posting here. 

I don't really see that many blogs anymore so perhaps this can be my little platform shouting into the wind. I do want to try and track some of what I am thinking and doing in hopes that it will be useful to others. 


I have been reading quite a bit a material on memory and how to more effectively use memory. I have been impressed fora number of years with the effectiveness of anki and skritter for learning all sorts of things(chinese specifically for skritter) and it always has impressed me that more effective and efficient learning doesn't have to be and often isn't harder. 


Many years ago as a young missionary in the MTC I wanted to learn bo-po-mo-fo(zhuyin) because we had some resources and vocabularly manuals that had zhuyin but not pinyin. (For those unware zhuyin and pinyin are ways of representating pronouciation of chinese characters, zhuyin primarily used in Taiwan and pinyin used elsewhere). At the time I believed I was very smart(since learned better) and I had always scoffed at the idea of using mnemonic devices in order to help  learn something. I thought I would just do it with raw brainpower and determination. I spent a few days forcing/beating zhuyin into my head and it worked pretty good. 

Several of the other elders were interested and decided to learn zhuyin as well and one elder in particular sat down one afternoon and came up with various hilarious and memorable mnemonics to learn the zhuyin symbols. It took that elder probably 30 minutes to learn the whole set and actually me being there helped solidify my own grasp of zhuyin. It was a stark lesson to me that I was being dumb and doing things the dumb way didn't prove I was smarter. Finding an efficient way to learn (especially if quirky or silly) is the smart way because you get to learn more things for far less effort. Elder Zappe not sure if you remember that day the same way I do but it sure taught me a lesson. 

Since then I have used anki and other tools but I do find I often scoff at mnemonics, which is a habit I still try and break. 

I ahve been reading alot over at https://mullenmemory.com/memory-palace-step-up mullen memory about memory palaces. I have been familiar with the concept for many years(remember reading on the old mentat wiki that I think doesn't exist anymore) but I haven't used the technice(oops like liek an old copy is mirrored here https://www.ludism.org/mentat/HomePage). 

There are a number of similiar systems but the core concept is doing work ahead of time to build a process so that you can easily and quickly store new things in memory in a way that aids recall. Major systems, various palace approach, peg systems they are all about doing some work ahead of time/leveraging existing memory to store new memories. 

It is interesting it sounds very much like proficiency in most tasks. As a user gains proficiency they start thinking in large chunks because they have the basic items so well understood they use them as building blocks to udnerstand and perform more complicated things. In go for example you can often seen many moves ahead because you reconize certain existing patterns that you are already quite familiar with. Trivial example is a ladder where a new player needs only a bit of experience to start to be able to see and understand basic ladders. 

To that end I want to 
1. Build a system based on the chinese radicals to help me improve my writing of chinese characters. Ideally this is used to help me transition the material into a long term faster and deeper representation. Studies show method of loci doimprove recall but they also show it is done at a cost of slower recall. If I want to read at 300 cpm I need several things to happen. First I need to be able to recognize every character I read, and second the vast majority of them need to be recognized very very fast. Fortunatly those two goals work together exceptionally well. 

I link out to an interesting page that talks about chinese reading proficiency. https://www.chinesethehardway.com/article/hsk-6-gets-you-halfway/ The core issue is that uncommon characters are very common. What I mean by that is illustrated in that post but I have a quick summary of the idea here. Last harry potter book

《哈利波特与死亡圣器》

CharactersTotalHSK 6%HSK 6
Unique3,2212,24175.16%
All307,817296,07996.19%

If you notice that on a given page hsk 6(probably roughly where I am in reading ability maybe a little lower) would allow to read 96% of the characters on an average page but only 61% of the total unique characters in the book. Those last trailing characters are super expensive to learn because they are rare but there are so many of them that every few sentences I would hit one. 

If I can get the normal characters well entrenched in memory and use a radical based memory system(that might be slower on recall) for the 5% on a page that are rare I think I can potentially really get to the point where I can read without continually missing characters. 




Wednesday, March 26, 2014

Cool statement about vector spaces

I found this cool quote that for now still blows my mind and seems cool although I am sure at a later point I will have a better grasp on things.

"A vector space that does not have a finite basis is called infinite dimensional. This is not an exotic property: many of the most important vector spaces, particularly spaces where the "vectors" are functions are infinite dimensional"

The parts that blew my mind were infinite dimensional not being an exotic property and the concept of functions as vectors. I am sure it will make more sense later.

Fields and Field extensions

huh \(\LaTeX\) what? So I am reading through the section on fields and field extensions but I have to admit it is blowing my mind and I have having a hard time following the signicance of what is going on.

\( x>3 \) One example they give is the extension from \(\mathbb{R}\)(real numbers, I don't have latex setup to do fancy letters here). The polynomial P(x) = x^2 +1 has no real root. The root is i which isn't contained in R. We adjoin i to R and we get a new field C(complex) of the form a+bi with a,b contained in R.

One of the parts that got me(although writing this post is helping me think it through) was the concept of adjoining. I originally assumed that it meant you added that item into the set comprising the field but that doesn't seem to be the case. Adjoining does the funky thing the you see normally with complex numbers. If you adjoin item x, then the field had members of the form a+bx.

Another example is the field Q(rationals) which you can adjoin (2)^1/2 or the square root of 2.

The members of the new field are now of the form a + b*(2)^(1/2).

As a side note that looks really ugly I need to figure how to do nice latex and mathematical symbols on here if I want this to keep dumping funky math on this blog.

Wednesday, March 19, 2014

Chord

So I was just thrown for a loop by the phrase
"the derivative of a function f at a point x is the limit of the
gradients of a sequence of chords of the graph off"

It makes much more sense once I hit wikipedia http://en.wikipedia.org/wiki/Chord_(geometry)

The chord is just the line between two points and the circle and in this case the derivitive at a point is gradient or slope of the line as the chord shortens till that line is ifinetly small and we are essential dealing with a point.

We also see the sequence of chords since this is the derivative of a function rather than a single point.

Makes sense, the vocab though threw me off for a bit.

Safari books online and Math

I have been interested in Safari books online for a number of years. I was first exposed during a summer internship in college. 

I was working remote doing some web development and I came accross a need to use regular expressions. My manager at the time recommeneded "Mastering Regular Expressions" by Friedl and wow that is a good book. I was living with my parents and their local library had a subscription to safari online so that with my library card I was able read this book. After going back to school I spent a number of years as a poor college student and couldn't justify the cost of safari online. 

Fortunately with a job change a few months ago I decided that regular daily investment in technical learning was a critical item in order for me to succeed in my software career.

I signed up and have been using safari online for several months now and find it very useful. In particular I have recently found "The princeton companion to mathematics" is available on safari. 

At my last job at National Instruments there was a strong culture of books group and I was able to attend part of a book group based on the abstract algebra book found here.
http://abstract.ups.edu/download.html

I thoroughly enjoyed it and I hope to deepen and broaden my mathematical knowledge. 

It is kinda funny as a kid I HATED math, it was repetitive and boring. I spent alot of effort(more on this another time) to take calculus in high school solely because it was required for Physics BC and I loved science.

Funny thing happened though. I loved calculus it was the first math course in which I felt that I was  learning things that broadened my mind and helped me understand the world. It wasn't repetitive but based on simple concepts that could be extrapolated to further ideas.

Anyway I want to deeply understand modern mathematics especially so I can help make sure that my children see the beauty of math rather than rote repetition. 

I will try and keep posting things here as I try and work my way through this thick and somewhat intimidating volume.

Tuesday, July 30, 2013

Learning security

Over the past few years I have begin to develop an interest in computer security and cryptography. I am going to attempt to document the process of learning for my benefit and others.

I have several tasks that I am currently working on to help this process.

Matasano crypto exercises- I first hard about this on hacker news and it rocks. I did the first set and a half a couple of months ago and then got rely busy so I haven't been able to make forward progress recently. Was doing them in Google go and that was fun

Enigma group challenges. I am user qianyilong. Currently I am still going through the basic skills ones.

Overthewire.org - I had a good friend who works in web security recommend these to me. Have played with several of them.

Coursera's cryptography 1 course - I am currently going through this but I found the class late and am so far behind that I don't think I can get credit but since I am doing this to learn I am OK with that.

At work a group of guys are doing a cryptography book group. The first half of the group if focusing on the abstract algebra background using the textbook from abstract.ups.edu

I am also following Bruce Schneier's  blog and cryptyo gram monthly email. I read his book applied cryptography cover to cover.

Things I am looking at

I just finished reading the basics of hacking and penetration testing by pat engebretson

I am reading Modern cryptanalysis by Christopher swenson

After reading the book on pen testing I am also looking into exploring
The owasp goat project as a learning opportunity.
Metasploit
Owasp zap
Many other tools that I have seen mentioned. I have created a little virtual machine security lab that I can use to try some of these things out.

So this post was long but this is the initial dump. I hope to update this blog near daily with my current status in learning.

Tuesday, October 16, 2012

他姓巴金斯

Sweet  found a Chinese copy of the hobbit.

Sunday, October 14, 2012

Posting from my tablet

So is mostly just a test to see how easy it is to post from my android. I want to start treating this blog as an opportunity to intellectually stretch myself and updating from my tablet will make it easier I think.

Tuesday, August 16, 2011

Whoa did you know about googleCL

I am posting this post from the command line and we all know everything is cooler when it is from the command line. I wonder if I can do a google plus post from here as well

Saturday, August 13, 2011

So I have to concede a point about python.

I have heard and seen before several people make the case that in a more "powerful" language design patterns mostly disappear, and that use of design patterns show that the language is lacking. I have seen this pop up from paul graham(http://www.paulgraham.com/icad.html) or I think I saw a video from on of the google go guys putting forth the same idea.

For the most part I always thought that while there might be some truth it is mostly a conceit and favoritism for one's favorite language. Well now is that part where I swallow my pride and say that just isn't true.(Not really surprising most of my ideas eventually turn out wrong. :))

So as mentioned before I am hoping to play with the class at ai-class.com, Well I ordered the book and I was cruising through some of the code examples(python, I am sure lisp is more enlightening but my mind is not ready to be blown that much, plus I don't have too much time to pick up another language just right now) and I saw the neatest bit of code.

It was in some of the chapter 2 examples http://aima-python.googlecode.com/svn/trunk/agents.py

I shrunk down the code and modified to look and play with the feature that I thought was cool. Now keep in mind you crazy pythonistas I am not a long term python user so this is probably run of the mill to you. any way

class Agent ():

    def __init__(self):
        self.alive = True
        self.bump = False

    def make_agent_program (self):
       print ('Unmodified agent')

    def can_grab (self, obj):
        """Returns True if this agent can grab this object.
        Override for appropriate subclasses of Agent and Object."""
        return False
    
def TraceAgent(agent):
    """Wrap the agent's program to print its input and output. This will let
    you see what the agent is doing in the environment."""
    old_program = agent.make_agent_program
    def make_agent_program():
       print ('modifiesds'  )
       old_program()
    agent.make_agent_program = make_agent_program
    return agent

funk = Agent()
funk.make_agent_program() # prints 'Unmodified agent'
TraceAgent(funk)
funk.make_agent_program()  # prints 'modifiesds\n' + 'Unmodified agent'


Ok so it is kinda like a decorator pattern or something similar but you did it without modifying the original at all!!! I mean I have done a couple of similar things in c++ but you either have to do it with inheritance(and create the object as the child object to begin with) or add a visitor method or something to make it extensible. It is much more painful than doing this. All I can say is download python fire it up and type "import antigravity". Python will even let you fly!!! ;)

Saturday, August 6, 2011

Self-Study classes

So for a while now I have had quite the list of MIT OCW http://ocw.mit.edu/index.htm courses that I have been interested in taking. I have the list saved off under google tasks in a someday list, but someday hasn't seemed to come. I have used and made come progress on the signal processing class http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-011-introduction-to-communication-control-and-signal-processing-spring-2010/ but I have never been motivated enough to keep going. It takes quite a bit of self-control and drive to learn to get through a course like that. I have done something similiar a few times in the past. In high school I wanted to take Physics BC my senior year but that required concurrent enrollment in Calc BC and I where I was I would only take Pre-Calc my senior year. So after my freshman year of high school(I had planned ahead quite a bit) I checkout out a geometry book from the school district and studied all summer, in an attempt to test out of geometry and get ahead that year in math.

Well it turns out to test for advancement you have to score a 90 or above on the test( as opposed to credit, which is where you took the class but failed it and are trying not to take it again). Well you might guess but I earned an 89 on that test. :( although that did mean that math class that year was exceptionally easy. It was a good thing as I enjoyed doing the proofs which is where I had lacked the most in learning it myself. Well the next summer I did a correspondance course for Algebra II, and this time I got credit and was able to get into the math cna physics classes I wanted. I also skipped Biology in college, by borrowing a book and studying over a christmas break. When I went to pick up the score I had passed(B-, :( but skipping it let me take one more Chinese class before I graduated), and the lady at the desk had to call someone else to figure out what to do. She had never had someone pass it before, apparently there are many people that try and test out and very few make it.

Anyway the point is I have some idea of the effort needed to learn a subject on your own and it is hard. Well just this week I saw something that really lit a fire for me. I have been thinking recently about learning more about AI(Artificial Intelligence) and NLP(Natural Language Processing) as it combines two on my interests. Computing and linguistics. I love playing with computers every day but I also enjoy learning and speaking Chinese. I haven't been sure how to pursue learning more about these topics until I saw this http://www.ai-class.com/ It is an ai class taught but some of the leaders in the field. Rather than just being an OCW like resource it is an actual class with deadlines and graded assignment. Perfect.

So over the next month or so I will be reviewing my Linear Alg. and Probability. I might even throw in a little bit of lisp or functional programming, and then I will be taking this class. I am hoping to really take advantage of the class and learn the material well, and then I hope to progress in the field and learn more. I think my next post will be some linear Alg. brush up information.

The Polylearner

So I am kinda re-purposing this blog/starting to actually use it. I really love to learn about many different subject but I find that since I am teaching myself it is often hard to retain and really internalize the information. So I am starting the blog so that I can try and take the information I have learned and share with the world. After all the best way to learn is to teach right?

So on that note this blog is more about me and less about you. :) I will try and make the information as clear as possible but my main objective is learning it myself, that also means that it will likely be full of misinformation and flat out wrong things. Sorry.

I may overhaul the blog on a regular basis as I am not sure what the best format to store this/teach information will be. If you(some random person) does find this useful let me know what helps, and what is not helpful and I can try and do more of the former and less of the latter. Oh another thing, I am also trying to improve my writing skills, which are quite poor, so for those grammar/language police out there you are welcome on this blog. Comment and tear things to pieces.

--Danny

Saturday, April 2, 2011

Programming praxis

So I am going to start using this blog as a place to sharpen my programming skills in addition to trying to keep track of my projects. anyway I am using the website http://programmingpraxis.com/ to try and play with python. The problem for today looks rather interesting. http://programmingpraxis.com/2011/04/01/maximum-difference-in-an-array/ and while I haven't actually written any code yet it was an interesting thought exercise. At first I thought of course very simple solution just run through and keep track of the max and min, but of course it is not really that easy. I thought of the case
3236189
When you are iterating along the array and you are at the point of(let () be the current min and [] be the max) and then {} be the item you are looking at)
3(2)3[6]{1}89
At this point you have a 2 as the min and a 6 as the max so your total min-max = 4 and you are looking at the 1 which has the potential to be a better candidate.  However that depends on what comes after, if instead of 89 you had 34 then the 2,6 pair would be the best in the bunch. You need to know(or at least I thought) all of the later items to figure out the current item. So I thought well stink there is no clean solution(even thought the website mentioned that there was) and you are at best O(n^2) but as I thought further I realized that you could easily sort the array O(nln(n)) and then step through the original array and know what the future holds so you could evaluate the pair as you are on that item. That would give you O(nln(n) + n) which is of course O(nln(n) so even if you did a dumb way the did way more work than required you could do better then n^2 so I thought about it some more and I think I found the solution. Just a sec while I go write some code to verify that.

Ok here we go, now keep in mind I am not a python guy so I probably did not do things the python way. Sorry recovering c++ programmer here.
import random

class pair:
 "Storing a pair of values and the magnitude of the difference"
 def __init__(self, minimum, minIndex, maximum, maxIndex):
  self.minimum = minimum
  self.maximum = maximum
  self.minIndex = minIndex
  self.maxIndex = maxIndex

 def magnitude(self):
  return self.maximum - self.minimum

 def updateMax(self, newMaximum, maxIndex):
  if newMaximum > self.maximum:
   self.maximum = newMaximum
   self.maxIndex = maxIndex
 
 def getMin(self):
  return self.minimum

 def getMax(self):
  return self.maximum

 def printResults(self):
  return "The answer is %d at the index of %d with a maximum of %d at the index of %d"  %(self.minimum, self.minIndex,  self.maximum, self.maxIndex)

randList = [] 

for i in range(100):
 randList.append(random.randint(0,100))

current = pair(randList[0], 0, randList[0], 0);
theory = pair(randList[0], 0, randList[0], 0);

for i in range(100):
 current.updateMax(randList[i],i)
 theory.updateMax(randList[i],i)
 if theory.magnitude() > current.magnitude():
  current = theory
 if theory.getMin() > randList[i] :
  theory = pair(randList[i], i, randList[i], i)


print current.printResults()
print theory.printResults()

Programming praxis

So I am going to start using this blog as a place to sharpen my programming skills in addition to trying to keep track of my projects. anyway I am using the website http://programmingpraxis.com/ to try and play with python. The problem for today looks rather interesting. http://programmingpraxis.com/2011/04/01/maximum-difference-in-an-array/ and while I haven't actually written any code yet it was an interesting thought exercise. At first I thought of course very simple solution just run through and keep track of the max and min, but of course it is not really that easy. I thought of the case
3236189
When you are iterating along the array and you are at the point of(let () be the current min and [] be the max) and then {} be the item you are looking at)
3(2)3[6]{1}89
At this point you have a 2 as the min and a 6 as the max so your total min-max = 4 and you are looking at the 1 which has the potential to be a better candidate.  However that depends on what comes after, if instead of 89 you had 34 then the 2,6 pair would be the best in the bunch. You need to know(or at least I thought) all of the later items to figure out the current item. So I thought well stink there is no clean solution(even thought the website mentioned that there was) and you are at best O(n^2) but as I thought further I realized that you could easily sort the array O(nln(n)) and then step through the original array and know what the future holds so you could evaluate the pair as you are on that item. That would give you O(nln(n) + n) which is of course O(nln(n) so even if you did a dumb way the did way more work than required you could do better then n^2 so I thought about it some more and I think I found the solution. Just a sec while I go write some code to verify that.

Ok here we go, now keep in mind I am not a python guy so I probably did not do things the python way. Sorry recovering c++ programmer here.

import random

class pair:
"Storing a pair of values and the magnitude of the difference"
def __init__(self, minimum, minIndex, maximum, maxIndex):
self.minimum = minimum
self.maximum = maximum
self.minIndex = minIndex
self.maxIndex = maxIndex

def magnitude(self):
return self.maximum - self.minimum

def updateMax(self, newMaximum, maxIndex):
if newMaximum > self.maximum:
self.maximum = newMaximum
self.maxIndex = maxIndex

def getMin(self):
return self.minimum

def getMax(self):
return self.maximum

def printResults(self):
return "The answer is %d at the index of %d with a maximum of %d at the index of %d" %(self.minimum, self.minIndex, self.maximum, self.maxIndex)

randList = []

for i in range(100):
randList.append(random.randint(0,100))

current = pair(randList[0], 0, randList[0], 0);
theory = pair(randList[0], 0, randList[0], 0);

for i in range(100):
current.updateMax(randList[i],i)
theory.updateMax(randList[i],i)
if theory.magnitude() > current.magnitude():
current = theory
if theory.getMin() > randList[i] :
theory = pair(randList[i], i, randList[i], i)


print current.printResults()
print theory.printResults()

Thursday, July 16, 2009

Don't you wish it were true

I saw this article http://www.newscientist.com/article/mg20327162.600-apollo-special-welcome-to-lunarville.html?full=true today and wow that would be awesome. I hope that mankind can get it together and get to space quickly. Hopefully all the recent private investment into space travel will got well. good luck to those working on it

Sunday, April 19, 2009

running stuff I found

Here is some new ab stuff
http://www.runnersworld.com/article/0,7120,s6-238-263--13030-3-1X2X3X4-5,00.html

also look up the workout from hell by john long that is awesome for climbing

Well I am starting a new training plan with jenni and we will turn in roaring running climbing beasts

Fun projects that I want to get to

Ham radio transceiver

First make a key
http://www.dxzone.com/cgi-bin/dir/jump2.cgi?ID=20221

finish learning cw with gf40n or aldo

then make a pixie or something similiar

and make an antenna

Read a Jin Yong chinese martials arts novel in chinese
I will need to brush up on some vocab for this one

lead 11a outside
Just get in shape I think I am close