I got the wireless working on a MacBook Pro (running Ubuntu) by doing the following:
$ sudo apt-get install b43-fwcutter firmware-b43-installer
$ sudo dpkg-reconfigure firmware-b43-installer
No chroot environment found. Starting normal installation
Unsupported device(s) found: PCI id 14e4:4331
Aborting.
$ sudo modprobe b43
$ export FIRMWARE_INSTALL_DIR="/lib/firmware"
$ wget http://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2 ; tar -xjf broadcom-wl-5.100.138.tar.bz2
$ sudo b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" broadcom-wl-5.100.138/linux/wl_apsta.o
$ dmesg | tail -2
[ 3210.680280] b43-phy0: Loading firmware version 666.2 (2011-02-23 01:15:07)
[ 3210.741402] ADDRCONF(NETDEV_UP): wlan0: link is not ready
Enable/Disable wireless in NetworkManager, and it works like a charm.
I had a need for a bare-metal sh-elf build of GCC, and since I'm using Ubuntu now I wanted to do it the Debian way. Granted, I like Gentoo's crossdev build process much better. The compiler generated by this process will be named sh-elf-gcc instead of sh4-linux-gnu-gcc with my patch referenced below. Without further ado, here are the steps I followed.
1. Install deps and source packages tim@zemus ~/gcc-cross $ sudo apt-get build-dep gcc-4.5 binutils
tim@zemus ~/gcc-cross $ sudo apt-get install dpkg-cross fakeroot
tim@zemus ~/gcc-cross $ sudo apt-get source binutils gcc-4.5 2. Build binutils, and add the linker scripts to the generated package tim@zemus ~/gcc-cross/binutils $ TARGET=sh-elf dpkg-buildpackage -b -uc -us
tim@zemus ~/gcc-cross/binutils $ mkdir -p debian/binutils-sh-elf/usr/sh-elf/lib ; cd debian/binutils-sh-elf/usr/sh-elf/lib
tim@zemus ~/gcc-cross/binutils/debian/binutils-sh-elf/usr/sh-elf/lib $ cp -rf ../../../../../builddir-sh-elf/ld/ldscripts . ; chmod -R 0755 ldscripts
tim@zemus ~/gcc-cross/binutils/debian/binutils-sh-elf/usr/sh-elf/lib $ cd ../../../..
tim@zemus ~/gcc-cross/binutils/debian $ dpkg-deb --build binutils-sh-elf ; mv binutils-sh-elf.deb ../../binutils-sh-elf*.deb ; cd ../..
3. Install binutils tim@zemus ~/gcc-cross/binutils $ cd .. ; sudo dpkg -i binutils-sh-elf_*.deb 4. Build GCC (Stage 1) (with my patch found in Launchpad Bug #841475) tim@zemus ~/gcc-cross/gcc $ patch -p0 < ../gcc-4.5-debian-rules.patch
tim@zemus ~/gcc-cross/gcc $ export GCC_TARGET=sh4 ; export DEB_TARGET_GNU_TYPE=sh-elf ; debian/rules control
tim@zemus ~/gcc-cross/gcc $ DEB_STAGE=stage1 dpkg-buildpackage -B -uc -us -d 5. Remove dependency on libgcc1-sh4-cross, and repack the .deb tim@zemus ~/gcc-cross/gcc $ cd debian/gcc-4.5-sh-elf/DEBIAN ; sed -e 's/libgcc1-sh4-cross[^,]*,\s//g' control > control.new ; mv control.new control
tim@zemus ~/gcc-cross/gcc/debian/gcc-4.5-sh-elf/DEBIAN $ cd ../..
tim@zemus ~/gcc-cross/gcc/debian $ dpkg-deb --build gcc-4.5-sh-elf ; mv gcc-4.5-sh-elf.deb ../../gcc-4.5-sh-elf*.deb ; cd ../.. 6. Install GCC tim@zemus ~/gcc-cross $ sudo dpkg -i cpp-4.5-sh-elf_*.deb gcc-4.5-sh-elf_*.deb Be warned: Even though stage1 should generate a static libgcc, this compiler will refuse to link against it. However, as long as your code doesn't depend on libgcc in any way, you should be fine.
I recently solved a painful dilemma with an iPhone 3G. For the fun of it, after installing OpeniBoot and backing up the NOR, I thought it would be fun to randomly corrupt the NOR and see what happened.  Well, what happened isn't unimaginable. The phone would only boot into DFU mode. Ironically, iTunes would put the phone in WTF mode, but the payload it sent immediately afterward was ineffective (16xx error from iTunes)!
Here's how I restored my NOR backup:
1. Use iReb to put the device into WTF mode (Yes, I linked to a .NET app. Lord, help us all...)
2. Use iRecovery to upload and execute a "pwned iBSS" (i.e. from a custom restore.) The screen will turn white if this is successful. # irecovery -x iBSS.n82ap.RELEASE.dfu
3. Use loadibec to upload and execute openiboot # loadibec openiboot.img3
4. Launch oibc, and restore the NOR # oibc
!norbackup.dump@0x09000000
nor_write 0x09000000 0 1048576
Now, the iPhone would boot precisely as it did before installing OpeniBoot. To return the phone to normal operation, I simply did a DFU restore via iTunes to a custom 4.1.2 ipsw. It's a painful reminder of what its like to try to use an iDevice in an unorthodox manner, or cause a catastrophic failure. It also reinforces my decision to migrate from the iPhone to an Android phone over a year ago. I'd hate to think of how much an exchange at the Apple Store would have set me back in such a case.
I noticed a lot of people unhappy with the fact that Zoosk doesn't make their Zoosk Messenger service readily available for Linux users. Some even started an online petition.The truth is, their service is available on Linux, it just requires a bit more effort to get working.
Actually, Zoosk Messenger is an XMPP-based service, built on the Tigaese XMPP Server, running on amd64 Linux.
There are two ways to connect:
1) The official client (an Adobe AIR app)
2) Pidgin (or another XMPP client)
I'll cover using both Pidgin, and the official client.
Standard Disclaimer
No warranty of any kind is expressed, or implied. The information given here is for informational purposes only. The reader agrees by continuing that the author is not responsible for any damages or liabilities arising from use of the information contained herein. The author is not affiliated with Zoosk, or any of it's parent companies, subsidiaries, or partners. Any opinions expressed are solely those of the author.
Now that that's over with, let's get started!
As today was Thanksgiving, I figured I'd post a few general thoughts in reflection upon what I'm thankful for in my life.
First, I'm thankful to be alive in the first place. Being premature, weighing in at a little over 1.5 lbs, and enduring the various procedures and surgeries that I endured, the very fact that I'm able to write this is a miracle in itself.
Second, I'm thankful for the wonderful family that I've been blessed with. There's no telling what my life, and myself, would be like were it not for them.
Third, I'm thankful for the friends I have in my life. Each and every one has had a definite impact on my life, and without them, there's no telling where I'd be.
Fourth, I'm thankful for every person I've encountered over the years. At night, before I fall asleep, I'm greeted by memories of people who have touched my life in different ways, the experiences associated with them, and sometimes am plagued by the eternal question: "What if some things had been different?" Even so, I won't ever forget, even if some people wish they could forget me, though I don't blame them or harbor any ill-will towards them; I simply say they never should have doubted me.  And sometimes I wonder what they'd say if they just happened to run into me unexpectedly.
Fifth, I'm thankful for the joyous experiences I've had in my life. After all, our experiences shape who we are and how we develop as people. I'm very proud of the way I've lived my life thus far, even despite my few regrets.
Sixth, I'm thankful for the places I've been, which also, I won't ever forget.
Seventh, I'm thankful for my various ETFs and MFs. Without them, I wouldn't have dividends.
Eigth, I'm thankful that I'm neither lonesome nor on'ry.
Ninth, I'm thankful that I've got balls of steel!
Tenth, I'm thankful for the weekend, and not having to hear that damned alarm clock.
I learned something new today.
My Myers-Briggs type is: INTJ (Introversion, iNtuition, Thinking, Judging).
My Keirsey Temperament is: Mastermind.
My Socionic type is: INTj (LII).
Now, you should have some small insight into my personality.
I was reading some opinions regarding the INTJ personality type and came across this page and especially liked certain comments, which I shall quote below. The italicized portion really made me laugh.  Perhaps the BOFH would have been an INTJ?
4. Try not to be repetitive. It annoys them.
5. Do not feed them a line of bull.
...
8. Do not be surprised at sarcasm.
9. Remember that INTJs believe in workable solutions. They are extremely open-minded to possibilities, but they will quickly discard any idea that is unfeasible. INTJ open-mindedness means that they are willing to have a go at an idea by trying to pull it apart. This horrifies people who expect oohs and ahhs and reverence. The ultimate INTJ insult to an idea is to ignore it, because that means it's not even interesting enough to deconstruct.
This also means that they will not just accept any viewpoint that is presented to them. The bottom line is "Does it work?" - end discussion.
10. Do not expect INTJs to actually care about how you view them. They already know that they are arrogant bastards with a morbid sense of humor. Telling them the obvious accomplishes nothing.
Instead of writing individual posts, I figured I'd write one huge update. After all, it's been 8 months since my last post.
I've done quite a bit since my last post:
* I traveled to Russia, after seven long years, and spent some memorable time with some people whom I shall never forget  [Although said people probably wish that they could forget me -- but you never know] Я ничего не забуду. 
* I saw several sights, including: the Lenin Museum, the Ulyanovsk Aircraft Museum, and the city of Kazan.
* I came home, got a new car, HTC EVO 4G, some new suits (the one in the picture is my Calvin Klein pinstripe suit), a pair of snakeskin shoes, and an expensive [$400] (and quite nice) pair of crocodile-skin shoes.
* I saw a baseball game at Great American Ballpark, for the first time.
* I went Behind Enemy Lines.
* I tested out Android on the iPhone 3G via iDroid
* I've done more than I can write in a day.
* I've had the red-ass more times than I could ever count.
* ... And, as always, I work hard, and keep moving forward.  Nothing, come hell or high water, will ever stop me.
My personal motto: Ничего невозможно!
For the last few weeks, I've ditched my iPhone in favor of a HTC Dream. I've been using manup's Eclair rom since I got my Dream.
There's a lot to love about Android. The platform is open source, the SDKs are readily available, and best of all, it's based on the Linux kernel. My impressions of it have all been good thus far. Although, with manup's rom, viewing high quality YouTube videos doesn't seem to work.
After getting irritated, I managed to create a workaround (apk). Below are the details of how I did it, and how to install it, for the curious.
Recently I wrote a TI Basic (not Extended Basic) simulator as a proof of concept to determine whether or not such a simulator would be feasable in Javascript. Why TI Basic? Because it was the first programming language I ever learned. Yes, I still have a working TI-99/4A to this day.
PRINT is implemented enough to print simple values, and expressions. the ";" modifier isn't implemented. However, statements such as LET, IF-THEN-ELSE, FOR-NEXT, GOSUB-RETURN, DIM, most math functions, RANDOMIZE/RND, the CHAR subroutines, and most other commands have been implemented.
Timing in Javascript is often inexact. This is the primary problem when developing any sort of simulation in Javascript. I can't wait until HTML 5 becomes fully adopted and a worker thread can be utilized to separate the UI from the rest of the simulation. A concept like this (and even more complex concepts) would be much easier to implement.
Below, you can try it out for yourself. I've only tested this in Firefox 3.5, and lightly in Opera 10.01 ( Note: It actually seems to execute faster in Opera, which is no surprise, but the cursor display is a little quirky at the end of a line.), so I'm uncertain whether it will work in other browsers at the moment. I just wanted to put this out there, and share it with the world. Perhaps I'll optimize this eventually, and implement the other pieces. It'd be interesting to see some of those old programs running right in the browser.
As far as I know, I'm the first to ever create such a thing...
The other day, I decided to reverse engineer the TI BASIC pseudo-random number generator. I was curious to see what sort of algorithm it used, and I couldn't find such an analysis elsewhere on the internet. I've read the book "TI 99/4A Intern" by Heiner Martin (I'd recommend it to any TI enthusiast), and it provides a ton of useful insight into the inner workings of the BASIC ROMs. However, I wanted to reverse engineer the algorithm myself, without the comments from the book.
Source code of my C implementation of TI BASIC's PRNG with test data can be found: here.
Below is an explanation of the exact routines:
Tonight, while being bored, I actually wrote a Winblows program. I might be losing my mind, but I can say one good thing about it. The size of the code + data is well under 100 bytes. I believe this would qualify as one of the smallest Win32 programs in existence. At least no one can ever say I never wrote a Winblows program.
Download it here.
Update 12/14/09: I've moved the code for this program to GitHub and now provide binary packages. See the README for details.
I bought one of these at Micro Center a couple of weeks ago (I just now got around to posting the code -- I've been busy with a few other things) because I wanted to flex my reverse engineering muscles, and work with libhid. I knew there was no way in hell it would come with control software for Linux, and at $14.99 it was quite affordable.
0x04d9:0xe002
USB Vendor ID: 0x04d9 Holtek Semiconductor, Inc.
USB Product ID: 0xe002 FURI KEYSHINE USB LED Badge
You can download the source here. The program is written in C, and licensed under the GNU GPLv3. Instructions for how to compile the program are included in the README. You'll find the original documentation (converted to PDF) in the doc directory. Please make sure the badge is connected before running the program.
Requirements:
- GTK+ >= 2.14
- libusb >= 0.1 (Legacy version - libusb 1.x has a much different API)
- libhid >= 0.2.16
- pkg-config, GLib/GDK/GTK+ headers, libusb headers, libhid headers, etc.
Upon starting the program, you'll see the following window:
If you've used the manufacturer-supplied Delphi progam, then this should seem fairly familiar. If not, it should be fairly obvious what each field is for. The first four fields are text input fields corresponding to the first four messages that can be stored on the device. You simply enter the text you want, choose a speed (the higher the number, the faster the action happens), and an action (e.g. "Move.")
The final two fields are for the two bitmap messages available on the device. If you click on the image, a bitmap editor dialog will appear:
By clicking in the grid, you can set or unset the pixels that comprise the image displayed. If you right click on the grid, you'll get an option to clear the bitmap. When you're done with a bitmap, close the dialog.
The last input item is the "Luminance" spin button. This will set the luminance (intensity) for the LEDs. The default is usually sufficient.
When you click "Send," the data will be sent to the device, and you'll be ready to disconnect the device and use it.
Update (1/10/11): Derek O. provided the following picture of the badge internals. It's apparently driven by a Holtek HT82K94E 8-bit MCU. Click on the image below for a full-size pic! Thanks, Derek!
I had a look at the datasheet (linked above) for this particular MCU, and it would seem to take the USB clock and data lines directly to the chip, which would infer that the memory is on-chip. This raises the question of whether or not the commands sent to the device could be adapted to reprogram it. The instruction set is very straight-forward, although I didn't see any mention of what bits correspond to which instruction. However, the registers and instructions themselves are documented, so it gives some indication of what would be possible.
Holtek has a Winblows-based IDE and emulator available for their microcontrollers, but I'm unaware of any option for Linux at present. I'd love to dump the on-chip memory.  Perhaps I'll revisit it one weekend when I'm looking for something interesting to toy with.
Subtest Score Rank
Writing 600 84
Social Studies 670 96
Science 640 92
Reading 800 99
Math 590 82
------------------------------------
Average 660 91
The minimum passing score in each section is 450 (technically 410, although a 450 average in each section is required to pass the test as a whole.) The maximum score is 800 for each section, and the absolute minimum is 200. A score of 450 - 500 is representative of the average performance of graduating high school seniors.
The test is devised so that 60% of high school seniors would fail the GED on their first attempt.
Rank is, presumably, the percentage of graduating high school seniors across the entire US that would score lower than I. Bear in mind, I've been out of High School for five years now.
I don't believe a GPA could be extrapolated based upon the scores, however the most logical way would be to use the average score. Thus:
660 / 800 = 0.825 * 4 = 3.3 (on a 4.0 scale), or 4.125 (on a 5.0 scale)
If you go based on the average rank, it'd fall somewhere between 3.7 and 4.0.
Just the other day, I was contacted by Mohammad Ebrahim Mohammadi Panah who setup a wiki and has been attempting to document the Paltalk protocol. Upon his request, I contributed the gaim-pt source code for use in his documentation efforts.
You can find the gaim-pt related info (including the source code): here.
I've finally managed to put together a new system. Compared to my previous system, it's like lightning.
Without further adieu, here are the specs:
CPU: AMD Phenom X4 9850 (Black Edition)
RAM: 4 GB DDR2-800 (2 x 2 GB Corsair XMS2)
HDD: 160 GB Western Digital Caviar Blue (7200 RPM, SATA-II, 16 MB cache)
Video Card: NVidia GeForce 8400 GS (PCI-e)
Sound Card: Onboard NVidia HDA
Motherboard: ECS NFORCE6M-A (3.0)
Chassis: Gigabyte GZ-X2 Mid-Tower
PSU: Coolmax V-500 (500W ATX PSU)
OS: Gentoo Linux 2008.0 (amd64)
This really is a system to Git-R-Done!  Btw, I gave my previous system to Dave, and he's quite content with it.
|