kimira: (Default)
[personal profile] kimira
I'm extra sad about this LJ mandatory-infinite-scroll-on-friendslist thing, because I'd actually been thinking about making a DW suggestion for infinite scroll as an opt-in feature. I was reading about how to implement it, and I really love infinite scrool and would enjoy it greatly on DW, but I know a lot of people hate it and it breaks websites for many, so I thought, well it can be an opt-in suggestion! Or something that only certain styles use, like how some of the infinite-scrolling styles work on tumblr. But now with all this LJ brouhaha I suspect even if it were an opt-in suggestion on DW, people would still vote against it. Alas!

Also on the subject of the LJ thing, I've been poking at the CSS styling for the new page to see how easy it'd be to restyle it to change colors, fonts/font sizes, widths, etc. for people for accessibility purposes. Pretty easy, I think. However, since it can be kind of a pain for folks to customize their own stylish stylesheets, how about some kind of greasemonkey script with a pop-up to set display options? Like the MSPA troll lexical translator used, which has the preference-storing apparently adapted from this script. Something that puts a little button the top or bottom somewhere, so a user can click that and it gives them a pop-up where they can set which things/colors/sizes they want to override. At least it'd make it visually more accessible, and probably there'd be a way to override the infinite scrolling as well? You can still manually go back a page at a time by adding ?skip=20 to the url, and likely the infinite scrolling is just working by loading each of those subsequent pages inside the page anyway. So that's a thought!

That stuff aside, I haven't done any other DW patches in a little while. I'm waiting to see if the ones I still have in the queue will go through or not! Especially the video embedding in comments which I am still really hopeful about. But, another part I haven't done as many DW bugs for a while is because...

---

...I am doing some really cool online computer science classes! :D :D :D

I followed a link the other day to cool free online courses, and discovered that that Harvard CS50 class I followed for a little bit last year is now running online on a new site, edX, so now it's even easier to follow along with it, and problem sets will actually be reviewed and graded, and there's a certificate for successful/satisfactory completion of the course! I was super excited and signed up. So far the material is all stuff I did before (last year), but the next week coming up is Week 3, which is where I left off before. I completed the "regular" version of that problem set, writing programs in C to encrypt/decrypt certain kinds of cyphers, and was working on the "hacker" edition, to write a program to crack MD5 encryption. And I had successfully written one! ...but it was brute force and extremely extremely slow. So I'm hoping to re-tackle that problem and maybe try to improve its performance by having it start with educated guesses like by using a dictionary of words, as well as maybe implementing some kind of threading if I can figure out how to do that? I know/suspect now that they talk about that sometime in the CS50 course, but they hadn't really mentioned how to implement it in C up to where I left off last time. But I think that could be really useful. (Also!! I'm signed up for a course on another site that won't run until 2013, but it's about programming using the GPU, and that's exciting for many reasons of course but also I suspect could be useful in problems like this, ha. I think I remember that the people who built the really fast bruteforce MD5-cracking machine for $10,000 or something used a bunch of GPUs wired together. Parallel processing yay!)

Oh, and last year, I skipped the first CS50 project (using Scratch) because I already knew the basics of programming and was more interesting in getting right to C. Now, since the course is actually graded, I did that project, and it was pretty amusing/interesting: mine is a Brodyquest parody. Mostly what I got out of it was a useful comparison of some of the ways using scripting for animation is useful, and ways it can be annoying. It was great to be able to automate the repetitive motion of the sprite and set that to repeat, but timing things was a huge pain compared to how it'd be if I were working in Premiere and After Effects. I suspect some of these problems might show up in Flash, as well. Oh, which, I started poking around Flash the other day some too, going through parts of a few Lynda tutorials. First was following a really terrible one for a while, but then found a really good one that focuses more on animation, and might try to do that some more one of these days. I had an idea the other day for a fan-project that would probably work best using flash, so that might be cool to try.

Anyway, so I'd signed up for the CS50 course (which had started a few weeks before but didn't have due dates for problem sets so it was easy to catch up), and also two courses that start on November 5th:
-Berkeley CS184.1, Foundations of Computer Graphics, and
-a Stanford Intro Cryptography course on another site

SUPER excited about the graphics course since right now that is my goal of an area to get into. I think that graphics programming would be a really fun field and I would do well at it with a combination of mathematical/artistic/programming skills. (Especially since I have read online that graphics programming is often one of the more mathematically complex areas of computer science, and that sometimes companies like NVIDIA will hire people with math degrees over folks with CS degrees.) The cryptography course would be more for fun, and because I find cryptography interesting. I've heard it's another area of computer science which is more heavily mathematical, but I feel like it would probably be harder for me to find a job in that field that would make me happy. It's very likely there are MORE jobs in that field than graphics programming, but I get the impression a lot of them are for the defense department/NSA/things like that? Not my kettle of fish, so much. Still, I'm excited to learn more about it. I really did love learning the basics and writing my brute-force MD5-cracking program for CS50 last year. (And thinking about ways to improve it by making more educated attempts, though I wasn't able to implement them back then.)

But, after I had caught up on the CS50 course and was waiting for these other ones to start, I got bored. I went on the regular CS50.net website, where they were ahead of the CS50x site by a few weeks, and started working ahead, but I didn't want to get too far ahead or leave myself without anything to do.

There had been another intro CS course listed on the edX site, MIT 6.00, and when I signed up for CS50 I considered signing up for it as well, but it had started even earlier (the beginning of September) and there WERE due dates on the problem sets, and I'd already missed two of them. So I thought, okay, I won't sign up. But then after catching up on CS50 I was hungry for more material, so I looked at the MIT course again and saw that problem sets are only 15% of the total grade, the lowest one is dropped, and the first one wasn't graded. So I only missed two, and one of those will be dropped, so that only docks me 1.7% off my final grade anyway. Thus I caught up on an entire four weeks of the MIT course, lectures and graded finger exercises and problem sets, in less than three days, haha. AND THIS COURSE IS AMAZING, WOW. I love CS50 as well but the MIT course is definitely my favorite. Especially all of the MATH. Gosh. (I think I must have been going into math withdrawal again lately. I watched a ton of vihart videos I'd missed a day or two again, and then made myself a bunch of hexaflexagons, haha.)

---

So, my ABSOLUTE #1 FAVORITE THING that I've learned from the MIT course so far is about WHY certain numbers cannot be stored precisely by the computer. I knew this was a THING, but had never had the WHY explained to me correctly before. I vaguely recall them mentioning inaccuracy in floats to us in my UofM C++ class, and in the Harvard CS50 class, they show a clip from the history channel that gives a shitty explanation that ....kinnnnnnnd of makes sense, but not really??

The history channel explanation goes: Think about the number 1/3. You can't represent this exactly as a decimal number because the 3s trail on forever, 0.3333333... Now think about the number 1/10. Effectively it's the same thing, with the 0s trailing on forever! 0.1000000...! How many 0s do you have before you give up?? Etc.

On the one hand, I was like, ...okay I GUESS. But it didn't really make sense. There's no need for all those 0s after that 1. They're implied, but you don't need them. After all, if that was a problem, then you'd think there'd be no way to store integers either. How could you store the number 4 precisely when it's really 4.000000...? Why not just store 1/10 as an integer 1 and include data about the location of the decimal point if it's some weird specific property that floats are always inaccurate. So, I accepted what I was told, but the explanation of WHY was not convincing.

AND THEN MIT MADE EVERYTHING MAKE SENSE

SOME floating point numbers CAN be stored precisely, and some cannot, and it's because COMPUTERS STORE EVERYTHING IN BINARY, which we knew.

Think about it.

Whatever base you're working in, you're just writing out the coefficients of a series of powers of your base. So 32 in base 10 is just shorthand for 3*10^1 + 2*10^0. The "decimal" point (what would this be called in other bases?? I guess in binary you'd just call it the ...binary point, maybe?) demarcates the space between the powers greater than 0 and those less than 0. So the number 1/10 can be represented precisely in binary because 1/10 = 1*10^-1 = .1 and I had to write something after that b/c of terrible periods being the same as decimal points, ha.

THEREFORE, if you want to represent a number in binary, it CAN be stored precisely in a finite number of binary digits as long as you can multiply that number by some power of 2 and get a whole number. FOR EXAMPLE, the example the MIT video gave was 3/8. 3/8 = .375 in base 10. In binary it's expressed 1*2^-2 + 1*2^-3, or .011 (since 3/8 = 1/4 + 1/8). If for some reason computers all worked in base 3, then it WOULD be possible to represent 1/3 precisely with finite digits, since in base 3 that's the same as .1 (or 1*3^-1).

So in binary, how do we write 1/10? We realize there is no power of 2 we can multiply 1/10 by to get an integer. Because 10 = 2*5, we would need to multiply it by a power of 5 somewhere in there, and powers of 2 and powers of 5 do not overlap.

MY MIND: BLOWN. WHY HAD NO ONE EVER EXPLAINED THIS PROPERLY BEFORE. I'd never even thought about writing non-whole numbers in other base systems, but of course it had to be possible, and work the same way as base 10! WOW MIT 6.00X YOU ARE THE BEST.

And then I proceeded to tell absolutely every person I talked to in the days after learning this about it. No joke. All of my housemates, everyone I talked to on IM, and both my parents on the phone, ha.

Other things that had been briefly/vaguely mentioned in my crappy UofM C++ course or other things I'd encountered that I never understood before this but now do thanks to the MIT course: turing completeness and what it means + how this relates to a turing machine, big O notation (more awesomely fun mathy stuff yes!!!), and the concept of mutability.

Best new things I've learned from CS50 so far are probably about compilers and libraries and how they work. I really have been getting more and more retroactively annoyed at how crappy my UofM Intro CS class using C++ was compared to both the Harvard and MIT courses. We used libraries and compilers (obviously), but neither of them were EVER explained. It was just like, "if you want to use this function, make sure you write this at the top" and "before you can run your code you have to compile it." But WHY. And HOW. I always want to know the whys and hows. I really love that these new courses are giving way more of them to me.

---

Also on that note and these courses, I'm thinking about picking up some computer science books, but I'm torn on what to get.

Dreamwidth has that offer that once you have 5 bug patches with them, they'll buy you a book on something (as long as it relates to Dreamwidth somehow), and for that I really want this book on Javascript/PHP/CSS/MySQL. But I have to wait until more of my patches are (hopefully!) approved until I'll qualify for that.

For CS50, they use several C books, none of which are required, and I'm thinking about the Kochan book. The only thing I'm torn about is that apparently the author is writing a new version due out in 2013, so maybe it'd be worth w8ing for an upd8d edition? I might see if I can hunt down or borrow a copy of this book elsewhere and take a look at it first to decide whether I want it now or should wait or what.

The MIT class is using a book written specifically for the course, using Python but also focused on explaining the concepts more generally, not JUST acting as a "learn how to program in Python" book. The lectures seem to follow its material pretty exactly so I am really thinking about getting it. There's a digital version online, though, so maybe I will save my cash. I do like having a nice physical book, though. (Also, my parents have offered that since I am unemployed still and my medical bills from trying to manage my worsening disability are eating up all of my cash, they might spot me on some books or things like that.)

I did some searching on other types of books to see what other things I might be interested in, and came up with the following atm:

For graphics stuff:
-Mathematics for 3D Game Programming and Computer Graphics. I do love me some math.
-3D Computer Graphics. People said that it wasn't gr8 for beginners, but hopefully that one graphics course on edX will get me going, plus, they mention that if you don't know linear algebra it can be overwhelming, and hahahahaha. :'D (I am the opposite of so many people on the MIT course's discussion forums who want less math, because the math is p much always what I get MOST excited about.)
-OpenGL Shading Language orange reference book. The graphics course mentions both this and the "red book" as required, but reviews of the red book all seem to say it is terrible and out-of-date. People seem to like this one, though. Hopefully there are good online references somewhere for the material the red book does not cover sufficiently.
-Multidimensional Signal, Image, and Video Processing and Coding. Maybe more on the side of codecs, and since I'm not really sure if 3D stuff is really gonna be my bag or if I'll want to do something else, I'd love to pick up material like this as well. Plus, I definitely want to learn more about codecs anyway. Maybe I should pick up another pick on information theory one of these days as well to refresh that stuff. I only read a little about that before. Anywho, this book is not an introductory text, so I might need one of those as well. Or possibly could try to jump right in and hope I can find relevant background info online? Hmmm.

Non-graphics-specific stuff:
-Oh, I found a TON of ppl's lists about general computer science books all CS people everywhere should read, and it's hard to pick when I haven't even looked at any of these and I still definitely lack experience in most areas, but three I've put on my wishlist for the moment are:
-Code Complete (McConnell)
-Introduction to Algorithms (Cormen)
-and SICP (Abelson)

But I think all of those could wait until I at least get a bit more intro/re-intro things under my belt, like by completing the Harvard and MIT courses.

---

My parents have been encouraging me to consider applying to master's programs again, and I have definitely been considering it, though I am still particularly overwhelmed by disability concerns. Just like with job applications, it is hard to motivate myself to apply to schools when I am physically unable to travel or leave my house, and can't conceive of how I'd even attend a physical school or job if I got/got into one. :-/ But I may try doing more research on grad programs anyway.

Also on that subject (health), I finally got through to the pain center (since they never called me after receiving my referral, and didn't return my call the other day either) and have an appointment on November 20th. Sigh. Waiting.

Date: 2012-10-31 01:15 am (UTC)
lienne: A happy, whirring cartoon chainsaw. (emotion: gleeful (perhaps deranged))
From: [personal profile] lienne
Other direction entirely! They're theoretical basics, not implementation basics. :D So f'rex, it takes fifty lines of code in Scheme to define a self-interpreting interpreter - a function that takes code as input and executes the code, which if given itself can execute itself. That means it is also possible to fairly cheaply implement any other language in Scheme - one of the group options for the final project in the course was to implement a simplified Python. :D

(For a long time, my internal metric for how awesome Scheme is was "you can do anything you want to in Scheme, except pointer arithmetic". Then it turned out that, like everything else under the sun, there's a Scheme library for pointer arithmetic. This shit is fucking witchcraft, it's glorious.)

November 2012

S M T W T F S
    123
45678910
1112 131415 1617
18192021222324
252627282930 

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 9th, 2025 06:48 am
Powered by Dreamwidth Studios