SQLite format 3@ D\.K # b I  #0000 Uz //!tableblog_posts_backupblog_posts_backupCREATE TABLE "blog_posts_backup" ( "post_id" INTEGER NOT NULL DEFAULT '0' , "url" VARCHAR(50) NOT NULL , "title" VARCHAR(300) NOT NULL , "subtitle" VARCHAR(300) NOT NULL , "excerpt" VARCHAR(1000) NOT NULL , "content" TEXT NOT NULL , "comments" INTEGER NOT NULL , "date" INTEGER NOT NULL , "live" INTEGER NOT NULL )u!!5tableblog_postsblog_posts CREATE TABLE "blog_posts" ( "post_id" INTEGER NOT NULL , "url" VARCHAR(50) NOT NULL , "title" VARCHAR(300) NOT NULL , "subtitle" VARCHAR(300) NOT NULL , "excerpt" VARCHAR(1000) NOT NULL , "content" TEXT NOT NULL , "comments" INTEGER NOT NULL , "date" INTEGER NOT NULL , "live" INTEGER NOT NULL , PRIMARY KEY ("post_id") )] tableblog_metablog_metaCREATE TABLE "blog_meta" ( "meta_id" INTEGER NOT NULL , "blog_id" INTEGER NOT NULL , "meta_key" VARCHAR(100) NOT NULL , "meta_val" VARCHAR(1000) NOT NULL , PRIMARY KEY ("meta_id") )*jd++tableblog_categoriesblog_categoriesCREATE TABLE "blog_categories" ( "cat_id" INTEGER NOT NULL , "blog_cat_id" DOUBLE NOT NULL , "name" VARCHAR(30) NOT NULL , "url" VARCHAR(30) NOT NULL , PRIMARY KEY ("cat_id") )^ tableblog_tagsblog_tagsCREATE TABLE "blog_tags" ( "tag_id" INTEGER NOT NULL , "name" VARCHAR(100) NOT NULL , "url" VARCHAR(100) NOT NULL , "tag_count" INTEGER NOT NULL DEFAULT '0' , PRIMARY KEY ("tag_id") )ero" src="https://blog.x-e.ro/ui/img/blog/r4-ds.04.jpg" alt="R4-DS circuit board skin by xero" />

here's the circuit board theme i made for my r4-ds. download it here. the three buttons on the bottom left screen are the three main options of the r4. the first is ds emulations, this allows you to play archival copies of games. the center icon is the media player moonshell. it can play mp3s and a custom ds video codec. the final option is to boot to slot-2 (gameboy advance slot). this however will not play regular gba games (you have to remove the r4 to do that) this option is for booting legacy gba hackloaders.

R4-DS metroid prime pinball playback

playback of emulated games is flawless! the speed, the sounds, the graphics, everything looks exactly the same. even games with multiplayer functionality work perfectly. what's great about the r4 is yew can grab an 0-day rom of a new game and check it out. if it sux, you just delete the rom and forget about it. and if you find out it's awesome, then you can buy the game and feel assured what its gonna be all about. i think if nintendo allowed you to download demo roms directly to an sd card on the hardware to "try before you buy" people would go crazy, and the ds scene would explode.

samus glimmer in DS reflection

so now, you might be asking...

so xero, what can you play on this? and where can i get it?

public site is the devil's shadow. but if you google it, there are tons more. the other main application type is homebrew. and this is a very broad area. so, homebrew apps can be anything from data organizers, media players, emulators or homemade games. some of my favorites are:
Lameboy - gameboy/color emulator. (LSDJ anyone?)
jEnesisDS - sega genesis emulator)
DS Organize - calendar, address book, todo list, graphics app, file browser, calculator, irc client, webbrowser, rss feed reader.
MoonShell - do it all media player
SvSIP -VoIP/SIP client
glitchDS/cellsDS - a fun suite of graphical music composing tools
and there are tons of other retro game consoles emulated for the DS.
zophar's domain has a great list.

JWD^lob/main/zsh/.config/zsh/01-environment.zsh#L16">zsh environment file. the one tricky bit it getting your zshrc outta home. you need to export the ZDOTDIR globally somewhere like /etc/zsh/zshenv or /etc/zlogin that is globally sourced. other options like using systemd discussed here. i suggest running these two commands from my setup script to get things ready:

# export ZDOTDIR globally
echo 'export ZDOTDIR="$HOME"/.config/zsh' >>/etc/zsh/zshenv

# create directory skeleton
mkdir -p ~/.local/{bin,docs,cache,lib,share,src,state} ~/.local/state/zsh

i like to run these before cloning my dotfiles and using stow, to prevent these dirs from being symlinks.

neovim

with it's tight integration to the unix shell, vim has been my editor of choice for years. once you start to grok movements and operators you quickly begin manipulating, not just editing text files. and in the shell, everything is just text ;D these days i'm a full time neovim user. it's just better than normal vim at this point imho. using a community built embedded language like lua5 makes way more sense than a custom/proprietary one.

with my asliases e is $EDITOR and se is sudo $EDITOR

e ~dotfiles/README.md is nvim ~/.local/src/dotfiles/README.md

se /etc/hosts is sudo nvim /etc/hosts

you can also start neovim using ec or editor clean, to run nvim --cmd ":lua vim.g.noplugins=1". which is kinda like nvim --clean with the added bonus of still loading some sane defaults. i use this as my MANPAGER with +MAN! as well.

my neovim setup is written in lua, uses lazy.vim, and a bunch of plugins. you can enable/disable them selectivly from plugins.lua. here's the structure of configs:

~/.config/nvim
├── lua/
│   ├── utils/        --> shared helper functions
│   ├── plugins/
│   │   ├── alpha.lua --> each plugin has it's own config
│   │   ├── cmp.lua
│   │   ├── lsp/
│   │   │   ├── init.lua   --> main lsp setup logic
│   │   │   ├── remaps.lua --> lsp key-bindings
│   │   │   └── servers/
│   │   │       ├── bashls.lua --> language server specific configs
│   │   │       ├── luals.lua
│   │   │       └── etc...
│   │   ├── mason.lua
│   │   └── etc...
│   ├── ui.lua       --> ui related options
│   ├── commands.lua --> custom commands and key-bindings
│   ├── general.lua  --> general settings
│   └── plugins.lua  --> lazy.nvim entrypoint
├── nvim-logo*       --> k-rad ansi art
└── init.lua         --> calls other files

as of writing this, i use ~50 plugins and an average startup time of 90-150ms. plugin highlights include:

my leader key is set to , and you can checkout all my custom key-bindings by calling :WhichKey

previews

current setup

awesome ghosts

blizzard orb / cool mario

converge

solid gold

coils

U,X`ank">remorse. back in pre-modern internet days we had to dial up a BBS (bulletin board system) to chat or download files. over time, these systems became either mail/chat hubs or w4r3z distros. because of the questionable legality of some of these releases a login system was added to all BBS' (though many supported a "guest" login"). some had open registration while others were invite only.

acid underword bbs circa 2018

i've been a long time fan of text mode art. i got my first glimpse into that world back in the nineteen hundred and nineties, with groups like ACiD and remorse. back in pre-modern internet days we had to dial up a BBS (bulletin board system) to chat or download files. over time, these systems became either mail/chat hubs or w4r3z distros. because of the questionable legality of some of these releases a login system was added to all BBS' (though many supported a "guest" login"). some had open registration while others were invite only.

alcoholiday new files menu

the warez scene lead the way with .NFO files and FILE_ID.DIZ, these where text files accompanying the release describing them as well as the group (and often board) providing them. these files will adorned with the early scene ASCII art. but in this age, the terminal programs you used to call the boards utilized the ANSI character set. a larger set of 256 character inherited from IMB's CP437, it also contained special ANSI escape sequences that allowed for color text with the 16 foreground and 8 background colors provided by your shell. forward thinking ASCII artists used this power to create colorful works of art to adorn the BBS.

the scene pushed forward, and the people creating this art banded together and formed art collectives (or "crews") where they released their work in "artpacks". eventually these groups moved beyond BBS ad/screens/art and starting creating "art for art's sake". the height of this scene (strictly according to the number of packs released at that time) was 1997, with over 800 packs being released that year alone.

under the black flag bbs circa 2018

when it comes to the textmode scene, there were generally two groups based around hardware: the pc scene and the amiga scene. the amiga scene revolved around the commodore amiga. their releases are often seen more as "ascii art" since they were without color, and featured a number of different ANSI fonts. the most notable being topaz. most amiga ansi was created to accompany warez scene releases, so they were often not seen outside the underground. so members of the amiga crews would release "collys", which are a collection of works usually by a single artist. over time, the amiga scene has continued on using modern versions of their classic fonts and adding PC style colors to their work. while the PC scene still had heavy ties to the warez scene, many of the groups focused on BBS art and advertisements. because of the standard terminal size of 80 characters and a weird bug that corrupted the buffer if the last column was used, all ANSI art from this time period adhered to a strict 79col rule.

acid underworld bulletins screen

around this time, the modern internet was born. people began connecting to dial-up isp's to reach larger networks as apposed to dialing up individual computers. this pushed the BBS scene further underground than before. eventually, a new BBS standard was adopted allowing for these legacy systems to be reborn and reached once again via telnet (and eventually ssh). and that's where we are today.

acid underworld ansi gallery

while it's technically possible to use a standard unix {,like} terminal to connect to a modern bbs, it's better to use a tool specifically designed for BBS'ing. my personal tool of choice is syncterm. it runs on linux, {open,free,net}bsd, osx, and windows. it supports all connection methods including telnet, rlogin, ssh, RAW, zmodem, shell, and direct serial connections. it boasts copy/paste features along with username/password saving and auto-completion. and it's biggest feature, is support for automatically setting and switching between multiple SCENE FONTS!

ansi art uses a meta data format called "SAUCE", developed by the legends of ACiD productions. the sauce file, among other things, contains info about what font the art should be rendered in. this allows the sysops to use both PC and AMiGA style artwork on their boards and let's your client decided how to correctly render it.

bitsunrise games menu

while there are not nearly as many active boards today as there were back then, most of the ones that are still around are super high quality. containing custom artwork, door games, live chat, and cross-board communications.

my friend grisk of impure released this list of awesome active bbs' as of 2016. but i'll highlight some of my personal favorites:

since this is by and large and underground scene, it's historically been quite exclusive and difficult for people to "see". but with the thankless help of internet hoarders, there are now multiple textmode preservation networks. some simply offer direct download links, while others offer interactive galleries to view these works of art. i'd like to take a moment and thank maze for all his hard work on textmod.es. it's an amazing site hosting the artwork of multiple generations of scenesters.

acid underworld logoff screen

V  ;;CGG see_you_space_graff_boysee you space graff boycowboy bebop stencil canvas

see you space graff boya mixed media painting i made for a white elephant gift exchange

see you space graff boya mixed media painting i made for a white elephant gift exchange

ezES ##;) photographyphotographycanon eos r & lightroom

i've been into digital photography lately. i sold some stuff, saved up, and purchased and used canon eos-r camera with two RF lenses the 35mm macro and a 16mm ultra wide. here's some random samples of my work: preview of 2023 photos

i've been into digital photography lately. i sold some stuff, saved up, and purchased and used canon eos-r camera with two RF lenses the 35mm macro and a 16mm ultra wide. here's some random samples of my work:


i've also been super into editing my photos in adobe lightroom. i recently made a tutorial vlog about my personal editing style:

i've also been randomly publishing to my public lightroom gallery.

e0qli>
  • npm v1.4.x (packaged with node)
  • git
  • gnome keyring dev
  • install the dependencies:

    sudo apt-get install libgnome-keyring-dev python2.7 git git-core

    you can also install nodejs via apt-get, but as of right now it's not the most recent version. see the nodejs wiki for install instructions.

    setup python:
    to ensure that gyp uses python 2
    * personally i did not do this. since i don't have python 3 installed *

    npm config set python /usr/bin/python2 -g

    clone the repo & enter the directory:

    git clone https://github.com/atom/atom 
    cd atom

    now, there are three ways to actually build atom:

    #1. create the application at /tmp/atom-build/Atom

    script/build

    #2. installs command to /usr/local/bin/atom

    sudo script/grunt install

    #3. generate a .deb package at /tmp/atom-build

    script/grunt mkdeb

    i personally opted for the first one, just to see if it would work (but if i was going to do this again i'd chose option #2). after building (there were a number of warning in the build script) i moved the files from /tmp/atom-build/Atom to /opt/atom/ and symlinked it into my path.

    installing on ubuntu via ppa

    to install on ubuntu 14.04, 13.10 or 12.04, make sure the dependencies are met and run:

    sudo add-apt-repository ppa:webupd8team/atom 
    sudo apt-get update 
    sudo apt-get install atom

    installing on arch via the AUR

    archers should use their usual work-flow for the AUR: atom latest release | atom git

    installing on mac osx

    just download and run the official installer.

    installing on windows

    checkout the windows build instructions in the atom docs.

    initial impressions

    atom is quite fast (although load time is a bit slower sublime, but it's still beta). the ui is quite nice, and should be very familiar to sublime users. it seems like github's plan is to create a clone of sublime's features then build upon them, and it seems like they have almost all the bases covered already. the plugin system is quite nice. i actually think i like it a little better than sublime's package manager. but we'll see what happens when they have the vast number of packages sublime has. i like the very tight git integration into the gui (though i have already achieved this in sublime with plugins). they have a great number of supported syntaxes already. code completion has great coverage, although it seems a bit slow. themes are broken into two classes: ui and syntax. there are not many themes available yet, but they all seems pretty nice. my biggest gripe with atom themes is they chose LESS over SASS. but that's more of a personal preference thing for me than anything.

    i'm very excited to see where this application goes. since it's os / community backed i expect big things. but i'm not ready to uninstall sublime quite yet.


    sources

    Sj W=?q 55k+ gameboy_prosound_modgameboy prosound modconsole modification for better sound recording

    nintendo gameboy prosound mod

    today’s mod is for the original nintendo gameboy. if you want to get serious about chip tunes, whether your using lsdj or nanoloop, the sound quality of your instrument is a priority. the stock nintendo gameboy is equipped with a single headphone jack. and if you have ever tried recording anything from that, it sounds pretty bad. thus the prosound modification was invented to add a line out jack to the gameboy.

    nintendo gameboy prosound mod

    today’s mod is for the original nintendo gameboy. if you want to get serious about chip tunes, whether your using lsdj or nanoloop, the sound quality of your instrument is a priority. the stock nintendo gameboy is equipped with a single headphone jack. and if you have ever tried recording anything from that, it sounds pretty bad. thus the prosound modification was invented to add a line out jack to the gameboy. trash80 was first credited with this technique, but i will be using a mix of tutorial's published by both lameboy and animalstyle. this mod adds a new line-level-out jack to the device, while keeping the headphone functionality intact.

    tools - gameboy prosound mod

    things we'll need for the mod:

    triwing screwdriver - gameboy prosound modpittsburgh penguins #48 tyler kennedy and xero

    so the other day nina, will, and i went to a pittsburgh penguins hockey practice. i got to meet TK! (aka #48 tyler kennedy) i couldn’t believe that he was only a little bit taller than me, but he's carved out of solid rock! GO PENS! this is the last season for mellon arena so it was nice to get to visit the igloo one last time. 

    pittsburgh penguins #48 tyler kennedy and xero

    so the other day nina, will, and i went to a pittsburgh penguins hockey practice. i got to meet TK! (aka #48 tyler kennedy) i couldn’t believe that he was only a little bit taller than me, but he's carved out of solid rock! GO PENS! this is the last season for mellon arena so it was nice to get to visit the igloo one last time. 

    i took a whole bunch of pictures. check 'em out

    pittsburgh penguins igloo - mellon arena

    Icq  ]s QAOk metroid_and_ghosts_n_goblins_fontstwo free video game fonts!metroid and ghosts n' goblins

    metroid font - NARPASSWORD00000 - fontvir.us

    i have been wanting to make a metroid font for a long time now.NARPASSWORD00000 is made from the classic nintendo NES game metroid's password screen. the font also includes some dingbatz made from the games sprites. but i decided to go the extra mile and create the rest of the full international character set. the fonts name is a reference to a special backdoor password hidden in the game. click here to download.

    metroid font - NARPASSWORD00000 - fontvir.us

    i have been wanting to make a metroid font for a long time now.NARPASSWORD00000 is made from the classic nintendo NES game metroid's password screen. the font also includes some dingbatz made from the games sprites. but i decided to go the extra mile and create the rest of the full international character set. the fonts name is a reference to a special backdoor password hidden in the game. click here to download

    namco font - ghouls, ghosts and goblins - fontvir.us

    my next new font is a capcom classic. ghouls ghosts and goblins made from sprites ripped directly from the NES rom chip. the game has had many incarnations over the years, like ghosts 'n goblins and ghouls 'n ghosts. so i named the font a combination of the two. this font contains the full set of A-Z, digits, special characters, and some 8bit dingbatz. click here to download.

    Ii  gt QE3eA vegan_chocolate_chip_cookie_recipevegan chocolate chip cookiesmy delicious recipe

    vegan chocolate chip cookie recipe

    start with a small container of margarine
    (like 7.5oz of promise or smart balance)

    blend in some sugar.
    i use about 1/3 brown sugar, 1/3 white sugar, and 1/2 a cup of confection [powdered] sugar.

    *optional*
    you can also use 1 table spoon of honey and/or agave nectar.

    stir until creamy.

    add 1 tea spoon vanilla and stir.
    add flour.
    (i like to mix 1/2 cup of whole wheat flour and 1+1/2 cup of white flour.)

    *NOTE*
    if you used honey / agave nectar you'll need and extra 1/2 cup of flour.

    add 1 tea spoon of salt.
    add 1 tea spoon of baking soda.
    add 1 tea spoon of baking powder.

    you want the dough to be stiff not sticky. if necessary, add more flour...

    vegan chocolate chip cookie recipe

    start with a small container of margarine
    (like 7.5oz of promise or smart balance)

    blend in some sugar.
    i use about 1/3 brown sugar, 1/3 white sugar, and 1/2 a cup of confection [powdered] sugar.

    *optional*
    you can also use 1 table spoon of honey and/or agave nectar.

    stir until creamy.

    add 1 tea spoon vanilla and stir.
    add flour.
    (i like to mix 1/2 cup of whole wheat flour and 1+1/2 cup of white flour.)

    *NOTE*
    if you used honey / agave nectar you'll need and extra 1/2 cup of flour.

    add 1 tea spoon of salt.
    add 1 tea spoon of baking soda.
    add 1 tea spoon of baking powder.

    you want the dough to be stiff not sticky. if necessary, add more flour.

    then stir in a small bag of semi-sweet chips.
    (i use the dark chocolate minis.)

    shape the dough into walnut sized balls.
    put on a cookie sheet and flatten slightly.
    bake at 350 degrees for 12-14 minutes.

    getting the dough the right consistency is crucial. if your first batch is coming out too thin or flat, you need to add more flour. the dough shouldn't stick to your hands when rolling then into balls. just keep adding a small amount of flour at a time until they don't feel so sticky.

    let cool.
    enjoy!

    I_ ZCCogs chiptune_albums_to_rock_outchiptune albums to rock outreleases by phlogiston, nonfinite, and starscream
    phlogiston - nectar

    nectar by phlogiston - nectar nectar by phlogiston - nectar is 2 EPs in one. part one, Croquel Adventure, continues in the chip-tune tradition of short, fun, pure NES songs. while part two, HEAT, transports you to an 80's vision of the distant future. the album is a tour through a vast dystopian cityscape where high-tech low-life roam the streets. and the lines between man and machine have been washed out.

    phlogiston - nectar nectar by phlogiston - nectar is 2 EPs in one. part one, Croquel Adventure, continues in the chip-tune tradition of short, fun, pure NES songs. while part two, HEAT, transports you to an 80's vision of the distant future. the album is a tour through a vast dystopian cityscape where high-tech low-life roam the streets. and the lines between man and machine have been washed out.


    nonfinite - southbridge southbridge by nonfinite - southbridge combines triumphant melodies with though provoking harmony and infection head-rocking beats. like northbridge, each track has a unique feel to it. and will peak your interest to the last bleep! you can listen to the entire album online but it's not free. 25% of all proceeds will benefit "chip-in" a group of 8-bit people trying to help out.


    starscream - future, and it doesnt work future, and it doesn't work by starscream - in the not so distant future awaits the election of the first third party candidate to the white house- they will hail from the space party, a political coalition founded by astrophysicists, former democrats and ex-NASA employees. starscream tells a tale of victory, science, and potentially catastrophic foreign policy.

    J4=8n remote machines.

    some of my favorite plugins include:

    gitgutter which shows a git diff in the 'gutter' (sign column). it shows whether each line has been added, modified, and where lines have been removed. you can also stage and revert individual hunks.

    in normal mode when selecting an opening brace or bracket { pressing the % key will move to it's matching closing character. the plugin matchit extends this base functionality adding support for matching by whole words, regular expressions, and other language specific items for html, latex and others.

    YouCompleteMe is a fast, as-you-type, fuzzy-search code completion engine. it's results hook into the omnicomplete system to provide semantic completions for many languages with the ability to configure to your needs.

    syntastic is a syntax checking plugin that runs files through user configured external linters and displays any resulting errors to the user. this can be done on demand, or automatically as files are saved.

    interface

    i personally like syntax highlighting. so setting syntax on is a must for me. depending on your terminal emulator vim can display from 16 to 256 colors. there are a lot of color schemes out there, i made my own called sourcerer. you add the files to ~/.vim/colors/ or put their contents directly in your .vimrc then set them with colorscheme sourcerer.

    line numbering can be another important tool when debugging. to display them use set number, or add a exclamation point as a negation set number! to disable them. another new option is set relativenumber which numbers the lines relative to the cursor rather than absolutely. you can jump to any line by entering it's number as a command. jump to line 10 with :10.

    another visual configuration is your statusbar. while the default is "satisfactory" to get the job done. most ricers configure a nicer one. you can write your own, but there is a lot to take into account. meta data about the file like name, type and encoding, vim's current mode, file modifiability, and other very complex things like placement if multiple buffer windows are visible. so most people use a plugin. powerline and airline are very popular but i prefer to use lightline to create a custom one. like others i use the background color of the filename section of the bar to represent the current mode. i also use fugitive to add git branch and status information to the bar.

    multiple files

    a buffer is the in-memory text of a file. you can have numerous buffers open at once. use ls to list the available ones. bn buffer next and bp buffer previous allow you to switch between them. bd buffer destroy will remove the current one.

    a window is a viewport of a buffer. use sp and vs to horizontally or vertically split the screen to display multiple buffers. pressing winc and a motion hjkl to move your focus. you can also use ^w and the arrow keys to move around. or press ^ww to cycle through them. you can resize windows with winc or ^w and <>-+= for left, right, up, down, and equally respectively. but since this is a single increment it's better to prefix it with a count like 30winc> or 30^w>.

    a tab is a collection of windows. tabe szechuan tofu. the nice lady behind the counter asked me if i wanted it steamed, fried… or both. at that moment my mind was blown. and the idea of double cooked tofu was born. it’s a simple recipe for anyone new to cooking tofu. this article is meant to teach you how to cook tofu, not flavor it. tofu is known for taking on the tastes of whatever it’s cooked with. after cooking the tofu in this method you can coat or sauté it in a sauce of your choice, or eat it plain. 

    things needed:
    1 block of tofu (i prefer firm or extra firm)
    steamer
    vegetable oil
    frying pan
    paper towels
    tongs (or metal slotted spoon)
    oven mitt

    pressing

    tofu comes packages in ‘water’. but it’s gross bean flavored water. the first step in preparing tofu is pressing this water out of your block of tofu. this step is necessary in *any method* of preparing tofu. and it can be easily overlooked by a first timer.

    tofu - block

    start by laying out 5 or 6 pieces of paper towel on a cutting board. position the tofu in a corner.

    tofu - wrapped

    wrap the tofu in the paper towels. try and have the thickest part of the paper towels on the bottom to collect maximum moisture.

    tofu - press

    put a stack of heavy books on top of the wrapped tofu. leave them there for 3-5 minutes. repeat this process 2 or 3 times until the paper towels are dry after pressing.

    cutting

    the method in which you cut your tofu is really up to you. but try and keep the pieces thin and a bit large. tofu shrinks when it's fried. here's my method:

    tofu - cut

    start by cutting the entire block in half.

    tofu - filet

    evenly filet each half of the block into 3 pieces, then stack them back on top of each other.

    tofu - triangles

    cut your rectangle in half short-ways. then cut and 'X' into each half.

    steaming

    this step is the real secret to double cooked tofu. we just removed the liquid from the tofu by pressing it. now we're going to add some back and cook the center of the tofu in the process. this makes for fuller, spongyer tofu.

    tofu - steamer

    place your tofu pieces in the steamer. make sure they're not touching.

    R4-DS the homebrew revolution

    the nintendo ds is an awesome portable gaming system. i have the ds lite, its thin, weights under a pound, has two super bright backlit screenJ !!\w ??Ye sql_select_into_statementSQL select into statementcopy and swap database tables in MSSQL

    have you ever had a database table that you needed to clone? you can use any number of convoluted methods such as: manually coping and pasting rows in the database manager, running lots of queries/stored procedures, or writing a script to cycle though each row copying data from one table to the next. all of these methods are inferior and far more complex then the method i'm going to show you.

    introducing the select into query...
    this method should be used if the table you want to clone exists, but the new table douse not. the select into query will create the new table for you, copying all the column names, properties, and data. if you want to make an exact clone of the table you can select * into the new table. but if you only want a few specific columns, you can declare only the ones you want. the syntax is elegantly simple...

    SELECT *
    INTO [new-table]
    FROM [old-table]

    have you ever had a database table that you needed to clone? you can use any number of convoluted methods such as: manually coping and pasting rows in the database manager, running lots of queries/stored procedures, or writing a script to cycle though each row copying data from one table to the next. all of these methods are inferior and far more complex then the method i'm going to show you.

    introducing the select into query...
    this method should be used if the table you want to clone exists, but the new table douse not. the select into query will create the new table for you, copying all the column names, properties, and data. if you want to make an exact clone of the table you can select * into the new table. but if you only want a few specific columns, you can declare only the ones you want. the syntax is elegantly simple...

    SELECT *
    INTO [new-table]
    FROM [old-table]
    

    this is a great solution for cloning a table. it's fast and lightweight since it's all executed on the database end, not straddled between middleware.

    now here's another situation...
    let's say we have a simple web-form that is submitting 4 pieces of data: username, date, value1, and value2. this form has been collecting data for a long time, and all of a sudden you realize that somehow your save procedure has swapped the data for value1 and value2! some people might just dive into the table and start modifying rows. but i'm paranoid. i like to validate my SQL procedures before i destroy an entire table's worth of data. we can use the same clone table technique above to make a copy of the table, but we can go a step further and also swap the data in value1 and value2 in the same procedure.

    SELECT *
    INTO [new-table]
    FROM [old-table]
       
    DECLARE @temp AS decimal
    UPDATE [new-table]
    SET @temp=value1, value1=value2, value2=@temp
    

    basically we have 2 SQL statements in one here. the first will clone old-table into new-table. the second declares a temporary variable and uses the temp var to switch the data in value1 and value2 in the new-table.

    if you only need to switch values for a smaller portion of the dataset, say all rows with an id value less than a certain number, you can simply add a where clause to the end of your statement.

    SELECT *
    INTO [new-table]
    FROM [old-table]
       
    DECLARE @temp AS decimal
    UPDATE [new-table]
    SET @temp=value1, value1=value2, value2=@temp
    WHERE id < 806
    

    this will copy the entire table into the new one, but only swap the values for ids less than 806. all other values will be cloned exactly.

    J8hh2>

    for the most part, vi just works the way it's designed, while vim is highly configurable. many distributions include a basic config file, but user defined configurations are loaded from the .vimrc file in the home directory ~ of the user running the program. keep that in mind when running sudo vim or the more appropriate sudoedit (symlinks ftw). user configurations range from very simple vanilla ones to files hunderes of lines long brimming with comments, settings, custom key mappings, functions, plugins and the like. my vim guru taught me that when learning how to use vim you should start with a minimal configuration to learn how the editor itself works. then, when you gain a deeper understand, slowly begin to tweak it to your liking.

    it is common to first set nocompatible and enable vim's extended features, though in newer versions this is set automatically upon loading a user defined .vimrc file. other common settings include custom indentation sizes with shiftwidth, tabstop, and expandtab.

    you can also define your own commands to automate common tasks or quickly perform complex ones. one i use pretty often mapped to J is command J :%!python -mjson.tool this takes the contents of the current buffer and passes it to the python utility to pretty print a json file then reads back in it's results and replaces the current buffer with it's output.

    you can also remap commands and completely configure it to work exactly the way you like. i try not to use these because you tend to rely on them then get frustrated if they are not set or available in your current instance. early in my vim pilgrimage i was setting nnoremap ; : this allows you to prefix your ex commands with ; as opposed to the default :, i call it lazy shifting. but this would trip me up every time i was in vi. but since vim uses both ; and : things can get crazy quick. still, some swear by things like nnoremap <C-j> <C-w>j for faster and more semantic window movements. and vim gives you the freedom to do so.

    and this is just scratching the surface of what's possible. while i suggest looking at other peoples dotfiles and learning new things, i don't advise using someone else's exact .vimrc. you should understand, and want, every line in that file since it dictates exactly how your editor will function.

    since vim is configured by a simple text file, when it comes to editing on remote machines you can just use the default settings but it's trivial to add your own config file. you can copy+paste the contents manually, use a tool like curl or rsync to retrieve it and write it to a file curl -sL http://git.io/.vimrc-min-curl > ~/.vimrc, or if you are like me and keep your dotfiles under version control you can just do a git clone (and a sparse checkout if you only want one program's configs) and stow or symlink the files into place.

    extensible

    vim is endowed with a plugin system written in it's own language vimscript. it has a long history of working in different ways, but as of this writing vundle is the current standard. it allows you to install, remove, and configure plugins from your .vimrc file. the BundleInstall command will even clone all the necessary files from github or vim.org for you. plugins can be simple or very complex. the number of plugins and their complexity will effect load time, so keep it light. i often disable plugins when editing ogular and interactive. with this new release, you just have materials with a boolean interactive property.

    with this simple demo, im trying to learn more about the new interactive scene events. first, you create a 3D scene, and set it's interactive flag to true:

    view = new Viewport3D(width, height, scaleToStage, interactive);

    then create a material and set it's interactive property to true:

    papervision3D - face level interaction

    the new pv3d 2.0 release features an entirely new way of dispatching and handling events. earlier versions of the engine utilized two different flavors of materials, regular and interactive. with this new release, you just have materials with a boolean interactive property.

    with this simple demo, im trying to learn more about the new interactive scene events. first, you create a 3D scene, and set it's interactive flag to true:

    view = new Viewport3D(width, height, scaleToStage, interactive);

    then create a material and set it's interactive property to true:

    skin = new CompositeMaterial();
    skin.interactive = true;

    this can also be done through the object as opposed to the material:

    terrain = new Plane(...);
    terrain.material.interactive = true;

    after that you attach listeners to your object. in this case, we're going to use the interactiveScene3DEvent.

    terrian.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, extrude);

    here's a list of the available interactive scene3d events:

    OBJECT_CLICK
    OBJECT_OVER
    OBJECT_OUT
    OBJECT_MOVE
    OBJECT_PRESS
    OBJECT_RELEASE
    OBJECT_RELEASE_OUTSIDE
    OBJECT_ADDED

    from these events its possible to receive a multitude of information. the 4 main ones are the instance properties available to you, which are:displyObject3Dface3DrenderHitData, and sprite. in this demo i use face3D to return the current triangle3D that the user is interacting with. 

    when the user moves the mouse over the plane, a highlight function is fired. i look at the current face3D and the last face3D and change their materials. this gives the effect that the triangle you are hovering over is illuminated. 

    but the code gets a bit hacky in the extrude function. this gets fired when the user actually clicks the plane. i receive an event from the interactive scene manager and once again get the current face3D instance. beyond that, i look that the v0 property and increment (or decrement, depending on the user's on click settings) the current face's z amount. notice that the current face is not the only one affected. it's surrounding triangles also rise up and form pyramids on their own. this is a sign is a well programmed engine! 

    as usual, sources are available...
    view the interactive terrain generator
    view its source code here

    Gtl carpal tunnel syndrome, so emacs is out. it also seems bloated to me, being that it's an editor as well as a client for mail, irc, news, web, etc. while vim is often available, sometimes only vi or micro-versions are available like nvi, the busybox tiny-vi clone, or the ATARI/UNIX/MS-DOS/OS2/QNX xvi implementation.

    vim

    i choose vi/vim the shell based, fast, extensible, multi-language editor focused just on editing code that's available on any *nix based operating system as well as other platforms. vi is a modal editor, meaning it works differently depending on the current mode. it operates in either insert mode where typing text appends it to the document or normal mode where keystrokes are interpreted as commands used to navigate and edit the document.

    your first challenge when using vim is learning the motions: h, j, k, l are used to move the cursor position up, down, left, and right. you can still use the arrow keys but vim masters will flame you saying things like: "you loose precious seconds (of your life) moving your hands from the home row to reach down for the arrows." like the motions, normal mode commands can be simple like w to jump forward a word. or more complex combinations of operators, counts and motions, for instance 2d3w deletes six words.

    vi style editors promote a keyboard focused workflow that doesn't rely on multiple simultaneous key presses or the mouse. which for shell users just makes sense. vim (Vi IMproved) is an extended version of the vi editor adding new modes like visual for highlighting and replace also known as overtype mode, among others. it also adds features like syntax highlighting, file completion and comparison (vimdiff), regular expressions, folding, compressed file editing, horizontal and vertical split or tabbed windows, multi-level branched undo/repo history, mouse support (for heretics) and a lot more.

    in normal mode ex commands are prefaced with a colon. depending on your settings, when you press : and start typing then press the tab key to activate the completion and suggestion engines. entering :w and pressing tab will give your suggestions like :wincmd, :write, :wq, and more. user defined functions must begin with a capital letter, and also will be available for completion. if you want to exit command input mode with out running anything press ^c (in this notation ^ is ctrl). when entering commands in a .vimrc file the colon notation is implied. for the rest of this article i will omit them from commands in that style. to get the master list of all ex commands enter help holy-grail.

    i think it's important to say: "vim is an editor, not an IDE". you can go wild extending vim with plugins and make vim into an IDE, but at it's core it's just an editor. use it how you like, but it's main goal is to edit text.

    help

    the mark of intelligence is not knowing everything, but knowing how to find the answers for yourself. my shell command history is littered with requests for man pages. i just ran vim .zhistory and %s/;man//gn, it yielded 15 results. so 1.5% of all my commands were asking for help. vim also has amazing documentation. enter the help command to view the help overview in a new buffer. the pages are just text so you navigate and search them as usual. you can search help with h pattern, if you set wildmenu tab completions will display a selectable list of suggestions.

    configurableLSDj keyboard

    so, making music for LSDj is fun. but after a while you start to wish you could “play" the gameboy software as a musical instrument as opposed to composing music in its tracker style interface. that's where the LSDj keyboard comes in. the idea is, the keyboard sends messages though the gameboy linkport to LSDj. the commands that can be sent vary from playing/stopping notes or chains or tables, un/muting channels, in/decreasing octaves, switching instruments, navigating screens, and more. 
    here's what the LSDj wiki says about the keyboard...

    LSDj keyboard

    so, making music for LSDj is fun. but after a while you start to wish you could “play" the gameboy software as a musical instrument as opposed to composing music in its tracker style interface. that's where the LSDj keyboard comes in. the idea is, the keyboard sends messages though the gameboy linkport to LSDJ. the commands that can be sent vary from playing/stopping notes or chains or tables, un/muting channels, in/decreasing octaves, switching instruments, navigating screens, and more. 
    here's what the LSDj wiki says about the keyboard.

    things we'll need for the mod:
    mini-din / ps2 keyboard
    gameboy link cable
    soldering iron
    solder
    flux
    wire stripper
    screw drivers
    heat-shrink tubing / electrical tape
    x-acto knife

    finding the right gameboy link cable:
    there are a few different types of gameboy link cables, in the most general of senses there are "classic" gameboy cables and gameboy "advance" cables. obviously we will need a classic cable. for this mod to work we will need to power the keyboard, so you'll need a powered gameboy link cable. you can cut off the cable end from a gameboy 4-player link adapter (model# DMG-07), like i did, or you can use the correct powered cable. otherwise you will need to add a +5v external power source. nonfinite sells both shell commands

  • file searching
  • random vim tips
  • learning & tutorials
  • wrap up
  • editor vs ide

    a text editor is a tool for editing plain text files. they have features like file and file system navigation, file io, modification, undo, search and replace, spelling and grammar checking, and more. but in this article we're talking about a type of editor referred to as source code editor. beyond the aforementioned functions their features include code detection, syntax highlighting, indentation and formatting, brace matching, code completion, etc.

    IDE is an acronym for integrated development environment, it's a suite of programs that work together in a "portable environment" that assists you in writing software. an editor is just one component of an IDE's toolchain. main features include things like code completion, code navigation, error checking, debugging, build automation, versioning, etc. most IDEs are designed for a specific language or related subset of them.

    being a long time programmer of a variety of languages i have used both at different times in my career. some "corporate" languages (cough microsoft! cough) like visual basic force you to use their IDE designed for their proprietary suite of tools. but many non-compiled and scripting languages let you write their code however you like. some editors like sublime text can be used for a multitude of languages while others like racket are designed to work with only one.

    if you sit around coding java all day, i'm sorry, then maybe using and full blown IDE like Eclipse, Android Studio, or IntelliJ is for you. but on any given day at my current job i will edit files in php, javascript/json, css/sass/stylus, shell scripts, markdown, config files, and a variety of others. i want an editor flexible enough to handle a wide variety of programming languages.

    simple

    if you adhere to the unix philosophy "dotadiw" or "Do One Thing and Do It Well", many IDE features break this separation of concerns. don't get me wrong, i understand that one of the most alluring attributes of an IDE is that you have your entire toolchain all in one place sharing the same user interface. but i subscribe to the unix as my ide mentality. as a shell user, your tools already work in the same common ui paradigm of text streams and files as persistent objects. i don't need my editor to understand the intricacies of any language, it just needs to know how to query and interpret or simply display the responses of external tools.

    everywhere

    another important factor for me is remote editing. even though we live in the future where your production website code is automatically deployed via post commit hooks in version control software, you still find yourself poking around and tweaking the code on remote machines. most *nix based/like operating systems come with ed, vi/vim, emacs, nano, and sometimes a few other editors. ed the standard editor is too terse and nano is too simple for me. i already feel like i have %y ''M' metroid_asciimetroid asciixero.nu metroid logo ascii style

    x-e.ro metroid ascii art

    x-e.ro metroid logo spoof ascii.
    view this post to see the full thing. it's double the size of the teaser image.

     .___.
    /  @  \
    \ @ @ /
     {'^'}
    
    
    
                                                 .                                            
                                               .*                                            
                                                                                                  
                                                                                                  
               .                                                               ,'                 
             :                                                                 .                  
                                                                                                  
                          .                                                   .___.               
                         .'            [ http://x-e.ro + Metroid Style ]    /  @  \              
                            .                                                \ @ @ /              
                            .                                                 {'^'}               
                                                                  .                               
                                                     ,'                                           
                                                                                                  
             =~ofar. john (aka jaze juce) is a native new yorker, who nina met at school. jaze is a rapper, a life guard, and all around man about town. we saw a lot of the city from in the car at night, which was awesome.

    NYC urban vs rural

    NYC manhattan skyline

    NYC up the fire escape

    day one we went to the guggenheim museum, they were camera-nazis so no photos from there. I don't know if we were there on an "off day" or something, but I honestly wasn't that impressed. But the building architecture was cool, like a parking garage meets modern adobe. on the way there we stopped in front of a random office building to buy fruit from a street vendor and found these giant hello kitty metal sculptures!!!!

    NYC metal hello kitty

    NYC metal hello kitty

    day two we went to the museum of modern art (MOMA) which was amazing! the place was 5 stories high, and was filled wall to wall with art! there was a lot of stuff i wasn't allowed to photograph, like the entire floor of picasso paintings/sculptures, or the HUGE salvador dali exhibit featured on the top floor! they had 250 of his paintings, tons of props, backdrops and other stuff from his films. and they were playing ALL the movies he made, including a DISNEY FILM he animated! 

    NYC MOMA

    NYC MOMA

    NYC MOMA

    NYC MOMA

    NYC MOMA

    after that we went to a museum of modern architecture and design. you’re really not supposed to take any photos there, but there were a few i just couldn't resist!

    stencil graffiti - fight club

    this year i decided to make xmas gifts for all my friends. part of me wanted to make something special for everyone, part of me just wanted to paint. i chose stencils as the medium for a few reasons. one, i have little experience with them. most of my graffiti has been hand drawn on the fly. some people in the 'graff scene' seem to think that stencils are cheating. but i don't see it that way. it's just another method in the same medium...

    stencil graffiti - fight club

    this year i decided to make xmas gifts for all my friends. part of me wanted to make something special for everyone, part of me just wanted to paint. i chose stencils as the medium for a few reasons. one, i have little experience with them. most of my graffiti has been hand drawn on the fly. some people in the 'graff scene' seem to think that stencils are cheating. but i don't see it that way. it's just another method in the same medium.

    after preparing you artwork (i did everything in photoshop) you will need to find the correct type of cardboard. stiff enough to not warp when wet with paint, but thin enough to be easy to cut. try and avoid the cardboard with the air bubbles in them. they are the most difficult to cut, and it's almost impossible to get very high detail with them. i like using the 'gift boxes' from retail stores. for these stencils i used boxes form dick's sporting goods, because they are a perfect thickness, and they are free. find yourself a good cutting surface. a desk you don't care about, a thin piece of wood, or one of those plastic drafting wheels. buy a new xacto knife or new blades for your existing one. this is one of the most important parts.

    the sharper the knife, the sharper the image.

    tape down your design to the cardboard and start cutting. take your time. and remember to follow the one rule of stencils: do not leave islands. by that i mean none of your design elements can be floating in the middle of the image. remember your entire design is cut in negative space on the cardboard. it's a hole or a series of them. so if there needs to be some detail within ones of these holes, the detail part must be bridged to the rest of the stencil.

    stencil graffiti - clockwork orange cut

    stencil graffiti - scraps

    after your stencils are ready to go it's time to prep your painting area. i prefer to paint outside, but since it's winter i had to use the garage with the door part way open. whSPh="710" height="180" />

    the triwing screw-driver is an integral part of this mod. nintendo uses a nonstandard screw on the 6 found on the outside of the case. but all the screws on the inside of the gameboy are a normal mini-philips head. i got my triwing on ebay for like $2.00, but you can get them other places if you look.

    exposed gameboy guts - gameboy prosound mod

    step one is to remove the screws. like i said before, there are six triwings on the back of the DMG. four are visible, and two are hidden under the batter compartment. make sure you don't loose the screws, or you will have to replace them with regular minis. but philips that small can be difficult to find.

    pull the ribbon cable - gameboy prosound mod

    now you need to disconnect the display cable. BE VERY CAREFUL! the ribbon cable that connects the dot matrix display to the gamboy's motherboard is very thin. the cable has minimal metal on the leads at the end. so if you scrape any of it off by pulling it out too hard or at a strange angle you can expect some dead pixels. just pull it straight down.

    two halves - gameboy prosound mod

    now take a moment to check out the guts of the gameboy. pretty cool. in the image above you can see the 3 points on the board we're going to be soldering two. check out the wiring diagram.

    clean everything - gameboy prosound mod

    the next step is optional. but its normally necessary. clean everything up. all you need is the highest percent alcohol you can get (i use 98%) and some cue-tips. get into those little recessed areas and clean out any dust or grime that may be in there. make sure you do the batter terminals too, especially if they have any corrosion on them. that process may require paper towels and some extra elbow grease.

    disconnect the audio daughterboard - gameboy prosound mod

    to fix the jack into the case you'll need to made a little more room. use a mini-philips head screw-drive to draw in flash, lol!

    after a quick conversation w/ andy zupko about the new Line3D object, and my new CanvasView3D component for papervision, i made a sweet lorenz attractor! 

    the algorithm is super simple:

    x1 = x0 + h * a * (y0 - x0);
    y1 = y0 + h * (x0 * (b - z0) - y0);
    z1 = z0 + h * (x0 * y0 - c * z0); 

    papervision3D lorenz attractor

    we were discussing recursive algorithms and chaos theory at work yesterday. when one of the chemistry professors brought up the lorenz attractor. he was trying to draw one on the white board for about 10 minutes until i decided it would be easier to draw in flash, lol!

    after a quick conversation w/ andy zupko about the new Line3D object, and my new CanvasView3D component for papervision, i made a sweet lorenz attractor! 

    the algorithm is super simple:

    x1 = x0 + h * a * (y0 - x0);
    y1 = y0 + h * (x0 * (b - z0) - y0);
    z1 = z0 + h * (x0 * y0 - c * z0); 

    A, B, and C are variables that get their values from form components in the application, while H is a constant that represent the angles of the curves dictated by segment size. x0, y0, and z0 are the origin vertex’s while x1, y1, and z1 are the destination points.

    besides the form objects for the A, B, and C values, the application features an event driven camera, that follows the drawing as it happens. as well as a hover camera, which lets your rotate the object in 3D. the actual lines that are being drawn are given a new material each render. that's how the color tweening effect is achieved. use the color picker box to select a valid color to start with. also, the algor run 3000 times, (getting slower and slower as it loops) press the generate button to erase the lorenz you already have a begin drawing a new one w/ the form values you have selected.

    a little background on the lorenz...
    the lorenz attractor is a 3D structure corresponding to the long-term behavior of chaotic flow. the visual “map” represents the evolution of a dynamic system, that complexifys and into a unique non-repetitious pattern. originally discovered by edward lorenz in 1963, the current algorithm is based on simplified version of his equations of convection rolls arising in the atmosphere. for detailed technical info check out math world and this article by dominic van berkel.

    click here to check out the demo
    then browse the source code

    G W^{ 11A7 double_cooked_tofudouble cooked tofusteamed and fried goodness

    tofu - double-cooked

    one day i walked into an unfamiliar chinese restaurant and ordered szechuan tofu. the nice lady behind the counter asked me if i wanted it steamed, fried... or both. at that moment my mind was blown. and the idea of double cooked tofu was born. it’s a simple recipe for anyone new to cooking tofu. this article is meant to teach you how to cook tofu, not flavor it. tofu is known for taking on the tastes of whatever it’s cooked with. after cooking the tofu in this method you can coat or sauté it in a sauce of your choice, or eat it plain.

    one day i walked into an unfamiliar chinese restaurant and ordered i| 55K)I git_with_the_programgit with the programsource code management with git

    git is a distributed revision control and source code management (SCM) system with an emphasis on speed. git was designed by linus torvalds, of linux fame, for managing the development of the kernel. every git working directory is a fully fledged repository, complete with revision tracking abilities independent of a network or centralized server. git is 100% open-source, freeware, and distributed under the GNU general public license v2.


    git is a distributed revision control and source code management (SCM) system with an emphasis on speed. git was designed by linus torvalds, of linux fame, for managing the development of the kernel. every git working directory is a fully fledged repository, complete with revision tracking abilities independent of a network or centralized server. git is 100% open-source, freeware, and distributed under the GNU general public license v2.

    why use git?

    speed and performance.
    git is very fast. nearly all operations are preformed locally, giving it a huge speed advantage over other centralized systems which constantly have to communicate with an external server. git handles large repositories very well with is simple, yet very effective, design. and it's programmed in C, which reduces the run-time overhead of other higher level programming languages.

    complete history.
    every git repository, whether created locally or cloned from a remote location, contains its entire history. once you have a copy of the repository you can move forward and backward in time from the bleeding edge to the initial commit. if you make a few mistakes, introduce some new bug, or just want to reset to a previous state, your justxerminal.

    sound advice

    one evening i had a lengthy conversion with my friend matt burdine, a long time linux user. he convinced me that there was nothing to loose and give it a try. if i dual booted, i could have the best of both worlds, and he was right.

    my first step what to decide which distro to choose. in my research, i discovered there were a few main "flavors" of linux and a many distributions based on them. each having their own goals and opinions on how an OS should operate. i decided on debian, one of the main players, with a modern/active development community, lots of FLOSS/FOSS software packages, and many distros to choose from. this lead me to distrowatch, a great site that gives you all kinds of information about the most popular linux distros. based on many reviews i selected linux mint with the cinnamon desktop. at the time, a new version had just been released. mint was a real eye opener. i realized how much of a fully fledged operating system linux was. after a month or so, i was rarely booting into my windows partition anymore. mint helped me learn, from a very high level, how linux worked. and to be honest, it was extremely similar to windows in many respects. which was one of my biggest issues with mint. i was switching to linux to leave the windows world, not to just find a free clone of it.

    distrohoppers anonymous

    this lead me to the heaven/hell that is distrohopping, switching between various linux distributions like an addiction. this practice has it's pros an cons. test driving multiple systems gives you a great overview of the terrain. quickly helping you to decide which you like, and which you don't. setting up a separate home partition, allows you to use your personal files on any of the distros you install. but this rapidly consumes all the space on your hard drive(s) by having to install (some of) the same software on each. for the next few months i had a new version on linux on my testing partitions ever week. i experimented with a number of ubuntu variants like kubuntu, xubuntu, lubuntu, etc. i used centos, elementary, puppy, fedora (redhat), netrunner, manjaro, backtrack (kali), and finally crunchbang.

    *note*
    there are two notable distros missing from the aforementioned list. ubuntu proper and archlinux. when first learning about linux i was obviously, digitally, acquainted with richard stallman, the founder of the free software foundation and GNU. i read an article he wrote about ubuntu's problems being backed by a corporation, and basically install spyware on everyone's machines. it made a lot of sense. and i figured if they were putting stuff like that into the source, what else is in there/will they add? it dissuaded me from using it. arch linux, on the other hand, is a DIY linux distro targeting proficient *nix users, offering tons of great software, build scripts, user repos, etc, but little in the way of help or support. archers are expected to maintain their own systems, work through and solve their own problems when issues occur. at this point in time, i do not feel that i am ready for that. but hopefully some day :D

    crunchbang

    crunchbang

    i had seen the write up about #! (pronounced crunch bang) on distrowatch when waldorf was first released, and was immediately intrigued. it's based on debian stable, which i still feel is one of the strongest linux flavors, and featured the lightweight openbox window manager. after installing i was taken back by how minimal it's GUI was. no desktop environment, just a WM (window manager) and a rock-solid toolkit. many of the components of #! are from the XFCE project, which i was familiar with from some other distros i tired. after a few days i realized how unnecessary a DE (desktop environment) was for my purposes. my goal was to live in the command line, and i was doing just that. but when the moment arises that you need a file manager, thunar is there to help you out. thunar is a beautiful, bare minimum, file manager. you can visually explore the file system, move files around, have it suggest which applications you should use to open files with, etc. some other notable applications that come with #! are nm-applet, a network manager which makes connecting to wired/wifi/vpn networks a breeze. gparted, a GUI disk partitioning tool, and a/xrandr a dead simple screen resolution configuration tool.

    but one of #!'s strongest points are the forums. it's a great community of friendly, insightful, intelligent individuals helping new users solve problems. the vast majority of my questions were solved by simply searching. most n00b questions have already been answered, many with multiple suggestions and updates as things change. the forums are also a "direct" link with other users and developers. they have posts asking the community for suggestions for new releases, posts about new software, and other topics related to the linux world. but this community is not only made up of #! users, there are many who use debian proper, or other debian variants, archers, even a few ubuntu users.

    dot files

    like many other linux users i keep a git repo of my dotfiles, the ui configuration files that make my personal linux system look and act the way it does. you can check them out on my git server or on github.

    the voyage continues

    it's now been a year since i embarked on my linux journey and it's far from over. i have long since deleted my windows partition, and have never looked back. that's partially thanx to wine, a tool that allows you to run windows software in linux. and partially due to the great free software available to linux users. linux gives you, the user, the freedom to use your machine the way you want it. it's open nature allows you to tweak ever minute detail of your system. yes allows, unlike windows which i was constantly hacking part to change things, which inevitably leads to system instability and/or lack of security.

    i highly suggest giving linux a chance. it does have a learning curve, but how steep is based on which distro you select. mint and ubuntu are very windows-esque, and thus have a low barrier to entry. but "power-users", like myself, can choose to dive a deeply as you desire. linux is what you make it.

    S=?trong>
    just because you cloned from one repo doesn't mean you're tied to only one. you can add as many remotes as you want so you can pull/push from any/all of them.
    git remote show
    will list all the remotes for your working repository.
    use the -v (verbose) flag for additional information
    git remote -v show

    adding a new remote
    git remote add (name) (url)
    to view info about a remote
    git remote show (name)

    a note about subversion

    lots of people love svn and refuse to stop using it. most versions of git come packaged with the git-svn command (if it's not you can download it separately with the same package manager you used to get git. make sure you also have all the required curl bindings.) this will allow you to use git on a subversion repo. and the best part is, the svn users have no idea you're doing it! the git-svn command will convert all your git commands to svn commands when working with the remote repository. for all your local work, use git as normal. let them live in there "little subversion world", and you can live in the future with us using git ;D

    when cloning an svn repository use clone
    git-svn clone (url)
    then use git as normal, add commit, branch, etc. then when you're done, use the dcommit command. this will take all your git commits and package them as svn commits.
    git-svn dcommit
    if you want to pull from the svn repo use the rebase command
    git-svn rebase
    this will take all the changes from the remote svn and apply them one at a time into your local git-svn repo. by using the rebase command this will create a cleaner git history in your repo and allow for a simpler svn syncing.

    public git hosting

    there are many free/pay sites online to host git repos. most of the free plans focus on open-source projects, and thus are public. if you want a private repo you're more than likely going to have to pay.
    here's a list of some of the most popular git hosting sites:

    sources (giving credit where credit is due)

    everything in this post i learned from using git and reading about it. the following resources are both my citations for this article and a great wealth of knowledge for learning more about git (this article only scratches the surface).

    P~y flag to use interactive mode
    git rebase -i dev

    rebasing changes history!
    when rebasing you abandon existing commits and create new ones. although the new commits a very similar they are still viewed differently by git. so, a rule of thumb in the git community is to never rebase commits that you have already pushed to a public repo. the other people working on the project will be very annoyed, when pushing any changes they might have introduced to the branch you rebased will now be unavailable, they will have to rebase their repositories to match then apply their own changes.

    stashing

    git stash will save your uncommitted changes and remove them from the repo. this works almost like a clipboard. if you're working on something and a huge problem pops up. you can stash you changes, fix the crucal bug, commit your fix, then unstash and get back to what you were working on.
    git stash "message"
    git stash apply (stash id)
    cleaning up the stash (removes everything)
    git stash clear

    remote repositories

    so far all of the commands i've talked about are available offline. but let's talk about working with git over the internet. git can work over a few protocols: HTTP, HTTPS, and SSH.

    cloning
    to copying a git repository from an external site use clone
    git clone (repo url)
    git clone http://git.x-e.ro:open_qoob

    by default the name of the server you have cloned from is called origin.
    if you use the branch command again with the -a flag (all) you can see remote branches as well
    git branch -a

    so if you make some changes to your local clone of the repo, you can send it back to the server with the push command. you can optionally use a branch name to push a different branch, not just master. by default git push will only push your master branch.
    git push (remote name) (branch name)
    git push origin master
    git push qoob docs

    a note about security. git is the so-called: "stupid content tracker". it's primary function is to manage your code. while git has the ability to sync (both to and from) remote locations, security is not an integrated part of git. it's the burden of the server hosting the remote repo to control who has access to it. any remote repo that is "viewable" can be cloned. but unless access has been setup to accept changes it cannot be pushed to by default. i could talk about this all day, but i want to focus on using git more than setting up a server to host it. you can read more about this in the pro-git book.

    software evolves over time. and if your remote repo is in active development, there's a good chance your version will eventually fall behind. if you want to get the latest changes from a remote repo, use the pull command
    git pull
    This also works with branches as well.
    git pull (remote name) (branch name)
    git pull origin master
    git pull qoob docs

    FYI,
    once you have done this you can use the git push/pull command on its own and git will add the remote and branch name for you. but personally i like to be specific and tell git exactly what i want it to do.

    another way to get remote changes from a repo is the fetch command. fetch is a more atomic version of the pull command. fetch will both pull the new changes from the remote repo but also merge your local changes. note this only applies to your local clone, the merge that takes place after the pull will only be applied to your copy of the repo, but there's nothing stopping you from pushing it back to the server later.
    git fetch (remote name) (branch name)

    pulling from a new repositorygit log --graph
    deleing a merged branch
    git branch -d (branch name)
    deleing an unmerged branch
    git branch -D (branch name)

    merging

    the flip side of branching is merging. once you have completed your work on a branch you can merge those changes into another branch. these changes include file additions, deletions, and modifications. note that the syntax of the merge command takes the supplied branch name and merges it into your current, checked out, branch.
    git merge (branch name)
    e.g. merge the changes from a branch named topic into your master branch.
    git checkout master
    git merge topic

    for simple merges git will automatically figure out what's different between the branches and combine them (using git diff command internally). but sometimes the differences between branches are too complex or too ambiguous for git to decide on its own. in these cases git will issue a merge conflict. when a conflict occurs, git changes the code in the effected file(s) with conflict markers. these markers make it easy for you to see the differences between branches. all you need to do is delete the markers and leave the correct lines in the file. here's an example of what merge conflict markers look like:

    >>>>>>> HEAD
    This is the line in the master branch
    =======
    This is the line in another branch
    <<<<<<< branch_name
    

    once a conflict occurs, i find it simple to just grep the files in your repo looking for the conflict markers to find the files that need fixed before the merge can complete.
    git status --short | grep "^U[UAD]"
    i have this setup as an alias call git conflicts.

    once you have fixed all the merge conflicts stage the changes with git add then git commit them to the repository. i almost always mention fixing merge conflicts in the commit message after doing this.

    but sometimes after doing a merge things don't work, and you want to revert your repo back to its previous state. to undo a merge you will use the reset command with the --hard flag and set it back to its original head state
    git reset --hard ORIG_HEAD

    rebasing

    there are two main ways to integrate changes from one branch to another. the simple method previously discussed is the merge. but the alternative is called a rebase. here's the difference, a merge will perform a "three-way" merge between the two newest commits for two given branches and the most recent common ancestor of the two, creating a new commit. the rebase command takes a patch of the changes introduced in one branch and applies it to another branch. the rebase command takes the changes committed to one branch and "replays" them onto another one at a time. bebasing is used to create a cleaner git history. after doing a rebase, run git log and notice that your commit history has been altered. one of your branches will be missing and it's commits will now appear on your other branch, creating a more linear track of development. rebasing replays commits in their original order, as opposed to merging which takes the endpoints and merges them together.

    git rebase (branch name)
    to rebase the changes from a dev branch onto the master branch
    git checkout master
    git rebase dev
    it's also possible to rebase commits from multiple branches at once. just specify two branch names
    git rebase (branch name 1) (branch name 2)
    git rebase dev bugfix
    you can also specify where to apply the rebase with the --onto flag
    git rebase --onto (target branch) (branch to rebase)
    git rebase --onto master bugfix
    rebasing can get confusing, so git a an interactive rebase tool. use the -i{ating commits

    if the main point of git is tracking the state of files in your repo, what's the point if you cannot view them again later? git allows you to "travel through time" and revert your working directory to any previous state. to do this you use the checkout command.
    git checkout (reference) (filename)
    the reference can be a commit id (SHA-1 hash), branch name, tag name, or HEAD reference. optionally, you can supply a filename with your reference. if a filename is used, only that file will be reverted, otherwise the entire working directory will be changed.

    a note about HEAD references...
    at any given time a particular commit is labeled as the HEAD revision. this is the active point of development in your repo. whenever you add a new commit the HEAD will reference the newly created commit id. but if you checkout a previous commit, the HEAD will be moved to that particular commit id. when the HEAD is not pointing to the current tip of a branch this is called a detached HEAD. please note that you cannot intrinsically commit from a detached head. but it is possible to branch off from it and add commits to the new branch. moving around in history you will eventually want to put the HEAD back to bleeding edge and continue work as normal. the easiest way is to just checkout that branch again.

    but calling checkout with just HEAD makes no sense.
    git checkout HEAD
    since the HEAD is always where you currently are. instead checkout a previous HEAD.
    to checkout the previous commit before the current HEAD
    git checkout HEAD^
    or
    git checkout HEAD~1
    to check out 3 commits before the current HEAD
    git checkout HEAD^^^
    or
    get checkout HEAD~3
    notice a pattern here? there are 2 types of notations related to the HEAD reference. the up carrot (^) means one before, while the tilde (~) means the suffixing number before. as you can guess, no one wants to type 15 carrots to move back 15 commits ;D

    branching

    why? sometimes you need to experiment with your project, but don't want to mess up your current work. perhaps your working on two very similar, yet independent tracks of development. using a branch for each can help you keep your work parallel, yet separate. another reason could be working in a team environment; other people are working on the master branch while you're adding/testing new features in your own branch. later on you can merge your changes back into the main branch along with the work other people have done in the meantime. (more on merging later)

    when you create a new branch it forks off from your current commit. any new commits added will be viewed as an independent track of development. other commits can be added to the parent branch without affecting your new, or any other, branch.

    to view all the branches in your repo
    git branch

    notice the asterisk next to your current branch (default is master)? that denotes the branch you're currently working on.

    to create a new branch
    git branch (branch name)
    switch to a new branch (or commit)
    git checkout (branch name/commit id)
    create a new branch and immediately switch to it
    git checkout -b (branch name)
    git ships with a branch viewer called gitk. this application shows you a diagram of your repositories history. using the --all flag will show you all the branches in your repo, not just your current one.
    gitk --all
    you can also view your branches with the log command with the --graph flag
    NYC museum of modern architecture and design

    NYC museum of modern architecture and design

    NYC museum of modern architecture and design

    he last museum that we went to was the museum of natural history. which was really cool, but very busy. a lot of my photos from here didn't turn out as i hoped, so here's a few of the good ones.

    NYC museum of natural history

    NYC museum of natural history

    NYC museum of natural history

    NYC museum of natural history

    NYC museum of natural history

    and they had a REDICULOUS amount of dinosaur bones!

    NYC museum of natural history

    NYC museum of natural history

    NYC museum of natural history

    so, they don't let you inside the statue of liberty anymore. so what's the point of going to that tiny super crowed island just to try and look up lady libery's dress. so instead, john suggested we go to liberty park in new jersey to check out the statue. h the jet set. the flight was so short i barely beat metroid fusion on the plane ride there and back with 98% completion. we had a party thrown for our arrival, at my cousin ashley's house. i got to see all my relatives and meet my cousin's new baby angelina. she's a lil cutie. for the next few days we just hung out and went to beaches.

    its not a vacation unless there's a beach right?

    xero

    we spent one of the days in a town called jupiter. the beach was very nice, the sand smooth, the water warm. and my uncle knew about this cool lighthouse. there was a sweet banyan tree outside. the lighthouse was 7 stories and had a sweet spiral staircase.

    jupiter lighthouse

    jupiter lighthouse - spiral staircase

    jupiter lighthouse - hang over

    we saw some crazy stuff at the bass museum. weird stuff... after a few nights of sleeping at my cousin's house on an air mattress, we decided to spend our final night at a hotel. we stayed at a place in miami called the blue moon. it had this old 50's but still in good shape feel, but with a touch of modernism. the carpet was awesome. Good times were had by all.

    more photos

    bass museum

    cool painting

    CSI miami xero

    H( rr -15E  graffi  -15MU graffiti_patchespouch bomb patchesranger / vandal eyes

    graffiti patches when my son was born, i promised nina i'd quit doing graff in the streets. since then, i've been doing lots of blackbook and ipad art to placate my desires to write.

    since i got into metal and punk as a kid i've been collecting and wearing patches. mostly bands, but eventually morale patches. recently ranger eyes (smaller approximately 1x1 inch velcro backed pvc patches) have taken the EDC world by storm. i'd seen a few other graff style patches, and jon from inkpot artworks coined the term "vandaleyes" as a play on "vandalize" and "ranger eyes". so i decided to get involved.

    i came up with a sick "xero" bomb or throwie. and worked with dave @ on the DL brand, who suggested glow in the dark! to make them a reality.

    get em at: shop.xero.style

    when my son was born, i promised nina i'd quit doing graff in the streets. since then, i've been doing lots of blackbook and ipad art to placate my desires to write.

    since i got into metal and punk as a kid i've been collecting and wearing patches. mostly bands, but eventually morale patches. recently ranger eyes (smaller approximately 1x1 inch velcro backed pvc patches) have taken the edc world by storm. i'd seen a few other graff style patches, and jon from inkpot artworks coined the term "vandaleyes" as a play on "vandalize" and "ranger eyes". so i decided to get involved.

    i came up with a sick "xero" bomb or throwie. and worked with dave @ on the DL brand, who suggested glow in the dark! to make them a reality.

    get em at: shop.xero.style

    bR  l l} 11;SS bliss_sim_for_ipadBLiSS Sim for ipadmy first itunes release

    BLiSS Sim

    the Bioregenerative Life Support System Simulator, BLiSS Sim, is an ipad app, built with titanium studio, based on investigations conducted by NASA scientists and engineers to explore how plants can be grown to provide air, water, and food for astronauts at a lunar base.

    BLiSS uses a game format to engage youth and adults in the challenges of supporting humans in space or extreme environments on earth.

    The app is free and available for download from the iTunes Store.
    Visit the promotional website at: http://bliss-sim.cet.edu/

    BLiSS Sim

    the Bioregenerative Life Support System Simulator, BLiSS Sim, is an ipad app, built with titanium studio, based on investigations conducted by NASA scientists and engineers to explore how plants can be grown to provide air, water, and food for astronauts at a lunar base.

    BLiSS uses a game format to engage youth and adults in the challenges of supporting humans in space or extreme environments on earth.

    The app is free and available for download from the iTunes Store.
    Visit the promotional website at: http://bliss-sim.cet.edu/

    ORlound mod" src="https://blog.x-e.ro/ui/img/blog/prosound07.png" alt="wiring schema - gameboy prosound mod" width="710" height="180" />

    the wiring is pretty simple. there's 5 solder points that connect the potentiometer to the gameboys board. the top 2 we are going to ignore. they are volume into the pot. the next 2 are the left and right audio out of the pot and finally the ground.

    wiring complete - gameboy prosound mod

    when it comes to solder, less is more. this is true for both heat and actual metal. the amount of solder to use varies from gameboy unit to unit. some have a moderate amount, so you can just heat up whats already there and use your pre-tinned wires. but some have a huge blob there already. in those cases i suggest you remove the existing solder with some desoldering braid then use a tiny amount to connect your wires.

    wiring complete - gameboy prosound mod

    when doing this take your time. make sure you are connecting the correct prongs of the jack to the right pins on the board. the wiring pinout diagram should be on the packaging of the jack, and varies from model to model.

    reconnect the display cable - gameboy prosound mod

    now carefully reconnect the display cable. put your fingers under the edge on the ribbon cable and push it up into place. don't try and rock the cable back and forth to get it into place. this could rub off some of the metal on the leads. the photo is the cable fully inserted. notice how much metal is still showing.

    close the case - gameboy prosound mod

    the final step is closing the case. this can be tricky. take your time. make sure none of the prosound jack's wires are sticking out or stuck between the edges of the case when closing it. also keep the wires clear of the contrast dial. 

    the finished prosound jack - gameboy prosound mod

    now your gameboy is prosound modified! the added 1/8" jack will reduce background noise when recording and actually increase volume and give you added bass because it's a line level output. now pop in your favorite 8bit music application and make some chip tunes! 

    gameboy prosound mod

    I A~ 11;G= switching_to_linuxswitching to linuxdistrohoppers anonymous

    linux screen shot

    switching to from windows to linux is one of the best choices i have made in years. the freedom it provides is unparalleled. the fact that it's 100% free, the open nature of it's development, the community focus, and the abundance of free software was enough to convince me to give it a try.

    linux screen shot

    switching to from windows to linux is one of the best choices i have made in years. the freedom it provides is unparalleled. the fact that it's 100% free, the open nature of it's development, the community focus, and the abundance of free software was enough to convince me to give it a try.

    farewell windows

    i have been a long time windows user, it's served me well over the years. but recently i have become overwhelmingly sick of all the issues related to running it. every month (patch tuesday, inevitably followed by exploit wednesday) there's a plethora of updates, none of which ever seem to be related to security or stability. the so called windows "command line" is the saddest excuse for a terminal i have ever had the displeasure of using. and the "new" version, windows 8, has taken 10 steps back in terms of usability. the metro ui looks like AOL in the 90's, everything is hidden away from the user, it takes all your previous knowledge about your OS and tosses it in the trash.

    to be fair, i've had some linux experience before. in college we learned how to install it and connect to it via samba. i was given numerous live CDs featuring distributions like ubuntu, kororaa, and knoppix. i don't know why, but at the time i just wasn't interested in learning an entirely new OS. maybe my reluctance was based on the fact that i was still satisfied with my windows experience, maybe i was "too busy" learning new programming techniques, maybe it was fear of change. but whatever the reason, i just sort-of wrote linux off as a server OS.

    the terminal

    recently i have been using the terminal more and more. with the advent of GIT, i had started using MinGW. this added *nix like commands to windows. the more i used it the more i realized i was trying to force windows to be linux. i would research how to do something in linux then have to decide how to pull that off in windows. i learned to love the simplicity to move files with a single command versus dragging and dropping between two windows. the more i use the terminal the more i hate the mouse. have you ever tried to manually rename more than 100 files in windows? it's a painfully long process. with one command and some regex (regular expressions) you can do it in a few seconds from the twem>*all* your active jobs!

    once the crontab file has been edited the cron daemon will automatically read it and update it's job que to match the file. you should see the message:
    crontab: installing new crontab

    crontab file syntax

    the file can be separated into two parts:

    • the interval to run the job
    • the command to be executed

    here's a cheatsheet for the interval syntax

      .---------------- Minute (0 - 59)
      |  .------------- Hour (0 - 23)
      |  |  .---------- Day of the Month (1 - 31)
      |  |  |  .------- Month (1 - 12)
      |  |  |  |  .---- Day of the Week (0 - 6) (Sunday=0 or 7)
      |  |  |  |  |
      *  *  *  *  *  example-script.sh
    

    here's an example entry:
    this job would run every half an hour on monday through friday.

    30 * * * 1-5    echo "cron job executed"
    

    valid time values

    Minute          0-59 (* every minute at the start of each minute)
    Hour            0-23 (* every hour at the start of every hour)
    Day of Month    0-31 (* every day)
    Month           1-12 (* every month, you can use month names if you prefer)
    Day of Week     0-7  (0 and 7 both mean sunday, again you can use names - see below)
    

    an alternative to the six field crontab syntax would be the two field option which consists of two fields the date / time and the actual command.

    here's a list of the most common @ options for cron:

    @reboot     -   runs when the machine is started up or if the cron daemon is restarted
    @midnight   -   runs once a day at midnight (the equivalent of 0 0 * * *)
    @daily      -   alias of @midnight
    @weekly     -   runs once a week on sunday (the equivalent of 0 0 * * 0)
    @monthly    -   runs once a month on the first day of every month at midnight (the equivalent of 0 0 1 * *)
    @annually   -   runs once a year at midnight on the first day of the first month and (the equivalent of 0 0  1 1 *)
    @yearly     -   alias of @annually
    

    email results

    on the very first line of the crontab file you can specify an email address to send the results of the job to. using the following syntax: MAILTO=cron@x-e.ro

    the raw output of your job is will be emailed to the supplied address. the results could be echo statements, html, xml, json, whatever.

    examples

    on march 12th at 7:45pm load the http://x-e.ro/cron/job page

    45 19 12 3 * curl --silent --compressed http://x-e.ro/cron/job

    chaining multiple commands is exactly like regular shell commands. link them with &&, ||, or ;

    @midnight cd /var/www/x-e.ro/ && php cron.php

    every night at midnight load the http://x-e.ro/cron/job/2 with the supplied username/password

    @daily curl -u username:password --silent --compressed http://x-e.ro/cron/job/2

    a note about passwords in cron jobs

    if your password contains a special character (it should!) that might interfere with your bash script's execution, simply escape the character with a prepending backslash. so if your password was `P4s$w0rd!` use:

    @daily curl -u xero:P4s\$w0rd\! --silent --compressed http://x-e.ro/cron/job/3

    timezone pitfalls

    an important note about cronjobs is the fact that the execution time is tied directly to the server's time. make sure the server's time is in the timezone that you expect before setting up your jobs. execute the `date` command on the server and look at the time code on the end of the results.

    Thu Apr 18 11:52:19 EDT 2013

    the EDT suffix indicates the server is running on Eastern Daylight Time so it would execute in our local east coast time taking daylight savings into account.

    Thu Apr 18 11:52:19 UTC 2013

    the UTC suffix indicates the server is running on Coordinated Universal Time so the server's time is four hours *ahead* of our local east coast time.

    SMdo   +?e] linux_cron_jobscron jobsautomating tasks in linux

    cron jobs are automated scripts that run at a specified date/time, or on a specified interval.

    anything that can be executed in the terminal on the server can be run as a cron job (this includes commands, applications, scripts, etc).

    crontab is the command used to create/view/modify/remove cron jobs.

    • crontab -l lists all scheduled jobs
    • crontab -e allows you to edit jobs
    • crontab -r will delete *all* your active jobs!

    once the crontab file has been edited the cron daemon will automatically read it and update it's job que to match the file. you should see the message:
    crontab: installing new crontab

    cron jobs are automated scripts that run at a specified date/time, or on a specified interval.

    anything that can be executed in the terminal on the server can be run as a cron job (this includes commands, applications, scripts, etc).

    crontab is the command used to create/view/modify/remove cron jobs.

    • crontab -l lists all scheduled jobs
    • crontab -e allows you to edit jobs
    • crontab -r will delete < one command away.

      git is distributed.
      managing your project with git can be either completely offline or a combination of on and offline. git can do almost everything offline: adding, committing, branching, merging, etc. many SCMs think this is a bad thing, but i couldn't disagree more. you can use git with a centralized server or not. it has all the powers of subversion and more.

      cheap branching.
      with git, it takes less than a second to create a branch. everything happens in your local repository so there's no need to connect to a central server. you can create a branch to test a new feature, try new techniques, etc, without affecting your "master" branch. you can switch between branches on the fly and watch the contents of your working directory change immediately after executing the command. and, if you want, you can branch out from another branch, or merge it back into another branch.

      git is clean.
      there is only one .git folder for your entire project. other source code management systems, like subversion, create SCM folders in every directory. with git you can easily remove or rename directories in your repository without the worry of messing up things up. and if you want to remove SCM from your project is it's a snap with git, just delete the single .git directory and you're done.

      data assurance.
      the data model that git employs ensures the cryptographic integrity of every bit of/in your project. every object in your repository is checksummed via SHA-1 hash. this hash both identifies objects and is used to check them in and out of the repository. it's impossible to retrieve something from a git repository other than exactly what you put in. it's also impossible to change anything in the repository (filenames, content, timestamps, commit messages, or any other tracked data) without changing all the hash ids of everything after it. a real world example of this is when the linux kernel site was hacked.

      nomenclature

      the git community uses many terms and abbreviations, let's start by demystifying some of them

      SCM = source code manager/management
      an application used to manage your code. some examples would be:

      • git
      • subversion (svn)
      • mercurial
      • bitkeeper
      • cvs

      each of these work differently. they have similar goals, managing your code, but do it in very different ways. wikipedia has a good article on comparing and contrasting them. this article will (obviously) be focused on git, but i will mention SVN from time to time.

      metadata
      where all the git magic occurs. these are the "behind the scenes" files that git creates and uses, these files all live in the .git directory.

      commit
      a commit is a full snapshot of your repository at a given time. git identifies commits by a 40 character SHA-1 hash. but 99% of the time people use the "human hash" version, which is just the first 7 characters of the hash identifier (git will complain if a shortened id is ambiguous and give you suggestions). if you're worried about hash collisions in git, read linus' retort from the mailing list.

      repo = repository
      a git repo is a repository of code that's being managed by git.

      working directory
      the area where your checked out files reside. files in the working directory are ready to be viewed, modified, or added or removed from the index.

      index
      the staging area where files are added/removed prior to committing them to the repository. this index is also sometimes referred 99 ??; ??]- atom_editor_linux_installatom editor linux installrunning github's open source text editor

      update: this post is outdated & atom sux

      atom text editor linux screenshot

      atom is a "hackable text editor for the 21st century" created by the team at github. it's designed to be customizable, but also usable without needing to edit a config file.

      because we spend most of our day in a text editor, the single most important feature we wanted in an editor was extensibility. atom is built with the same open source technologies used by modern web browsers. at the core of atom is chromium, the open source project behind google chrome. with that comes all the power and innovation being developed for the web. but more importantly, extending atom is as simple as writing javascript and css, two languages used by millions of developers each day.

      atom.io

      update: this post is outdated & atom sux

      atom text editor linux screenshot

      atom is a "hackable text editor for the 21st century" created by the team at github. it's designed to be customizable, but also usable without needing to edit a config file.

      this quote really sums it up perfectly:

      because we spend most of our day in a text editor, the single most important feature we wanted in an editor was extensibility. atom is built with the same open source technologies used by modern web browsers. at the core of atom is chromium, the open source project behind google chrome. with that comes all the power and innovation being developed for the web. but more importantly, extending atom is as simple as writing javascript and css, two languages used by millions of developers each day.

      atom.io

      the project is open source under the MIT license. you can checkout the repo's here.

      let me start off by saying i use the sublime text editor all-day, everyday. it's the editor of my dreams. it's super fast, has great syntax highlighting, spell checking, code completion, support for tons of languages and build systems, an awesome package control system, theme support... i can keep going. i can also say the sublime is the first application i have PAID for in many years. so when i read that github was building an open source alternative i was immediately intrigued.

      until now atom has only been available for beta testing on mac osx. but today they released the source code! which means that developers for the big three (mac, windows, & linux) can now build and install the app themselves.

      installing on #! / debian

      for installation on debian based systems you will need to compile it yourself. it's simpler than it sounds.

      requirements:

      • os with 64-bit architecture
      • python 2.x
      • node.js v0.10.x

        nina and xero with the stanley cup

        on thursday will calls me up and says...

        the nhl draft is this weekend in columbus ohio.
        you and nina are coming with me, i already have tickets.

        weird willy

        ...and it was on.

        the new area for the blue jackets was really nice! i cant wait until pittsburgh has a new arena. so after our 2 hour drive we arrived in columbus. amazingly i was able to park in the arena lot, right by the entrance. and their was this cool puck sticking out of the building above my car...

        NHL draft

        we gave the people our tickets and they handed us nhl draft towels, now even other sports are trying to steal the terrible towel. so the first thing i noticed when we walked up the stairs was the stanley cup. just sitting right there, not behind glass or anything. we waited in line for about 20 minutes until it was our turn with the cup. we got to touch the stanley cup! ( but i blinked in the photo :P ) after that we found out that the penguins draft pick wasn't for another hour. so we walked around and checked out the stadium. their were trophies everywhere! here's nina and i with the art ross trophy!

        NHL draft - art ross trophy

        we took like 100 photos of us with all of them. i was "that guy" photo-bombing in the background of a lot of people photos... lulz!

        NHL draft - photo bomber

        after that we still had some time to kill, so we left the arena and ate at my favorite restaurant in columbus, zen. it's a sushi bar, that has 15 different brands of saki. needless to say we ate tofu and got drunk.

        NHL draft - sushi break

        with a full stomach, we meandered back to the draft just in time to see the pens pick. we hung out at the arena for a while longer then went to check out more of the city. in the parking lot will turns to us and says...

        i swear i hear motley crue in the distance. Yeah!
        it's either them, or the best crue cover band alive!

        weird willy

        turns our will was right... down the road on neal street, vince neal was playing! we listened to the show from afar for a while then hit the bar. we ended up at mac's scottish pub, where i had the best black and tan of my life! we had was a blast!

        F  K9'I9 managing_dotfiles_with_gnu_stowmanaging your dotfileswith gnu stow

        preview of xero's shell

        in the *nix world programs are configured in two different ways, via arguments in the terminal or text based configuration files. programs which have many options like your shell, window managers, or even text editors are configured on a per-user basis with files in your home directory ~. in unix like operating systems any file or directory that starts with a period or full stop character is considered hidden, and in a default view will not be displayed. thus the name dotfiles. it's been said of every console user:

        you are your dotfiles

        ok, i said that ;P

        i manage mine with gnu stow, a free, portable, lightweight symlink farm manager. it allows me to keep a versioned directory of all my config files that are virtually linked into place.

        preview of xero's shell

        in the *nix world programs are configured in two different ways, via arguments in the terminal or text based configuration files. programs which have many options like your shell, window managers, or even text editors are configured on a per-user basis with files in your home directory ~. in unix like operating systems any file or directory that starts with a period or full stop character is considered hidden, and in a default view will not be displayed. thus the name dotfiles. it's been said of every console user:

        you are your dotfiles

        ok, i said that ;P

        since they dictate how your system will look and function. to many users (see ricers and beaners) these files are very important, and need to be backed up and shared. people who create custom themes have the added challenge of managing multiple versions of them. i have tried many organization techniques. and just take my word for it when i say, keeping a git repo in the root of your home directory is a bad idea. i've written custom shell scripts for moving or symlinking files into place. there are even a few dotfile managers, but they all seem to have lots of dependencies. i knew there had to be a simple tool to help me.

        i now manage my dotfiles with gnu stow, a free, portable, lightweight symlink farm manager. it allows me to keep a versioned directory of all my config files that are virtually linked into place via a single command. this makes sharing these files among multiple users (mine, root, xmbx, etc) and computers (desktop, laptop, webserver, htpc) super simple. and does not clutter your home directory with version control files.

        installing

        stow is available for all gnu/linux and most other unix like distributions via your package manager.

        • sudo pacman -S stow
        • < K9'e managing_dotfi R K9'  managing_dotfiles_with_gnu_stowmanaging your dotfileswith gnu stow

          preview of xero's shell in the unix world programs are commonly configured in two different ways, via shell arguments or text based configuration files. programs with many options like text editors are configured on a per-user basis with files in your home directory ~. in unix like operating systems any file or directory name tha?_Interface" target="_blank">UEFI bios and will be using gummiboot as my boot manager.

          start by downloading the arch linux install medium and burning it to a usb stick or cd. boot to the install medium (check your bios boot order) and you will be greeted by the prompt:

          root@archiso ~ #

          quick note about sudo

          in an attempt to keep this post cleaner, i will only mention the commands needed. if permissions errors arise, preface commands with sudo as necessary.

          internet

          the first test is getting your internet working. out of the box there is a good chance your wifi will not work. so i start the install process via ethernet. start dhcp and try pinging a site to test your connection

          • dhcpd
          • ping www.google.com -c 3

          if ethernet is not an option you can try android/iphone tethering.

          view drives

          next you'll need to take a look at your drives and decide on a partitioning scheme.

          • lsblk
          • lsblk -f

          partitioning SSD

          • gdisk /dev/sdb
          • o (delete all)
          • n (new)

            efi boot

            • choose 1 to select 1st partition.
            • Leave start sector at default by pressing Enter
            • change end sector to +512M (it is important to keep it at this size).
            • For the type enter the code ef00 (EFI).

            root

            • use all the defaults!
            • choose 2
            • leave start
            • leave end
            • type 8300
          • p (check tables)

            Number    Start         End         Size    Code   Name
            1          2048     1050623    512.0 MiB    EF00   EFI System
            2       1050624    62533262     29.3 GiB    8300   Linux Filesystem
          • w (write the changes)

          partitioning HDD

          • gdisk /dev/sda
          • o (delete all)
          • n (new)
          • home

          • use all the defaults!
          • choose 2
          • leave start
          • leave end
          • type 8300
          • w (write the changes)

          check your work

          • lsblk

          create file systems

          • mkfs.fat -F32 /dev/sdb1
          • mkfs.ext4 /dev/sdb2
          • mkfs.ext4 /dev/sda1
            • if you made a swap:
            • mkswap /dev/sdaX
            • swapon /dev/sdaX

          check your work

          • lsblk -f

          mount the file systems

          • mount /dev/sdb2 /mnt
          • mkdir /mnt/boot
          • mkdir /mnt/home
          • mount /dev/sdb1 /mnt/boot
          • mount /dev/sda1 /mnt/home

          install the base system

          • pacstrap /mnt base base-devel

          setup fstab

          • genfstab -U -p /mnt >> /mnt/etc/fstab

          configuring the system

          • arch-chroot /mnt

          you will be greeted with the prompt:

          sh-4.3#

          create locale file

          • remove the "#" in front of the locale(s) you need, en_US.UTF-8 in my case
          • vim /etc/locale.gen

          save the file and generate the locales

          • locale-gen

          locale.conf

          • echo LANG=en_US.UTF-8 > /etc/locale.conf
          • export LANG=en_US.UTF-8

          setup the hostname, envy in my case

          • echo envy > /etc/hostname

          install the bootloader

          the mount command will most likely result in an error/warning due to it being loaded already.

          • mount -t efivarfs efivarfs /sys/firmware/efi/efivars
          • pacman -S gummiboot
          • gummiboot install

          create a configuration file to add an entry for Arch Linux to the gummiboot manager

          • vim /boot/loader/entries/arch.conf

          the contents of arch.conf file should be:

          title Arch Linux
          linux /vmlinuz-linux
          initrd /initramfs-linux.img
          options root=/dev/sdb2 rw

          ^ note the value of root should be your root partition (not boot).

          make sure we have a network connection after we reboot

          • systemctl enable dhcpcd.service

          set root password

          • passwd

          create a user, xero in my case

          • useradd -m -g users -G wheel -s /bin/bash xero

          create a password for user

          • passwd xero

          add user to the sudoers group

          • echo 'xero ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

          exit out of the chroot, unmount and reboot

          • exit
          • umount -R /mnt
          • remove the install medium
          • reboot

          if the system boots:

          • victory dance!

          post install

          enable the multilib repository

          • vim /etc/pacman.conf

          find the following lines and remove the "#" in front of them and save.

          • [multilib]
          • Include = /etc/pacman.d/mirrorlist

          using pacman

          pacman is the arch linux package manager. since arch is a rolling release distribution you will be using it a lot to install, remove, and update binary packages on your machine. here's a quick rundown of the most common commands:

          • search for a package

            pacman -Ss name
          • install a package

            pacman -S name
          • remove a package

            pacman -R name
          • update a package

            pacman -U name
          • update all packages

            pacman -Syu
          • count installed packages

            pacman -Qu | wc -l

          sync the package databases

          • pacman -Sy

          install xorg

          • pacman -S xorg-server xorg-server-utils xorg-xinit mesa

          video card drivers

          it's intel in my case, but might be different for you! check out the arch wiki for more information.

          • pacman -S xf86-video-intel

          trackpad drivers

          • pacman -S xf86-input-synaptics

          what to do when things break

          when updating with pacman -Syu sometimes things will break. if you update often, less new packages are introduced to your system at a time. this makes debugging and/or reverting offending packages easier. but here's the steps for recovery from say, a kernel panic.

          • boot the arch install iso (some suggest to install it as a recovery partition)
          • mount your partitions (run lsblk and df -h to view current drive labels, because the arch iso sometimes gets mount name precedence and will change their normal labels.)
            • mount /dev/sdb2 /mnt
            • mount /dev/sdb1 /mnt/boot
            • mount /dev/sda1 /mnt/home
          • chroot

            • arch-chroot /mnt /bin/zsh or arch-chroot /mnt /bin/bash depending on your shell preferences
            • downgrade packages. make sure you chose the old package name. remember you're not uninstalling, you're "updating" to an older version.
            • cd /var/cache/pacman/pkg
            • pacman -U old_package_name.pkg.tar.xz
              • in the case of a kernel issue revert both the linux kernel package as well as linux-headers.
          • exit chroot
          • systemclt reboot reboot

          time

          • timedatectl status
          • timedatectl list-timezones
          • timedatectl set-timezone America/New_York
          • timedatectl set-time "2014-05-31 04:20:09"
          • ^ obviously use the correct localtime!

          internet setup

          check the configuration of your /etc/hosts file, a valid configuration looks something like this:

          #<ip-address>  <hostname.domain.org>    <hostname>
          127.0.0.1      localhost.localdomain    yourHostname
          ::1            localhost.localdomain    yourHostname

          install the network tools

          this will install both the necessary system packages as well as the gui network manager applet, because i'm lazy and it doesn't load all the gnome dependencies.

          • pacman -S wpa_supplicant wireless_tools networkmanager network-manager-applet gnome-keyring

          make the networkmanager start on boot:

          • systemctl enable NetworkManager.service

          disable dhcpcd

          since networkmanager wants to be the one who handles the dhcpcd related stuff, you have to disable and stop dhcpcd:

          • systemctl disable dhcpcd.service
          • systemctl disable dhcpcd@.service
          • systemctl stop dhcpcd.service
          • systemctl stop dhcpcd@.service

          enable wifi

          enable the wpa_supplicant to use your wireless connection:

        • systemctl enable wpa_supplicant.service

        permissions

        add your user to the network group:

        • gpasswd -a xero network

        turn off network interface controllers

        use your own device names from the result of the ip link command if not eth0 and wlan0

        • ip link set down eth0
        • ip link set down wlan0

        start the networking services

        • systemctl start wpa_supplicant.service
        • systemctl start NetworkManager.service

        reboot and your networking should be ready.

        if the hardware switch is still disabled:

        • systemctl enable rfkill-unblock@all.service
        • and if that *still* doesn't work, perhaps try booting into another os, enable your wifi then hard power off the device.

        at this point you should have a working system ready to build. from this point you can install your dotfiles and the desktop environment or window manager of your choice and start crafting (ricing) your personal system. i will be talking about this more in a upcoming post.

        UM f <fL S5  vimvimwhy i use an editor from the 1990's

        contents

        vim

        contents

        • editor vs ide
        • simple
        • everywhere
        • vim
        • help
        • configurable
        • extensible
        • multiple files
        • interface
        • <pe ??C mysql_string_replacementsmysql string replacementsquick and dirty sql example

          sometimes you find the need to do mass string replacements in your mysql/maria databases. here's how i do it:

          UPDATE your_table
          SET your_field = REPLACE(your_field, 'old_value', 'new_value')
          WHERE your_field LIKE '%old_value%'

          sometimes you find the need to do mass string replacements in your mysql/maria databases. here's how i do it:

          UPDATE your_table
          SET your_field = REPLACE(your_field, 'old_value', 'new_value')
          WHERE your_field LIKE '%old_value%'
          P0 !!'[; arch_linuxarch linuxinstall guide

          this is my arch linux install guide. it's not meant to replace the beginners guide or the install guide, but act as a quick overview of exactly what the install process entails. hopefully this will encourage those intimidated by the terminal only install process.

          this setup is for my HP Envy 6t-1000 laptop. it has a 32gb ssd drive with two partitions for boot and / and the other 500gb hdd is my home. my laptop has plenty of ram so i do not use a swap. my laptop also has UEFI bios and will cover it's install procedure.

          boot to the install medium and you will be greeted by the prompt:

          root@archiso ~ #

          this is my arch linux install guide. it's not meant to replace the beginners guide or the install guide, but act as a quick overview of exactly what the install process entails. hopefully this will encourage those intimidated by the terminal only install process.

          this setup is for my HP Envy 6t-1000 laptop. it has a 32gb ssd drive with two partitions for boot and / and the other 500gb hdd is my home. my laptop has plenty of ram so i do not use a swap. my laptop also has windows, linux and mac. the source code is also available.

          personally i use, and suggest first learning, the command line version. this article will focus on git from that perspective. if you first understand the commands, using a GUI will make a lot more sense.

          additional front-end tweaks

          **this section is completely optional, and has no effect on using git.**

          i primarily use windows (i dabble in linux), and have a few more notes about git for windows. windows doesn't have a native "terminal", only a lame "command prompt". so git is shipped/powered by a terminal emulator called minGW. this application by itself is amazing. it adds many linux bash commands (and shell scripts!) to windows that you can use with or without git (e.g. grep and ssh). but alas, the minGW terminal window is pretty lack-luster. that's why i use a terminal front-end called console2. console2 adds lots of great features, some functional others aesthetic. it supports multiple terminals, i personally use the windows command prompt, git/minGW, and shortcuts to the python interpreter and mysql console. it features tabs for multiple open terminals, copy/paste functionality, customizable hotkeys, resizable windows, transparency, background images, personalized colors, and more.

          after installing console2 you need to set it up. run the application and right click anywhere on the screen and select: edit >> settings. then choose "tabs" from the accordion menu on the left. the default tab for the windows command prompt should already exist, notice the "shell" value is set to cmd.exe create a new tab and name it git bash (or whatever). set the shell value to your install location of git with the \bin\sh.exe application suffexed with --login - i
          mine looks like this:
          C:\Program Files (x86)\Git\bin\sh.exe --login -i

          you might also want to make this your default tab for console2. while you're here, check out the other options like the cursor style and color, window title and icon. also, go under the "behavior" options and enable copy/paste (you'll thank me later). you can paste by pressing the insert key or right clicking the window and selecting: edit >> paste. to copy text from the terminal hold the SHIFT key and highlight your text with the mouse (yeah i know, it sux using the mouse as opposed to the keyboard arrow keys, but it's better than nothing).

          custom welcome screen.
          it's possible to setup git to run a number of tasks when it first loads via a shell script. tn your user's home directory (windows: C:\users\your_user_name\   linux: ~/) there's a hidden file called .bashrc (if it's not there just create it. enter: touch .bashrc in the terminal). you can do two things in this file, create aliases and set default files to run on startup. the last line on my .bashrc is ~/ascii.sh — this a script that displays some ascii art i made. since it's listed (on its own line) in the file, it will be called after application startup. the contents of that file are as follows:

          #!/bin/sh
          clear
          echo -e "                             "
          echo -e "  \e[00;32m      xxx         "
          echo -e "  \e[00;32m      xxx        \e[01;33m welcome to GIT"
          echo -e "  \e[00;32m xxxxxxxxxxxxx   \e[01;33m the information manager from hell"
          echo -e "  \e[00;32m xxxxxxxxxxxxx    "
          echo -e "  \e[00;32m      xxx         "
          echo -e "  \e[00;32m      xxx         "
          echo -e "  \e[00;32m                 \e[01;37m " $(git --version)
          echo -e "  \e[00;31m xxxxxxxxxxxxx   \e[01;37m powered by console 2.00.148"
          echo -e "  \e[00;31m xxxxxxxxxxxxx    "
          echo -e "                             "
          echo -e "  \e[01;30m   xx   xxxxxx    "
          echo -e "  \e[01;30m  xx    xx xx    \e[01;37m run \e[00;32m'git help git'"
          echo -e "  \e[01;30m xx     xx  xx   \e[01;37m to display the help index."
          echo -e "  \e[01;30m xx         xx    "
          echo -e "  \e[01;30m  xx       xx    \e[01;37m run \e[00;32m'git help '"
          echo -e "  \e[01;30m   xxxxxxxxx     \e[01;37m to display help for specific commands."
          echo -e "  \e[01;30m     xxxxx        "
          echo -e "\e[00m                       "
          

          if you save that file as ascii.sh in your home directory, add it to the .bashrc, and restart console2... BOOM! some awesome looking ascii art appears every time git runs :D
          ok, enough of that, let's take about git.

          configuration

          you should start by globally telling git who you are. your name and email are used in all commit messages. the global values will be used by default for all your git repositories.

          git config --global user.name "xero harrison"
          git config --global user.email "x@x-e.ro"

          this information is saved in the .gitconfig file in your home directory
          (windows: C:/user/your_username/   linux: ~/)
          to view this information use:

          git config user.name
          git config user.email

          if for some reason you'd like to override your default config settings in a specific repo issue the commands:

          git config user.name "xero harrison"
          git config user.email "x@x-e.ro"

          notice we dropped the --global flag, this tells git to apply these only to the repo we're working in.

          terminal navigation

          it's easy to reenter previous commands.
          you can scroll through your terminal history by pressing up and down.

          most commands can be auto-completed by pressing the tab key, even branch and tag names.
          gi <tab> chec <tab> ma <tab>
          will autocomplete to:
          git checkout master

          creating aliases will speed up your workflow by making you type less. you can manually add them to the .gitconfig file but there's a simple command to create them automatically. if you want to add a global alias to call the git checkout command simply as git co enter:
          git config --global alias.co=checkout
          if you wanted to add an alias for just the current repo drop the --global flag.

          a good, all be it very dangerous, alias git undo will remove any changes in the current branch. since these changes have not yet been committed to SCM this action is irrevocable.
          git config alias.undo=reset --hard

          one of my favorite aliases is a custom version of git log. it adds cool ascii art branch graphs, and IMHO just the right amount of commit info is git graph:
          git config alias.graph=log --graph --color --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"

          this brings me to paging. when your repo has a long enough history, like 6 or more commits, not all of that data can be displayed on the screen at once, so the terminal will page it. for those of you unfamiliar with the linux terminal, paging describes when only one page of data is displayed at a time. this feature is a holdover from the days before you could just scroll backwards, but it makes viewing a large amount of data more pleasant. when information in the terminal is being paged the command prompt at the bottom of the screen will be replaced by a colon and the blinking cursor. if you want to move up or down a single line press the up or down keys. to move down an entire page at one press the space bar or to move up or down a page press the page up or page down keys. when you reach the end of your paged data the colon at the bottom of the screen will be replaced with the word END in an inverted color pallet. to quit paging, at any time, just press the Q key.

          terminal primer

          first off, every command in both git and the terminal have help documentation built in. for general terminal commands, call the command with the --help flag to view the man pages for the command
          cd --help
          ls --help
          grep --help

          git has its own command called help, that you pass the command you want to know more about to it
          git help branch
          git help commit
          git help stash

          working with the file system.
          you change directories with the cd command:
          move to a subfolder
          cd (name)
          move up a directory
          cd ..
          move up a directory and into a subfolder called docs
          cd ../docs
          change to your home directory
          cd ~/

          You can view files in your current directory with ls command:
          ls

          create a directory
          mkdir (name)

          delete a file or directory
          rm (name)

          delete a directory and all its files and sub directories
          rm -rf (name)

          rename/move a file
          mv (old) (new)
          mv README.txt README.md
          mv dev/file.txt release/file.txt

          basic concepts

          tracking
          unlike other SCMs, git tracks the states of files, not necessarily the files themselves.

          if you want to see a list of the git commands just open the terminal and enter
          git

          this will display a list of the so-called "porcelain" commands. these are the high level commands that you will normally use. but if you want to see the full list of "plumbing" commands that the higher level commands and git itself uses internally enter
          git help --all

          if you want to see the current version of git that your using enter
          git --version

          starting out
          to initialize a git repo in your current directory
          git init
          git will display a message that the repo was initialized successfully, similar to:
          Initialized empty Git repository in c:/repos/test/.git/

          you will also notice that the directory name in the terminal will now say (master) after it. this tells you the current branch you're working on with git (master is the default).

          when git creates a new repository it's empty by default. to manage a file's content you'll have to explicitly add it to the repo to be tracked.

          ignoring files
          create a file called .gitignore in the root of your project (actually you can put this file anywhere, or put multiple ones in multiple directories). then list all the files or expressions for files git should ignore. e.g.
          *.log
          /db/schema.sql
          #this is a comment
          thumbs.db
          but just creating the .gitignore isn't enough... you'll need to add it the repository for git to track.

          adding and staging files to be tracked by git
          once you have created or edited a file in your repo, stage it
          git add (filename)
          once the file is staged, git is ready to add it to the next commit.
          you can add files individually by using git add with a filename
          git add index.php
          or multiple files
          <kbd>git add index.php login.php /somedir/somefile.php
          or you can add all the files in the current directory by using
          git add .
          (fyi: the argument . [period or dot] in linux parlance, is shorthand for the current directory)

          moving, renaming, and deleting tracked files
          once you have added a file to git you can move or rename it the same way as you do in the terminal, just prefix the command with git
          git mv (old file) (new file)
          similarly, you remove files in the same manner
          git rm (filename)
          moving and renaming files this way will keep your git workflow simple. in the end, calling git mv is the same as if you'd delete the file with git from a location then add it back in a new location. since the content of the file has not changed, only its location, the file will still have the same SHA-1 hash and a new blob object will not be added to the database. only a new tree and new commit will be created.

          viewing the current status of your working directory
          to see what's ready to be added or removed in your next commit
          git status

          or use the --short or -s flag to view the shortened output
          git status -s
          git status --short

          calling status will show you a list of the files to be added, modified, or deleted from the repo in the next commit. this gives you a general overview of the differences between your index and HEAD commit as well as untracked files in your working directory. but you can dig deeper than that...

          to view the exact changes made to a particular file you can diff it
          git diff (filename)

          the diff output will show you all the changes made to the file on a line by line basis. additions are marked by a plus and deletions are marked by a minus (optionally they are colored in green or red, respectively, if you have colored output enabled).

          if that's too much data for you to digest you can use the --stat flag to show only the number of insertions and deletions in the file.

          git diff (filename) --stat

          you can also diff branches
          git diff (branch name) (other branch)

          saving a moment in time
          once you have made some modifications, and added all the files you want to track, you're ready to commit it to the repo and save a snapshot of that moment.
          git commit

          the commit command has a few arguments that you might want to use.
          git commit -m 'your commit message'
          use the -m flag to append a message to your commit inline, otherwise git will open your text editor for you to enter a message in.
          git commit -a
          using the -a flag will automatically add all the files already staged that have been modified since the last commit. that means any files you've already added, not new ones.
          or you can combine those two into one!
          git commit -am 'a commit message goes here!'

          viewing the state of files in your index and working directory
          to view files that have been added to the index and working tree use ls-files.
          git ls-files
          to show detailed information about staged files
          git ls-files --stage
          to show other untracked files in the working directory
          git ls-files --other
          to view ignored files
          git ls-files --ignored

          viewing history
          git has a to|ol to help visualize the commit history of your repo called git log. the log aggregates the data from your commits including: the manifest of files, commit message, committer name and email, date and time, and the parent commit(s). the log command has a variety of options so you can configure it however you like. or use it in different ways for different scenarios.

          running git log with no options will give you a chronological list of commits from newest to oldest.
          git log
          for a more compact view add the --oneline flag
          git log --oneline
          but so far these are linear views of history. if you're interested in seeing branches use the --graph flag. this will add cool ascii art branch diagrams to the log results.
          git log --graph

          you could also combine the --graph and --oneline flags for a more compact graph
          git log --oneline --graph
          another command I find useful coupled with --graph is --color. this will colorize the output of the log command. in my opinion, this makes viewing the branch topology much easier.
          git log --color
          another interesting command is --reverse, this will display git's history in reverse order
          git log --reverse
          so far we've been looking at the logs of our entire repo. but if you want to view the history of a single branch just append the branch name to the command. these results will show you all commits that are "reachable" from that branch. this will include parent commits from the branch you diverged from.
          git log (branch name)
          it's also possible to have git log show you commits that are present in one branch, but not in another. this is achieved by using two branch names with the second being prefixed with an up carrot (^)
          git log (branch name) ^(branch name)
          e.g. show a log of the commits in the topic branch that are not in the master branch:
          git log topic ^master
          log will also allow you to limit your results. the simplest method is to use the -n flag, where n is the number of commits you want to show.
          show the previous commit
          git log -1
          show the previous 5 commits
          git log -5
          you can also specify a range of commit in since..until format (this is called symmetric difference)
          git log (commit id 1)..(commit id 2)
          e.g.
          git log dd342da..f9c0201
          notice in your results commit dd342da63c is not displayed. git log's formatting will always give you everything beyond your first supplied revision. the command above is the same as calling:
          git log ^dd342da f9c0201
          your basically saying: show a log of commits that are reachable from f9c020193e excluding those reachable from dd342da63c.
          you can also customize the output formatting if the log results by using the --pretty flag.
          pretty-print has a few "simple" options: oneline, short, medium (default), full, fuller, email, and raw.
          but you can define your own custom style with format. format has *A LOT* of options.
          i have overviewed them in this gist on github.
          personally, this is the pretty-print that i prefer:
          pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"
          but how you prefer your output is complete up to you. now that you have your "perfect" log created, i suggest making it an alias. then displaying your log, formatted the way you like it, is just one command.

          log as lots more options, take a look at the git help (git help log) for a complete list.

          navig $ ,$` `$ a$$ $ a' ' $' $ $ $ $ $ $$' `$ $$' `$ ,$ $., $' a$' `$$' "$' `$" $' $' $' `$ a,$, `$,a ' a$' $$$ $ $`$ $' $, $ $' $' `$, ,$' a$' $ $ $ `$ '$ . $' .a$' __.__ | \ ________/\ a$' $' ____ / / \ ____| |__ / ____ \ \ $' '$ / \ / / \/ | | \ / / /\ \/ a$' '$ / /\ \/ /\ /''| |\ \ / / / \ \ ,$ '$ --- \ / \/\ \ | | \ \ \ \ / / \ \ $' $, a'$ / \ / \ | | / / \ \/ / / / $' .$$ $ $ '$ / /\ \ / /\ \| |/ / \ / / / / .$ $ ,$ $., '$ / / \ \/ / / /| |\ \ / /__/ / ,$ ,.$$ '$" --- \ / \ / | | \ \___/ /_____/ ., '$,a ---- \/ | | \_______/ '$ $' | / o w n s . u s $a. $' : '$ $ ,a" , '$ `,a" $ a,$ +++ G H [ ] S T . R I D E R +++ 'a a' "$$' , `a$ $ $ a' ,$, +++ 8 O H 6 +++ a,.$ $.,a$"' ,$'`$ '"$` `$"' ,a$' `$, a,$` `$,a$' $ ,aaaa$"" $$$$$$$$$$$aaa, '$ $' `a$ ,aa$"" aa"aa$$$"$$$$$$$$$$$$$aa '$, ,$' ; a$$$" aa$$$a $$a$$$$$$l$$$$"$" ""$a $ $ ,a"$ $ a$$$"a$$$"$$$ $$ "aa""aa""$ $"$$a a"$ ", $ $' ,$" ` ,$' $ $"$$$$"$$$$$$1 $$a "aa$$1 a a""" a$a " $$ $ $ $ $a a' $$$$$$$$$$""""$$$$$ia$$$$$,1$$$$a$$$$$$$a1$$ $' ',$' ,a$a `a $$$$$$$$$aa$$$$a ""$$$$$$$"$$ l$$'$$$$$$$a$$$ $' $ ,a" `a' ` ,$$$$$$$$$$$$$$$$$, """"$$$$$$a$$$$`$$$$$$$$$, $' ,$" $$$$$$$$"$$$$$$$$$" a$$$$$aa`"$$$""$$1;$$$$$"aa$a `,a" $ a,$ $$$$$$$$$$$$"$$$$$ a$$$$$"""$$aa`$$a$$ $$""a$$$$$$ a' "a$' `a$ $$$$$$$$$$' ""' a$$$" "$$a`$"" aa$$$"$$$$' $ $ "$$$$"""' a$$$$ `$$$a"$$$$"a" " $. 'a a"$a$$" a $$$$$$' `""$$$$' `$'$ $ 1 $$" a$$ $$$$$ a$$" `$,`$ `a ,`$ $ "$$a $$$$$ $$$' , `$ ` $ $ `$ $$" aaa "$$$$$a $$$' a1 ,$ `$a' " 1a$$$$$$$aaa"""$$$$$$$aa $$$l laaaa""$a .$' $ `"""$aa$$$$$$$$$$"$$$$$ $$$aa$$" $' [xero!nu] `"aaa""$$$" $$$$$$$$" "$a1$$ a $$$$$$' $ "" z`"" $"""" 1$$$a$$$$$"$$"' `a a' $$$aa a$al$$$$$$$a$$1' `a,aa," a"" $$,$$$"l$$$1"$$"$ $ $" a""aa",a $"aa""a" a ' ,`$ "$$l$1 $$$ $$"$" " `$ `$ $' ` ' `

    88t f C57 bbs_scenebbs scenethe roots of ansi/ascii artacid underword bbs circa 2018

    i've been a long time fan of text mode art. i got my first glimpse into that world back in the nineteen hundred and nineties, with groups like ACiD and iMPURE!aSCii 1940 aka iMP. i have a few pieces in their new artpack #63.

    x0 - impure / xero graffiti logo

    i've joined up with yet another ansi/ascii art group, this time it's some amiga scenesters called iMPURE!aSCii 1940 aka iMP. i have a few pieces in their new artpack #63.

    x0 - impure / xero graffiti logo

    impure / xero graffiti logo
    view full size: png / txt / ans

    x0 - fsociety mask

    mr.robot / fsociety mask
    view full size: png / txt / ans

    WY^ +ICw/ zelda_ascii_artlegend of zelda ascii/ansi artas a member of blocktronics

    my love of ansi/ascii art has been growing lately. i've joined up with the prolific group blocktronics aka 67. my first scene release is in artpack #16 "block n' roll".

    x0 - legend of zelda, link ascii/ansi portrait

    my love of ansi/ascii art has been growing lately. i've joined up with the prolific group blocktronics aka 67. my first scene release is in artpack #16 "block n' roll".

    x0 - legend of zelda, link ascii/ansi portrait

    my piece is a greyscale portrait of link, from the legend of zelda games.
    view full size: png / txt / ans

    W+   7!!yM black_flag_bbs_bannerblack flagbbs banner

    just a quick banner for my new friend hawk hubbard aka captain hood of under the black flag bbs!

    x0 - black flag

    just a quick banner for my new friend hawk hubbard aka captain hood of under the black flag bbs!

    x0 - black flag

    black flag
    view full size: png / txt / ans

    XNB !!Yy blocktoberblocktoberblocktronics' halloween themed artpack

    blocktronics' new halloween themed artpack #17 "blocktober" has been released! and i have a few new color pieces in this pack!

    x0 - toxic skull

    blocktronics' new halloween themed artpack #17 "blocktober" has been released! and i have a few new color pieces in this pack!

    x0 - toxic skull

    toxic skull
    view full size: png / txt / ans

    XCi8 -!3+e night_city_asciinight citytextmode pittsburgh

    here's a new piece of ansi/ascii art that's near and dear to my heart. it's a textmode art view of my town, pittsburgh! it's drawn with the classic AMiGA font topaz and released this with impure!

    x0 - night city ascii

    here's a new piece of ansi/ascii art that's near and dear to my heart. it's a textmode art view of my town, pittsburgh! it's drawn with the classic AMiGA font topaz and released this with impure!

    x0 - night city ascii

    night city
    view full size: png / txt / ans

    Wi  ''G[M impure_bannerimpure bannergraffiti style ansi/ascii art

    here's a new banner for iMPURE!aSCii 1940 released in artpack #64

    x0 - impure banner

    here's a new banner for iMPURE!aSCii 1940 released in artpack #64

    x0 - impure banner

    impure banner
    view full size: png / txt / ans

    XV" /+-I defcon25_ansi_artdefcon ansi art25th anniversary

    happy 25th anniversary to defcon!!1!#@~ i cant join you at the party, but my ansi art can!

    and if you're brave enough, i made a shell script banger version!
    curl -L http://git.io/defcon

    x0 - defcon25 banner

    happy 25th anniversary to defcon!!1!#@~ i cant join you at the party, but my ansi art can!

    and if you're brave enough, i made a shell script banger version!
    curl -L http://git.io/defcon

    x0 - defcon25 banner

    defcon
    view full size: png / ans

    X z !!Ak' amish_ansiA.M.i.S.H.ansi masters in straw hats

    x0 - amish banner

    A.M.i.S.H or Ansi Masters In Straw Hats (pennsylvania german: amisch, german: amische) a group of traditionalist ansi artists with pennsylvania dutch origins.

    they are closely related to, but distinct from, blocktronics, impure and other "english" art groups. the AMiSH are known for simple living, dope ansi skills, and reluctance to adopt many conveniences of modern technology.

    textmod.es

    tl;dr - amish is a joke acronym that misfit and filth came up with in the 90s. but once i met up w/ them we decided that with all three of us representing the western pa area, we should make their dreams a reality!

    misfit, filth, and xeR0 proudly introduce the textmode art scene's new low bit high quality group AMi5H!

    A.M.i.S.H or Ansi Masters In Straw Hats (pennsylvania german: amisch, german: amische) a group of traditionalist ansi artists with pennsylvania dutch origins.

    they are closely related to, but distinct from, blocktronics, impure and other "english" art groups. the AMiSH are known for simple living, dope ansi skills, and reluctance to adopt many conveniences of modern technology.

    textmod.es

    tl;dr - amish is a joke acronym that misfit and filth came up with in the 90s. but once i met up w/ them we decided that with all three of us representing the western pa area, we should make their dreams a reality! 717 represent!

    here's a few of my subs to our inaugural artpack:

    x0 - amish banner

    amish banner
    view full size: png / ans

    x0 - amish barn bomber

    barn bomber
    view full size: png / ans

    Yi[ y %-9%c cthulhu_ansicthulhu ansi arth.p. lovecraft textart

    this cthulhu piece was a request from my friend dcat.
    i released it with blocktronics in their "darker image" artpack.

    x0 - cthulhu

    this cthulhu piece was a request from my friend dcat.
    i released it with blocktronics in their "darker image" artpack.

    x0 - cthulhu

    cthulhu
    view full size: png / ans

    Z)y %ECA% impure_trainall aboard the impure train!the widest ascii/ansi colly

    the newest impure artpack #67 has the incarnation of a conversion we had on irc. historically amiga collys are all vertical and lack color. since impure is already viewed as a "modern" crew for releasing in color and files wider than 80 columns... we decided why not make a modern colly?! and what's the perfect subject for a really really wide ansi? a train covered in graffiti of course!

    x0 - impure train preview

    the newest impure artpack #67 has the incarnation of a conversion we had on irc. historically amiga collys are all vertical and lack color. since impure is already viewed as a "modern" crew for releasing in color and files wider than 80 columns... we decided why not make a modern colly?! and what's the perfect subject for a really really wide ansi? a train covered in graffiti of course!

    x0 - impure train preview

    we actually first released this file as a demo at pittsburgh's demosplash 2017, winning 2nd place in the modern demo category! watch / download the demo.

    Z= q.. #%3qq gutter_emaggutter e-magansi art zine piece

    i was honored to be requested to do a piece for filth^67^AMiSH's e-mag GUTTER.

    x0 - gutter e-mag

    i guess i went a bit literal with it...

    i was honored to be requested to do a piece for filth^67^AMiSH's e-mag GUTTER.

    x0 - gutter e-mag

    i guess i went a bit literal with it...

    Z /#37 grandpa_dan_asciigrandpa danansi/ascii portrait

    recently my grandfather died. he meant the world to me. i have so many great memories of him growing up. i consider myself quite lucky to have had him in my life as long as i did. to honor his memory/grieve i decided to do an ascii/ansi art portrait of his younger self. this was released in the impure artpack #67 and was my first time using the microknight AMiGA font.

    x0 - grandpa dan portrait

    recently my grandfather died. he meant the world to me. i have so many great memories of him growing up. i consider myself quite lucky to have had him in my life as long as i did. to honor his memory/grieve i decided to do an ascii/ansi art portrait of his younger self. this was released in the impure artpack #67 and was my first time using the microknight AMiGA font.

    x0 - grandpa dan portrait

    grandpa dan portrait
    view full size: png / ans

    ZF  i G77 5 blocktronics_starwars_artpackblocktronics starwarsdetention block AA-23

    blocktronics is back! this time with a new starwars themed artpack called "detention block AA-23"

    x0 - join the empire

    blocktronics is back! this time with a new starwars themed artpack called "detention block AA-23"

    here's a few of my subs

    x0 - join the empire

    join the empire
    view full size: png / ans

    x0 - deathstar

    deathstar
    view full size: png / ans

    Y o TT( ++Ew_ demosplash_2016demosplash 2016pittsburgh's demoscene event

    x0 - demosplash

    since joining the textmode art scene, i've made lots of new friends. blocktronics and impure have both been more art collectives than a release groups. seeing the art other members are working on is very inspiring and, for the most part, the criticism is constructive. over time i've become friends with misfit and filth, all members of blocktronics who live in pretty close proximity to each other. this year we decided to meet up at pittsburgh's local demoscene event demosplash, and had a blast!

    x0 - demosplash

    since joining the textmode art scene, i've made lots of new friends. blocktronics and impure have both been more art collectives than a release groups. seeing the art other members are working on is very inspiring and, for the most part, the criticism is constructive. over time i've become friends with misfit and filth, all members of blocktronics who live in pretty close proximity to each other. this year we decided to meet up at pittsburgh's local demoscene event demosplash, and had a blast!

    a demoscene event of demoparty is an event that gathers demosceners and other {retro,} computer enthusiasts to view and compete in competitions calls "compos". the compos a party hosts very from event to event, but always include categories for demos, text art, and audio. depending on the entries ansi/ascii might be split into pc and amiga or combined. similarly smaller parties sometimes combine non-text graphics and music into an audio/video compo. but generally speaking the compos are usually:

    • retro demo
    • moden demo
    • freestyle graphics
    • freestyle ansi/ascii
    • fresstyle audio

    this was the first time i met misfit and filth irl. filth was gracious enough to host us at his house before and after the party. we all seems to instantly hit it off, like we were old time friends. we talked about the scene, how we got introduced to it, what made us get involved, our art motivations, opinions on other artists/groups/art styles/etc, and lots more. and the whole time we were drawing. both passing around a notebook/markers and a laptop equipped with pablodraw. we spent so much time chatting and drawing we were almost late for the compo! (update: this was the real formation of the A.M.i.S.H.)

    x0 - demosplash

    this was also my first time attending a demoparty, competing in a compo, or even really showing off my art to someone not on the other end of the internet. we strolled into the party just in time, acting like we owned the place. and we did! our crew blocktronics took the top 8 spots in the compo, and i personally took third place!

    they handed the new friends a pile of trophies and we headed back to filth's place to celebrate with the spoils of victory!

    x0 - demosplash

    X 1t 339}m wedding_ring_tattoowedding ring tattoothe unicursal hexagram

    unicursal hexagram wedding tattoo

    i've always wanted knuckle tattoos. in my youth i thought of being like OZZY and getting XERO. i considered CODE/HACK as a modern day spoof on the ago old classic GOOD/EVIL. but more than anything, i struggled over typography.

    when i first got married, likeCK ++9 demosplash_2017demosplash 2017pittsburgh's demoparty

    x0 - demosplash pretzels are traditional

    last year we had such a good time at demosplash that misfit, filth, and myself decided to do it again!

    x0 - demosplash pretzels are traditional

    last year we had such a good time at demosplash that misfit, filth, and myself decided to do it again! this time i decided to compete in both the ansi/ascii compo but in modern demo as well! hellbeard, the leader of impure, and i created a modern amiga colly that scrolls horizontally. so we decided to write a program to animate it. read/watch/download our demo: "all aboard the impure train".

    x0 - demosplash impure train live

    we won 2nd place. modern demo is a hard category for an animated ansi/ascii to compete in. congrats to the winners :D

    i was a little bit disappointed by the lack of ascii art flavor in last year's results file. so year year i made them a new one. (they changed my header font, but that's ok i guess, it's there party afterall)

    x0 - demosplash misfit w/ the 2nd place trophy

    like last year, we partied, chatted, drew, and had an awesome time! american demoscene is still a small affair compared to it's european counterparts. i invite everyone to join us next year and help make the event ever better!

    x0 - demosplash misfit w/ the 2nd place trophy

    Z=Z44~ytoje`[VQLGB=83.)$ zupjd^XRLF@:43210 / . -,+#~}|{ zxwvutsrqponljhgfecba`^][ZYWVUTSQPOMLKIGFECA?;975431.+('%#"!   ??c ;;!Ww leaving_a_friend_behindleaving a friend behindgoodbye...

    just sitting there waiting, nervously, anxiously, dreading it's arivial, yet at the same time delighted to know that it'll all be over soon. i look over at geoff, his face is pale, expression blank, and his eyes turned inward, as if he was deep in thaught. i laughed, just to break the tention of the forboading silence that incounpased the room. "lemmie' hit that." i asked as geoff handed me his ciggerette. i took a long drag, untill i could feel the paper burning my fingers

    just sitting there waiting, nervously, anxiously, dreading it's arivial, yet at the same time delighted to know that it'll all be over soon. i look over at geoff, his face is pale, expression blank, and his eyes turned inward, as if he was deep in thaught. i laughed, just to break the tention of the forboading silence that incounpased the room. "lemmie' hit that." i asked as geoff handed me his ciggerette. i took a long drag, untill i could feel the paper burning my fingers, and taste the tar dripping down my throught. i handed it back to him. he hit it again, and put it out. my eyes turn and gase out the window. it's dark and pouring. 6:13, the clock read. i sighed. another 47 minutes till the bus gets here i thaught. time crept by, all of us bairly talking, and never about anything important, smoking heavily, and slowing loosing touch with each other. i could feel it coming, 7:05 the clock said. i could hear it's screaching brakes floating around the bend. i stood up, and announced it's arival. "the big grey dog is here," i said with an obviously fake chuckel. we all grabbed a bag, i ended up with the lightest due to my size, and we clammered out into the pouring rain. the man in the dark suit took his ticket, and we threw his bags under the bus. everyone said there good byes except me, he turned, laughed and said to me, "what the fuck am i doing?" "being retarded," is the only answer i could think of. i smacked him in the back of the head, he gave my the steubenvillan hand shake and got on the bus. it drove away, as did we, but in an oppisite direction.

    5J ؎X 13]u clamor_in_the_rainclamor in the rain.my first "blog" post from 1997

    wet windshield

    sitting in my car, the windows half down, the smoke slowly rising, dancing, being chased from my sight out the window. the annoying clatter of my broken windshield wipers as they clamor across my glossy window. the rain slowly dripping down and splattering across the window. constantly dripping, and sliding between other drips, and merging with other, only to be swept or smeared away by the totalitarian force of the wipers. every so often though, a drip of two make it between the wipers

    wet windshield

    sitting in my car, the windows half down, the smoke slowly rising, dancing, being chased from my sight out the window. the annoying clatter of my broken windshield wipers as they clamor across my glossy window. the rain slowly dripping down and splattering across the window. constantly dripping, and sliding between other drips, and merging with other, only to be swept or smeared away by the totalitarian force of the wipers. every so often though, a drip of two make it between the wipers, where they are broken and continue on their journey down my window. and i think to my self as i take another drag on my cigarette, that's how i feel. like there's always some driving force trying to merge me into someone else, like they want me too, or they'll just obliterate me into void, and toss me onto the abyss of the puddle forming on the ground. how i fight to make it between the wipers, and to escape the length of they're grasp. but the light turn green, and i just drive away...

    3S Q, + pink_hairpink haira photo of nina

    nina's gaze

    i dyed my girl friends hair today at robert's, it was about to her shoulders and black, but after i was done it was short, bubble gum pink (now red), and liberty spiked. she looks gorgeous. i love her hair like that.we didn't have any knox to put her hair up so i had to use wood glue, and hair spray.

    nina's gaze

    i dyed my girl friends hair today at robert's, it was about to her shoulders and black, but after i was done it was short, bubble gum pink (now red), and liberty spiked. she looks gorgeous. i love her hair like that.we didn't have any knox to put her hair up so i had to use wood glue, and hair spray.

    5F, 55)E blanks_77_plays_lagablanks 77 plays lagairon city punk

    blanks77 patch and punk rockers

    today we went to club laga to see blanks 77 along with sixer + the macarthy commission. 6er was ok, and macarthy sounded like normal, and blanks were really good. they cover my shernoa, but mike blank only knew part of the 1st verse and the chorus, it was still hilarious. i saw lots of old friends, chris watson, drunk mike, pogo, mike doc, bill, etc, etc, etc... but mike doc (amanda's skinhead boy friend) wanted to kill chris watson (the 'punkest man alive')...

    blanks77 patch and punk rockers

    today we went to club laga to see blanks 77 along with sixer + the macarthy commission. 6er was ok, and macarthy sounded like normal, and blanks were really good. they cover my shernoa, but mike blank only knew part of the 1st verse and the chorus, it was still hilarious. i saw lots of old friends, chris watson, drunk mike, pogo, mike doc, bill, etc, etc, etc... but mike doc (amanda's skinhead boy friend) wanted to kill chris watson (the 'punkest man alive') because of some old shit between him and amanda. but drunk mike and i were trying to stop the whole think, so we missed some of sixer. eventually i talked doc out of it, atleast for today. after the show we (me, nate, lukkas, nina) were hanging out side lage with drunk mike. i was bumming for money off all the goth kids the come to see 'ceremony' (aka goth night) after the punk shows. we were running the streets shouting 'BRING OUT YOU UNDEAD!' it was really fun, then some random goth girl kissed us, and nina got kinda jealous. all and all a good show.

    5Ũ  C )+!ii rain_revisitedrain; revisitedonce again

    one again it's raining. but this times it's different. i'm not liking it today. it's dark, damp, cold, and foreboding. iv got that over whelming sense that something is out of place, or it's very wrong. i cant tell. everything is blurred by my new windshield wipers. i liked the old ones better, even though they were broken they still worked. unlike these new ones. just because they're not broken, doesn’t mean they don't need to be fixed. but i still feel like something is wrong, and i cant put my finger on it. maybe it's me, maybe it's the weather, maybe it's the hunger in my stomach, maybe it's the thoughts i'm having, maybe the thought's i'm not. it's a very vague feeling and i don't tend to get those very often. it's comparable to that feeling you get when you first wake up, your eyes are blurry, everything it bright, and it's hard to fo see anything. that's how i feel now, except i'm noticing it less and less...

    one again it's raining. but this times it's different. i'm not liking it today. it's dark, damp, cold, and foreboding. iv got that over whelming sense that something is out of place, or it's very wrong. i cant tell. everything is blurred by my new windshield wipers. i liked the old ones better, even though they were broken they still worked. unlike these new ones. just because they're not broken, doesn’t mean they don't need to be fixed. but i still feel like something is wrong, and i cant put my finger on it. maybe it's me, maybe it's the weather, maybe it's the hunger in my stomach, maybe it's the thoughts i'm having, maybe the thought's i'm not. it's a very vague feeling and i don't tend to get those very often. it's comparable to that feeling you get when you first wake up, your eyes are blurry, everything it bright, and it's hard to fo see anything. that's how i feel now, except i'm noticing it less and less...

    7H: 11  almost_dreading_italmost dreading itl i f e

    boredom...the same old endless monotony that runs my world. i can't seem to shake this feeling of insecurity. i'm afraid, and I don't know of what. *sigh* maybe it's paranoia, or just existential angst. i'm not sure. i feel lost, i feel alone, i feel empty. and tired.

    nate and i went to pittsburgh yesterday. i got a new deck for my skate board. it's a 'zero'. hehe, typical i guess. i cut out black flag bars in the grip tape, it's interesting to say the least. i can't wait for summer, but at the same time i'm secretly dreading it. the summer brings break, relaxation, shows, fun, green mohalks, piercings, and ill be 18 this summer. but i got a job the other day, and i hope it doesn't interfere with all of my summer fun. i also know that is so hot during the summer. but all and all i'm looking forward to it.

    boredom...the same old endless monotony that runs my world. i can't seem to shake this feeling of insecurity. i'm afraid, and I don't know of what. *sigh* maybe it's paranoia, or just existential angst. i'm not sure. i feel lost, i feel alone, i feel empty. and tired.

    nate and i went to pittsburgh yesterday. i got a new deck for my skate board. it's a 'zero'. hehe, typical i guess. i cut out black flag bars in the grip tape, it's interesting to say the least. i can't wait for summer, but at the same time i'm secretly dreading it. the summer brings break, relaxation, shows, fun, green mohalks, piercings, and ill be 18 this summer. but i got a job the other day, and i hope it doesn't interfere with all of my summer fun. i also know that is so hot during the summer. but all and all i'm looking forward to it.

    7Np //3 //' w ghost_rider_asciighost rider asciiart with text

    ghost rider ascii - partial view

    time for a little bit of ascii art. taken from the classic marvel comic ghost rider.
    view this post to see the full thing. it's double the size of the teaser image.

    time for a little bit of ascii. the classic marvel comic ghost rider, ascii style.
    $                                                             .a$      $`
     `$                          3)E		lost_out_in_the_cutlostout in the cut

    lost map of pa

    i got lost today. nina and i were driving from empire to... well i actually had no idea where i was going, or why. i just knew i wanted to go.. we drove to empire and then just turned onto a road i've never been on. it took us over the river on this old rickety bridge, nina thought for sure that it would collapse on us when we drove over it. but i managed to get across it. it shook really intensely when the wind blew. and it was a particularly windy night. but after that i just kept driving, i had a half a tank of gas and was in a ford festiva, so i figured that i could get to something without running out of gas anytime soon. i was wrong, dead wrong. the road eventually changed from a four lane into barely a two lane.

    lost map of pa

    i got lost today. nina and i were driving from empire to... well i actually had no idea where i was going, or why. i just knew i wanted to go.. we drove to empire and then just turned onto a road i've never been on. it took us over the river on this old rickety bridge, nina thought for sure that it would collapse on us when we drove over it. but i managed to get across it. it shook really intensely when the wind blew. and it was a particularly windy night. but after that i just kept driving, i had a half a tank of gas and was in a ford festiva, so i figured that i could get to something without running out of gas anytime soon. i was wrong, dead wrong. the road eventually changed from a four lane into barely a two lane. the lines seemed to disappear from the road. and in the darkness and quiet of the rural area i had gotten us into, it was quite hard to see where i was going. yet we pressed on, hoping civilization would come quickly. but it didn't. i just kept driving and driving. i felt like i we on the lost highway. there wasn't another car in sight, i just kept driving and driving.. for what seemed like hours. then the panic started to set in. i just kept thinking that i would run out of gas and they're wouldn't be any other cars, and i would be stuck here and we wouldn't ever... but i was torn back into reality as i car whizzed by me, i was in the center of the road. but there was another car, and thus a shining glimmer of hope. i just kept driving. the night just crept on and on. until finally right when we had almost ran out of gas i somehow magically ended up in imperial. nina and i found the entire event quite hysterical.

    8C( $ ,$` `$ a$$ $ a' ' $' $ $ $ $ $ $$' `$ $$' `$ ,$ $., $' a$' `$$' "$' `$" $' $' $' `$ a,$, `$,a ' a$' $$$ $ $`$ $' $, $ $' $' `$, ,$' a$' $ $ $ `$ '$ . $' .a$' __.__ | \ ________/\ a$' $' ____ / / \ ____| |__ / ____ \ \ $' '$ / \ / / \/ | | \ / / /\ \/ a$' '$ / /\ \/ /\ /''| |\ \ / / / \ \ ,$ '$ --- \ / \/\ \ | | \ \ \ \ / / \ \ $' $, a'$ / \ / \ | | / / \ \/ / / / $' .$$ $ $ '$ / /\ \ / /\ \| |/ / \ / / / / .$ $ ,$ $., '$ / / \ \/ / / /| |\ \ / /__/ / ,$ ,.$$ '$" --- \ / \ / | | \ \___/ /_____/ ., '$,a ---- \/ | | \_______/ '$ $' | / o w n s . u s $a. $' : '$ $ ,a" , '$ `,a" $ a,$ +++ G H [ ] S T . R I D E R +++ 'a a' "$$' , `a$ $ $ a' ,$, +++ 8 O H 6 +++ a,.$ $.,a$"' ,$'`$ '"$` `$"' ,a$' `$, a,$` `$,a$' $ ,aaaa$"" $$$$$$$$$$$aaa, '$ $' `a$ ,aa$"" aa"aa$$$"$$$$$$$$$$$$$aa '$, ,$' ; a$$$" aa$$$a $$a$$$$$$l$$$$"$" ""$a $ $ ,a"$ $ a$$$"a$$$"$$$ $$ "aa""aa""$ $"$$a a"$ ", $ $' ,$" ` ,$' $ $"$$$$"$$$$$$1 $$a "aa$$1 a a""" a$a " $$ $ $ $ $a a' $$$$$$$$$$""""$$$$$ia$$$$$,1$$$$a$$$$$$$a1$$ $' ',$' ,a$a `a $$$$$$$$$aa$$$$a ""$$$$$$$"$$ l$$'$$$$$$$a$$$ $' $ ,a" `a' ` ,$$$$$$$$$$$$$$$$$, """"$$$$$$a$$$$`$$$$$$$$$, $' ,$" $$$$$$$$"$$$$$$$$$" a$$$$$aa`"$$$""$$1;$$$$$"aa$a `,a" $ a,$ $$$$$$$$$$$$"$$$$$ a$$$$$"""$$aa`$$a$$ $$""a$$$$$$ a' "a$' `a$ $$$$$$$$$$' ""' a$$$" "$$a`$"" aa$$$"$$$$' $ $ "$$$$"""' a$$$$ `$$$a"$$$$"a" " $. 'a a"$a$$" a $$$$$$' `""$$$$' `$'$ $ 1 $$" a$$ $$$$$ a$$" `$,`$ `a ,`$ $ "$$a $$$$$ $$$' , `$ ` $ $ `$ $$" aaa "$$$$$a $$$' a1 ,$ `$a' " 1a$$$$$$$aaa"""$$$$$$$aa $$$l laaaa""$a .$' $ `"""$aa$$$$$$$$$$"$$$$$ $$$aa$$" $' [xero!nu] `"aaa""$$$" $$$$$$$$" "$a1$$ a $$$$$$' $ "" z`"" $"""" 1$$$a$$$$$"$$"' `a a' $$$aa a$al$$$$$$$a$$1' `a,aa," a"" $$,$$$"l$$$1"$$"$ $ $" a""aa",a $"aa""a" a ' ,`$ "$$l$1 $$$ $$"$" " `$ `$ $' ` ' `
    88t y yX %%33 dna_asciid.n.a. asciixero.owns.us

    dna ascii

    dna ascii

    9NT$r 5;5// and_the_times_is_nowand the times is... nowhigh school vacation

    12:19 english class. boredom, just want to get this crap over with. miss c. just babbles on about conjunctive adverbs and the nominative case.

    1:00 public speaking exam. it was probably the most simple exam iv ever taken. now im just doomed to sit here in silent boredom until the bell.

    2:30 the end of my history exam. and nearing the end of my junior year of high school. but now just waiting.

    2:34 every second just seems to inch by. every second seems like twenty minutes. i cant wait for the...

    2:35 the bell rings.

    2:37 im out the door.

    12:19 english class. boredom, just want to get this crap over with. miss c. just babbles on about conjunctive adverbs and the nominative case.

    1:00 public speaking exam. it was probably the most simple exam iv ever taken. now im just doomed to sit here in silent boredom until the bell.

    2:30 the end of my history exam. and nearing the end of my junior year of high school. but now just waiting.

    2:34 every second just seems to inch by. every second seems like twenty minutes. i cant wait for the...

    2:35 the bell rings.

    2:37 im out the door.

    96ļ4 =1 today_is_a_relative_termtodayis a relative term

    "today", that has to be one of the most relative terms that has been used ever, especially in my life. days just seem to blend together, yesterday becomes today today becomes tomorrow and i what i think is tomorrow becomes today.

    "i miss today," i said.
    "...but i dread it tomorrow"

    because the today of tomorrow is always going to not be the today of yesterday. the day to day concept of today was described by the yuri indians by pointing up. and by society 'today' as the day you are currently in.
    but wouldn't tomorrow be today? just like yesterday was?

    "today", that has to be one of the most relative terms that has been used ever, especially in my life. days just seem to blend together, yesterday becomes today today becomes tomorrow and i what i think is tomorrow becomes today.

    "i miss today," i said.
    "...but i dread it tomorrow"

    because the today of tomorrow is always going to not be the today of yesterday. the day to day concept of today was described by the yuri indians by pointing up. and by society 'today' as the day you are currently in.
    but wouldn't tomorrow be today? just like yesterday was?

    8 1 1{ %%!UU a_warm_placea warm placebeside you

    clinging to you, your arms draped around me. my face buried in your fuzzy sweater. and then it happened. an explosion of emotions erupts from the depths of my consciousness, things repressed longer than i can remember. and the tears, pouring from my eyes like the rain that still hasn't stopped. and there i am, in your arms letting out every bit of sadness iv ever held back, i let go. and iv never felt so safe.

    clinging to you, your arms draped around me. my face buried in your fuzzy sweater. and then it happened. an explosion of emotions erupts from the depths of my consciousness, things repressed longer than i can remember. and the tears, pouring from my eyes like the rain that still hasn't stopped. and there i am, in your arms letting out every bit of sadness iv ever held back, i let go. and iv never felt so safe.

    9f|N /91 its_raining_againit's raining again blissful monotony

    it never seems to stop lately. but that's what i seem to identify with anymore. that never-ending, never changing blissful monotony that controls my life. things in our lives, nevertheless seem to be chaotic and random, always to end in the same systematic endings of every other bit of life we all pretend to have. whether or not we're sitting around, driving, going to shows, or sleeping, it all just seems to be the same. and always the rain. another static in my life. the seemingly constant rainfall...

    it never seems to stop lately. but that's what i seem to identify with anymore. that never-ending, never changing blissful monotony that controls my life. things in our lives, nevertheless seem to be chaotic and random, always to end in the same systematic endings of every other bit of life we all pretend to have. whether or not we're sitting around, driving, going to shows, or sleeping, it all just seems to be the same. and always the rain. another static in my life. the seemingly constant rainfall...

    9_ @ !!O} fight_clubfight clubone of the best films of all time

    fight club soap

    if i did have a tumor, i would name it marla.
    marla, the little scratch on the roof of your mouth that would heal if only you would stop tonguing it...
    but you can't.

    fight club soap

    if i did have a tumor, i would name it marla.
    marla, the little scratch on the roof of your mouth that would heal if only you would stop tonguing it...
    but you can't.

    i can't seem to get enough of that movie. if you don't know I'm talking about fight club. it's got plot twists, intrigues, sex, violence, the whole thing. it's got to be in my top 5 favorite movies of all time.

    1.   the shining
    2.   lost highway
    3.   fight club
    4.   mall rats
    5.   gandahar

    it's just a great movie. one that really makes you think, and one you really have to dig into, to get the entire thing. i love that about a film.

    the first rule of fight club, don't talk about fight club. the second rule of fight club, DONT TALK ABOUT FIGHT CLUB!!

    9xܒ' ;y eighteeneighteenhappy birthday to me!!!

    xero's 18th birthday

    woohoo! i'm eighteen. im birthday was quite odd. on the 14th of july, kiala took nina and i to see a show in pittsburgh. we went to see submachine, lowerclass brats, b.g.a, and aufstand. The intended venue (the brass factory) was closed by the health inspector, so the show got moved to cheez's store. it was a cool show, for a make-shift venue. submachine sang me "happy birthday, you scum"...

    xero's 18th birthday

    woohoo! i'm eighteen. im birthday was quite odd. on the 14th of july, kiala took nina and i to see a show in pittsburgh. we went to see submachine, lowerclass brats, b.g.a, and aufstand. The intended venue (the brass factory) was closed by the health inspector, so the show got moved to cheez's store. it was a cool show, for a make-shift venue. submachine sang me "happy birthday, you scum", and it was all and all a swell time. after the show kaila went to get gas, and was in the left lane with her blinker on, and someone tried to pass her on the left side (the wrong side of the road) and wrecked into her... lame. the impact tore her entire front bumper off. luckily, everyone involved was ok. but the cops blamed it on her, and i really don't see how it was her fault.

    9o ??[ 9KA 24_hours_of_eat_n_punk24 more hours of eat'n punkthey will not let you stay

    well, i guess im now officially insane. 
    yesterday nina, kira, rachel, geoff, and myself all attempted to stay at eat'n park for a consecutive 24 hours. 

    we got there at around 9:00pm, got a table in the back and started talking to the factor 8 kids. nate and amanda showed up, kiala showed up for a while, and so did rachel's mom. we ate a few times and got a lot of drinks. we were so board... and have been watching fight club "too much", and gave each other chemical burns with ice and salt. but the madness hadn't even started to set in until the manager kicked us out at 4:30...

    well, i guess im now officially insane.
    yesterday myself, nina, kira, rachel, and geoff all attempted to stay at eat'n park for a consecutive 24 hours. 

    we got there at around 9:00pm, got a table in the back and started talking to the factor 8 kids. nate and amanda showed up, kiala showed up for a while, and so did rachel's mom. we ate a few times and got a lot of drinks. we were so board... and have been watching fight club "too much", and gave each other chemical burns with ice and salt. but the madness hadn't even started to set in until the manager kicked us out at 4:30. we thin proceeded to go to the air port and try to sneak onto planes. it didn't work. and we went to the eat'n park in robinson twp. after his 3rd or 4th cup of coffee, geoff went to sleep in my car. so the rest of us stayed there until around 5:45. by then i had kira convinced that we were in a "bazarro" eat'n park in siberia, run by robots... and that she was also a robot. she lay laughing so much, and rolling in the aisle. nina was convinced that if we listened to crass on the way home the tumor in my head would explode. ("im glad i don't have a tumor. but if i did, i'd name it marla.") then we went to nina's house and slept...

    9ݠ` ?A1 will_it_ever_stop_rainingwill it ever stop raining?sometimes i wonder

    Sometimes 
        i  wonder 
          if  it'll 
      EVER
              stop
       raining, 
      or         if 
          we'll  all
       just     DIE
            in a flood.

    Sometimes 
        i  wonder 
          if  it'll 
      EVER
              stop
       raining, 
      or         if 
          we'll  all
       just     DIE
            in a flood.

    9   ;=W'' piercing_apprenticeshippiercing apprenticeship i'll shove metal through yer face

    so i *FINALLY* got my piercing apprentice at hotrods! yeah!

    i'll be working both the oakland and south side shop. im excited and scared at the same time. i wouldn't even pick up a needle for like 3 months though, which i think is a good thing. i'm going to work a lot with chris, which will be very cool. chris has been doing his thing for 9 years now and i trust he knows what he's talking about. This also means nina and I will be getting the hookup on all kinds of awesome jewelry.

    so i *FINALLY* got my piercing apprentice at hotrods! yeah!

    i'll be working both the oakland and south side shop. im excited and scared at the same time. i wouldn't even pick up a needle for like 3 months though, which i think is a good thing. i'm going to work a lot with chris, which will be very cool. chris has been doing his thing for 9 years now and i trust he knows what he's talking about. This also means nina and I will be getting the hookup on all kinds of awesome jewelry.

    :! 33)ii pittsburgh_graffitipittsburgh graffitiin the streets

    xero graff throwup in oakland pittsburgh

    a little throw up i did in pittsburgh last night. not my best work, but bombing solo under mad pressure will do that.

    spot: 5th st. side of the squat house on chesterfield in oakland.

    update:
    the spot has been torn down

    xero graff throwup in oakland pittsburgh

    a little throw up i did in pittsburgh last night. not my best work, but bombing solo under mad pressure will do that.

    spot: 5th st. side of the squat house on chesterfield in oakland.

    update:
    the spot has been torn down

    9܈@ 1'E relief_equals_numbrelief = numbthe past and future are gone

    soft and warm.
    blurry semi-undefined blobs of color dance in front of my eyes.

    my mind only thinks of the present now. the past and future are gone.

    just the warmth of her body touching mine, the smell of her hair. her hand clutching mine.

    i can fell her body rise and fall as she breathes. and her heart keeping a steady rhythm.

    she rolls over, 
    surprised i say, "i thought you were asleep."
    "nope, just thinking how much i love you."

    soft and warm.
    blurry semi-undefined blobs of color dance in front of my eyes.

    my mind only thinks of the present now. the past and future are gone.

    just the warmth of her body touching mine, the smell of her hair. her hand clutching mine.

    i can fell her body rise and fall as she breathes. and her heart keeping a steady rhythm.

    she rolls over, 
    surprised i say, "i thought you were asleep."
    "nope, just thinking how much i love you."

    9 x   %CUU dingbats_devdingbatsthe science of symbol fonts

    stupid dingbats font

    i have been working on some crazy dingbatz fonts. im starting to understand the fontographer auto trace a bit more. screw that adobe streamline crap. this is much more precise.

    stupid dingbats font

    i have been working on some crazy dingbatz fonts. im starting to understand the fontographer auto trace a bit more. screw that adobe streamline crap. this is much more precise.

    :. I__ 806_upz806 upzrevenge of the aldi's wall

    xero graffiti

    the 80b crue is at it again! we hit the aldi's wall again last night. it's really starting to be our favorite spot. mute and i both went for a 'rocky' look to the pieces, but neither of us knew the other was doing it until both our line work was done. click the images for a larger view. reign supreme 806!

    mute graffiti

    xero graffiti

    the 80b crue is at it again! we hit the aldi's wall again last night. it's really starting to be our favorite spot. mute and i both went for a 'rocky' look to the pieces, but neither of us knew the other was doing it until both our line work was done. click the images for a larger view. reign supreme 806!

    mute graffiti

    :  11'kk enter_the_806_crueenter the 806 cruereign supreme

    xero graffiti

    lookout ohio valley... there's a new graffiti force hitting the streets. The 806 crue!

    xero graffiti

    lookout ohio valley... there's a new graffiti force hitting the streets. The 806 crue!

    :  % %) ))Uee the_black_milethe black milegraffiti and photography experiments

    xero's black mile graffiti

    well the 806 crue has been in full effect once again. this time our mission took us out into the cut, to a place called goulds ohio. there is a mile long train tunnel that has a large open room at the end. nina, pete, and i took some amazing photos. and zak and i reigned supreme as usual. this time i went by the handle "ph33r".

    the black mile preview

    xero's black mile graffiti

    well the 806 crue has been in full effect once again. this time our mission took us out into the cut, to a place called goulds ohio. there is a mile long train tunnel that has a large open room at the end. nina, pete, and i took some amazing photos. and zak and i reigned supreme as usual. this time i went by the handle "ph33r".

    the black mile preview

    :} , M!7ii conspiracy_or_pointless_paranoiaconspiracyor pointless paranoia

    so this strangest thing ever happened to me today. i was in line at the grocery store and this arabic guy in front of me didn't have enough money to pay for his food. so i did the right thing and gave the cashier a dollar sixth three for the guy. the thanked me, and left. i bought my stuff and he was waiting outside of me. he asked me why i did what i did, and i told his that im a nice guy. he then proceeded to tell me that since i did a favor for his he would do a favor for me. the told me not to drink coke or pepsi products after september 1st, then walked away. idk if i'll be drinking soda or not anymore.

    so this strangest thing ever happened to me today. i was in line at the grocery store and this arabic guy in front of me didn't have enough money to pay for his food. so i did the right thing and gave the cashier a dollar sixth three for the guy. the thanked me, and left. i bought my stuff and he was waiting outside of me. he asked me why i did what i did, and i told his that im a nice guy. he then proceeded to tell me that since i did a favor for his he would do a favor for me. the told me not to drink coke or pepsi products after september 1st, then walked away. idk if i'll be drinking soda or not anymore.

    :8@   '''kk random_quotesrandom quotesutter madness

    well let's just say iv had a very strange week.
    i'v been writing down quotes from our very, very, very stupid conversations.
    here ya go:

    i love you baby, every day my light is being swayed by your darkness...

    nina

    blaster baiter

    xero

    he's a clever hobbit

    willy

    Mike's a thick lipped bastard

    nina

    hell yeah! bring on the elvis bitchs!

    will

    well let's just say iv had a very strange week.
    i'v been writing down quotes from our very, very, very stupid conversations.
    here ya go:

    i love you baby, every day my light is being swayed by your darkness...

    nina

    blaster baiter

    xero

    he's a clever hobbit

    willy

    Mike's a thick lipped bastard

    nina

    hell yeah! bring on the elvis bitchs!

    will

    <#Ĉ? !'+ so_anywazeso anywaze...kids these days

    so the funniest thing ever happened last night, pete, nina, and myself were board last night and decided to see what was going down at k-mart. we were in the car talking when out of nowhere we heard insane screaming. we really thought that someone was being raped. but then we saw this little kid with his mom screaming! then out of nowhere he stopped, looked at his mom and said: "what are you doing mom? but... i wanted that game that i wanted!" then continued screaming... i guess you just had to be there.

    so the funniest thing ever happened last night, pete, nina, and myself were board last night and decided to see what was going down at k-mart. we were in the car talking when out of nowhere we heard insane screaming. we really thought that someone was being raped. but then we saw this little kid with his mom screaming! then out of nowhere he stopped, looked at his mom and said: "what are you doing mom? but... i wanted that game that i wanted!" then continued screaming... i guess you just had to be there.

    :4 e )he +++OO videogame_fontzvideogame fontz8bit typography

    8bit video game fonts

    i have a few new video game inspired dingbatz fontz available for download now on my font site: fontvir.us

    some of the new styles include the two font megaman family (mega man and villians), invaders from space, and mario bros drunkenbatz! check 'em out.

    8bit video game fonts

    i have a few new video game inspired dingbatz fontz available for download now on my font site: fontvir.us

    some of the new styles include the two font megaman family (mega man and villians), invaders from space, and mario bros drunkenbatz! check 'em out.

    <(> '!! nu_tat2_4u_2cnu.tat24u.2c

    new tattoo

    so i got myself a new tattoo this weekend. it's a nu-skool skull and
    cross bones, just below my black flag bars. it's sweet!
    susane did it at new world tattoo in follensbee wv.

    new tattoo

    so i got myself a new tattoo this weekend. it's a nu-skool skull and
    cross bones, just below my black flag bars. it's sweet!
    susane did it at new world tattoo in follensbee wv.

    <0T 77/ i_hate_winter_drivingi hate winter drivinga list of reasons

    reasons i hate winter driving

    one: it's so cold when you get in the car your hands stick to the icy wheel.
    two: turning on the heater and it blowing cold air all over you
    three: snow spinning in front of your window, hypnotizing you
    four: slipping on black ice, sliding off the road, and getting stuck in a ditch
    five: everyone else on the road suddenly forgets how to drive

    reasons i hate winter driving

    one: it's so cold when you get in the car your hands stick to the icy wheel.
    two: turning on the heater and it blowing cold air all over you
    three: snow spinning in front of your window, hypnotizing you
    four: slipping on black ice, sliding off the road, and getting stuck in a ditch
    five: everyone else on the road suddenly forgets how to drive

    molotov cocktail tattoo

    i finally got a decent picture of the molotov cocktail tattoo on the back of my right calf. it's totally finished now. it wraps around a little too much fer it to fit into one picture so i combined them. click the photo above for a larger view.

    molotov cocktail tattoo

    i finally got a decent picture of the molotov cocktail tattoo on the back of my right calf. it's totally finished now. it wraps around a little too much fer it to fit into one picture so i combined them. click the photo above for a larger view.

    =M # 13CA} "21st_birthday_bash21st birthday bash!young, dumb, here i come...

    xero's 21st birthday

    hellyeah! on july 14 2003 i turned 21!
    i also threw a drunken bash! thanx to everyone who showed up!
    i made sure to take tons of photos, but here's a choice selection. click the image for a larger view.
    (more photos in the full post) 

    pete thinks it's funny

    xero's 21st birthday

    hellyeah! on july 14 2003 i turned 21!
    i also threw a drunken bash! thanx to everyone who showed up!
    i made sure to take tons of photos, but here's a choice selection. click the image for a larger view.

    pete thinks it's funny

    donovan self portrait

    luke, the big-L

    jessy and lil'spooky

    xero and weird willy

    the late night group

    ? s! 99O? #ascending_bowel_cancerascending bowel cancermy band plays my graduation party

    ascending bowel cancer show

    my band, ascending bowel cancer, played a show (at my graduation party) with josta baby (a factor-8 side project). black flag, circle jerks, misfits, fear, and other punk covers were rocked out. 

    ascending bowel cancer show

    ascending bowel cancer show

    my band, ascending bowel cancer, played a show (at my graduation party) with josta baby (a factor-8 side project). black flag, circle jerks, misfits, fear, and other punk covers were rocked out.

    ascending bowel cancer show

    ascending bowel cancer show

    ascending bowel cancer show

    ascending bowel cancer show

    ;,*P  \" 33? $my_bands_first_showmy bands first showas ascending bowel cancer

    ascending bowel cancer live

    my new band, ascending bowel cancer just played our first live show at the weirton legion. it seemed like a weird venue for a show, but the promoters just moved all the tables and chairs out of the way. no stage, just the band at the same level as the crowd. as a new band, we played first. but by the time the wounded hunters played everyone there was a drunken mess and things got out of hand. a riot broke out and the place got destroyed. broken chairs, broken faces, bloody hand prints on the wall. needless to say, we will not be having shows at the weirton legion ever again.

    ascending bowel cancer live

    my new band, ascending bowel cancer just played our first live show at the weirton legion. it seemed like a weird venue for a show, but the promoters just moved all the tables and chairs out of the way. no stage, just the band at the same level as the crowd. as a new band, we played first. but by the time the wounded hunters played everyone there was a drunken mess and things got out of hand. a riot broke out and the place got destroyed. broken chairs, broken faces, bloody hand prints on the wall. needless to say, we will not be having shows at the weirton legion ever again.

    :V 1# +55{q %happy_halloweenhappy halloweeeeeen!party at zac's house

    monster xero

    a few years ago, after almost getting arrested for trick-or-treating at age 19, our group of friends decided that we were going to start having a halloween soirees at peoples houses. this year the party was at the knight residence. all kinds of crazyness (like zac changing costumes 5 times) view the entire gallery here. (more photos in full post)

    naughty nurse nina

    monster xero

    a few years ago, after almost getting arrested for trick-or-treating at age 19, our group of friends decided that we were going to start having a halloween soirees at peoples houses. this year the party was at the knight residence. all kinds of crazyness (like zac changing costumes 5 times) view the entire gallery here.

    naughty nurse nina

    hard day at the E.R. george clooney

    pete as a ghost

    joe as captain creepy

    kelly and pete

    zac as mallory knox

    ? 0 Y0&% 33+mm 'camouflage_computercamouflage computermy first DIY pc

    camouflage computer

    today was a little too interesting not to write about. I woke up and checked to see if the paint was dry on my new computer. I made 3 camouflage stencils that I used on the entire box (including cd/dvd drives, sound blaster audigy, power buttons, EVERYTHING!). I also cut out a toxic symbol as the case window on the door. after putting all the components in, and a brief battle with some jumper settings, it finally turned on and recognized all the devices.

    camouflage computer

    today was a little too interesting not to write about. I woke up and checked to see if the paint was dry on my new computer. I made 3 camouflage stencils that I used on the entire box (including cd/dvd drives, sound blaster audigy, power buttons, EVERYTHING!). I also cut out a toxic symbol as the case window on the door. after putting all the components in, and a brief battle with some jumper settings, it finally turned on and recognized all the devices.

    ?$$ ;;/aa &random_page_perl_scriptrandom page perl scriptCGI randomization

    place this code in a file called index.cgi, chmod it to 775, and place it in a directory of html files. this script will pick one of the files in the specified directory at random, and print it to the screen. refresh the page for a new random one.

    #!/usr/bin/perl
    print "Content-type: text/html\n\n";
     
    #print "<pre>";
    $basep = "/wwwroot/path2/randomdir";
     
    srand(time ^ $$);
    #print "got random time...\n";
     
    @files = `ls $basep/*.html`;
    #print "got file list...\n";
    #foreach (@files) { print "-----$_\n";}
     
    $file = rand(@files);
    #print "got random file...$phrase\n";
     
    $nupath = "$files[$file]";
    #print "got new path...$nupath\n";
     
    open(LOG, $nupath) or die "$!\n"; 
    while () 
    {
      print $_;
    }
    close (LOG);
    #print "</pre>";
    
    exit;

    place this code in a file called index.cgi, chmod it to 775, and place it in a directory of html files. this script will pick one of the files in the specified directory at random, and print it to the screen. refresh the page for a new random one.

    #!/usr/bin/perl
    print "Content-type: text/html\n\n";
     
    #print "<pre>";
    $basep = "/wwwroot/path2/randomdir";
     
    srand(time ^ $$);
    #print "got random time...\n";
     
    @files = `ls $basep/*.html`;
    #print "got file list...\n";
    #foreach (@files) { print "-----$_\n";}
     
    $file = rand(@files);
    #print "got random file...$phrase\n";
     
    $nupath = "$files[$file]";
    #print "got new path...$nupath\n";
     
    open(LOG, $nupath) or die "$!\n"; 
    while () 
    {
      print $_;
    }
    close (LOG);
    #print "</pre>";
    
    exit;
    ? R R[' 9++## )kool_aid_classic_comboa classic combokool-aid recipe

    kool aid man

    the greatest kool-aid mix ever is black cherry, fruit punch, and cherry strawberry. that's some sweet aid!

    kool aid man

    the greatest kool-aid mix ever is black cherry, fruit punch, and cherry strawberry. that's some sweet aid!

    @5XM& //1 (anatomy_wallpaperanatomy wallpaperlil spooky vs xero

    anatomy wallpaper

    the versus project has begun! the idea is teaming up with another artist to create a collaborative piece of art. my first "opponent" is lil`spooky (aka anthony prusakowski), and we have been playing a 4 week long game of photoshop tennis that has yielded an awesome H.R. Giger-esque wallpaper we have entitled: "anatomy". enjoy!

    http://lilspooky.vs.xero.nu/

    anatomy wallpaper

    the versus project has begun! the idea is teaming up with another artist to create a collaborative piece of art. my first "opponent" is lil`spooky (aka anthony prusakowski), and we have been playing a 4 week long game of photoshop tennis that has yielded an awesome H.R. Giger-esque wallpaper we have entitled: "anatomy". enjoy!

    http://lilspooky.vs.xero.nu/

    @X Y( 77AOS *wasteland_photographywasteland photographyindustrial demolition site

    industrial wasteland photography

    today nina, channing, pete, and i ran a mission to an industrial wasteland. the rubble of smashed buildings all around us, mangled pipes, and twisted support beams. seemed like a nice place to take some photos.

    industrial wasteland photography

    today nina, channing, pete, and i ran a mission to an industrial wasteland. the rubble of smashed buildings all around us, mangled pipes, and twisted support beams. seemed like a nice place to take some photos.

    industrial wasteland photography

    industrial wasteland photography

    industrial wasteland photography

    industrial wasteland photography

    industrial wasteland photography

    industrial wasteland photography

    @   p+ ++II -cloudy_txt_msgscloudy txt msgswhat?

    x: high?
    n: hi.
    x: no, are you?
    n: are i what?
    x: you are.
    n: i are what?!

    x: high?
    n: hi.
    x: no, are you?
    n: are i what?
    x: you are.
    n: i are what?!

    A * %%__ ,xero_owns_usxero.owns.us#netart

    xero.owns.us

    my new experimental website http://xero.owns.us/ is online. no general theme or style. the web it the medium: html, css, and javascript. counter intuitive navigation. epilepsy inducing exhibits. legions of dancing popup windows. no schedule for releases. no logic. no rules.

    xero.owns.us

    xero.owns.us

    xero.owns.us

    my new experimental website http://xero.owns.us/ is online. no general theme or style. the web it the medium: html, css, and javascript. counter intuitive navigation. epilepsy inducing exhibits. legions of dancing popup windows. no schedule for releases. no logic. no rules.

    xero.owns.us

    xero.owns.us

    A;e) -/7++ +mission_cover_upmission: cover-upurban renewal program

    mission: cover-up graffiti

    the 806 crue at it again... this time drone and i took on some nasty gang graffiti downtown. bloods and crypts have battling it out since the 90's on these walls. it's time they get a fresh coat.

    mission: cover-up graffiti

    mission: cover-up graffiti

    the 806 crue at it again... this time drone and i took on some nasty gang graffiti downtown. bloods and crypts have battling it out since the 90's on these walls. it's time they get a fresh coat.

    mission: cover-up graffiti

    @yh  +K. == 0late_night_tattoo_fiascolate night tattoo fiascoa rant

    man! I just got home from the tattoo shop and its 4:15am!!!!! these kids who think they are baller's came in at closing time (that’s 9:30pm btw) and all 3 wanted to get a piece done tonight. don’t get me wrong, i seriously don’t mind staying late at the shop, but 3 pieces! and of course, they were all large pieces. tony had to have make at least a G tonight, and i got a $50. how generous, after i looked up all these classic pieces of artwork, showed them to the guys, helped them decide which one to get and where (cuz they had no idea what they wanted) then scanned in all the images, cropped them, sized them, adjusted the contrast, and printed them. then had to wait around while tony tattooed them all night long. whatever. all i’m saying is 13 hours is a long time to hang out at a tattoo shop.

    man! I just got home from the tattoo shop and its 4:15am!!!!! these kids who think they are baller's came in at closing time (that’s 9:30pm btw) and all 3 wanted to get a piece done tonight. don’t get me wrong, i seriously don’t mind staying late at the shop, but 3 pieces! and of course, they were all large pieces. tony had to have make at least a G tonight, and i got a $50. how generous, after i looked up all these classic pieces of artwork, showed them to the guys, helped them decide which one to get and where (cuz they had no idea what they wanted) then scanned in all the images, cropped them, sized them, adjusted the contrast, and printed them. then had to wait around while tony tattooed them all night long. whatever. all i’m saying is 13 hours is a long time to hang out at a tattoo shop.

    Av_- ##9// /tongue_tiedtongue tiedrandom funny stupidity

    def mostinitely = most definitely

    donovan hubbard

    def mostinitely = most definitely

    donovan hubbard
    AdȍR, ?1A  .inner_lip_asterisk_tattooinner lip * tattoonew job at egobrain tattoo

    inner lip asterisk tattoo

    so i guess that quasi-apprenticeship at hot-rods paid off. i was recently approached for a job by a friend of mine named tony varlas at egobrain tattoo. as a graphic designer, webdesiner, computer technician, photographer, and piercer. the shop is located in downtown steubinville, so the work is mostly walk-ins. business has been slow so far, the shop is brand new, so i got paid yesterday in free work. a note about my new tattoo. the * in computer is called the wildcard. it is anything and everything with in a set range. it is used in random number generation and search algorithms. so yeah, i got an asterisk tattoo in my mouth.

    inner lip asterisk tattoo

    so i guess that quasi-apprenticeship at hot-rods paid off. i was recently approached for a job by a friend of mine named tony varlas at egobrain tattoo. as a graphic designer, webdesiner, computer technician, photographer, and piercer. the shop is located in downtown steubinville, so the work is mostly walk-ins. business has been slow so far, the shop is brand new, so i got paid yesterday in free work. a note about my new tattoo. the * in computer is called the wildcard. it is anything and everything with in a set range. it is used in random number generation and search algorithms. so yeah, i got an asterisk tattoo in my mouth.

    A=l  O%"1 55OUU 3seth_hubbard_is_nutsseth hubbard is nutsi don't know what else to say

    x: what did yew do this weekend?
    s: i gave rumpelstilskins a cauliflower ear.
    x: i should have never asked.

    x: what did yew do this weekend?
    s: i gave rumpelstilskins a cauliflower ear.
    x: i should have never asked.

    BET'0 O#1ee 2fontvirus_featured_on_datfont_comdatfont.comfontvir.us feature

    im the featured fontographer this month at dafont.com! check the spread. its cool to know that people actually like and want to use my fonts.

    im the featured fontographer this month at dafont.com! check the spread. its cool to know that people actually like and want to use my fonts.

    A܋./ ))1m  1ascii_airlinesascii airlinestext based c++ gui

    i have been working on my c++ final project. since we haven’t been working with gui interfaces, our apps are all text based. so what better thing to do than make the app oldskool bbs style. here's some ascii from my airline flight reservation system...

    ascii airlines

    i have been working on my c++ final project. since we haven’t been working with gui interfaces, our apps are all text based. so what better thing to do than make the app oldskool bbs style. here's the main menu for the airline flight reservation system...

    ascii airlines main menu

    here's the header for the data input screen

    ascii airlines data input header

    and here's the message on the logout screen

    ascii airlines logout message

    At __3 %%KGG 5skate_er_guyskate-er-guya friend's first flash game

    a screen from skate-er-guy

    well my buddy donovan has been learning more and more about flash as his college career progresses. we were discussing the idea of flash games  and he decided to attempt to make one. with some minor help/troubleshooting from my end, d has managed to make a pretty sweet first game. check out the beta version of skate-er-guy.

    a screen from skate-er-guy

    well my buddy donovan has been learning more and more about flash as his college career progresses. we were discussing the idea of flash games  and he decided to attempt to make one. with some minor help/troubleshooting from my end, d has managed to make a pretty sweet first game. check out the beta version of skate-er-guy.

    B<2 _QW%% 4chainsaw_wielding_zombie_milkshake_tattoochainsaw wielding zombie milkshakeaqua teen hunger force ribcage tattoo

    aqua teen zombie shake tattoo

    so i got a new tattoo. this one fuxx0ring hurt!!1!#@!~ i wanted to get a tattoo that every time i saw it, it would make me laugh. i think i totally succeeded. i ended up getting a letter from a font i made. the aqua teen hunger font. it’s a zombified chainsaw wielding master shake. ridiculous to say the least. it’s on my ribcage (which is a place that’s very painful to begin with) but i ended up getting it tattooed by BOTH the varlas brothers simultaneously! eric did the outline and was finishing the fill work. he was discussing shading techniques w/ his older bro tony and the next thing i know tony shoves eric out the way and starts working on me too. props to the whole egobrain crew!


    aqua teen zombie shake tattoo

    so i got a new tattoo. this one fuxx0ring hurt!!1!#@!~ i wanted to get a tattoo that every time i saw it, it would make me laugh. i think i totally succeeded. i ended up getting a letter from a font i made. the aqua teen hunger font. it’s a zombified chainsaw wielding master shake. ridiculous to say the least. it’s on my ribcage (which is a place that’s very painful to begin with) but i ended up getting it tattooed by BOTH the varlas brothers simultaneously! eric did the outline and was finishing the fill work. he was discussing shading techniques w/ his older bro tony and the next thing i know tony shoves eric out the way and starts working on me too. props to the whole egobrain crew!


    B oo4 )3Yk 6zhangs_revengezhang's revengeridiculously hilarious flash animation

    a screen from zhang's revenge

    donovan did it again! so he calls me last night at 9:45pm (he lives like an hour away) and sez his flash project for some college animation competition is due tomorrow and has no voice acting. so after some guinness related persuasion i come over to watch zhang's revenge. we probably watched it w/o audio like 50 times discussing the plot, what he wanted to convey, what he was thinking. all during this time the guinness is flowing...

    a screen from zhang's revenge

    donovan did it again! so he calls me last night at 9:45pm (he lives like an hour away) and sez his flash project for some college animation competition is due tomorrow and has no voice acting. so after some guinness & chr0n.job related persuasion i come over to watch zhang's revenge. we probably watched it w/o audio like 50 times discussing the plot, what we wanted to convey, what he was thinking. all during this time the guinness is flowing...

    so eventually, in a totally inebriated state, we recorded the drunken audio of zhang's revenge. it got better as we got drunker. it is really funny, but we found it hilarious.

    so seriously zhang is a friend of mine who owns a chinese restaurant in downtown steubenville. his old boss was a a total bitch and fired him, so he opened his own place. his food is so good that no one goes to the old place anymore.

    check out zhang's revenge here.

    make sure you listen to the outtakes hidden after the movie on the "watch again?" screen.

    B& 5 ++5 7v_a_c_a_t_i_o_nv a c a t i o nescape to ocean city

    with summer in full effect nina and i decided to take a vacation. we were discussing a trip to ocean city at willy’s house when his (now ex) girlfriend saunda proclaims she’s never been to the beach. so we invited her to come with us.  in ocean city we stayed with one of my dad's old navy buddies (since hotel prices are astronomical these days). the first day was awesome, the weather was nice, the beach wasn't crowded, and we ate at spiffy italian place. day two however was rainy and overcast. so we decided to kick it on the boardwalk. we ate some uber-sweet cotton candy, i bought an aqua-teen poster, nina and i laughed at saunda’s failed attempts to be funny. after a while we were just chillin' on a bench trying to decide what to do next, when out of nowhere we see this dude with a pink mohawk and a fu manchu. then i realize, “hey i know that guy”...

    with summer in full effect nina and i decided to take a vacation. we were discussing a trip to ocean city at willy’s house when his (now ex) girlfriend saunda proclaims she’s never been to the beach. so we invited her to come with us.  in ocean city we stayed with one of my dad's old navy buddies (since hotel prices are astronomical these days). the first day was awesome, the weather was nice, the beach wasn't crowded, and we ate at spiffy italian place. day two however was rainy and overcast. so we decided to kick it on the boardwalk. we ate some uber-sweet cotton candy, i bought an aqua-teen poster, nina and i laughed at saunda’s failed attempts to be funny. after a while we were just chillin' on a bench trying to decide what to do next, when out of nowhere we see this dude with a pink mohawk and a fu manchu. then i realize, “hey i know that guy”, it's sean mccarthy and natalie from jester's court!  we ended up at a bar called the bearded clam with them and met up with other people from pittsburgh. things got crazy when they found out that nina had only recently turned 21. there were toasts to pittsburgh, to nina, to the oc, it was a blast. but after that it got better. nina was annihilated, i tried to buy her a veggie-sub, but all she would eat was the bread. she was trying to toss green peppers into my mouth, but ended up just throwing them on/at my face. saunda was rolling on the sidewalk laughing at us, and got all kinds of dirt and vegetables all over her. the final day we went to the beach in the day (gorgeousness) , then hung out with this guy mccarthy introduced us to in the evening. turns out the guy is an awesome artist who makes metal sculptures. he did most of the art in my favorite restaurant madmex. the return trip was just that, a trip. When the time came to leave, i saw the car’s reflection in a shop window and noticed we were a padiddle (one headlight). we drove around forever until i could find an auto parts store to get a replacement. then, of course, the setup under the hood made me remove the entire battery just to get access to the driver’s side headlight matrix. finally, street ready, we hit the road. after waking up from a nap, both girls proclaimed they had to pee. at first i didn’t see a rest stop or gas station for miles, then i kept missing exits, or be passing other cars, or passing other cars, until finally we ended up at this crazy redneck gas station in wv. they had a singing deer head mounded in the bathroom, so when you wash your hands it sang like country roads or something. a hilarious end to a great trip.

    BP ?o7 %E%77 9banksy_quotea word from the stencil kingbanksy quote

    people look at an oil painting and admire the use of brushstrokes to convey meaning. people look at a graffiti painting and admire the use of a drainpipe to gain access...

    banksy

    people look at an oil painting and admire the use of brushstrokes to convey meaning. people look at a graffiti painting and admire the use of a drainpipe to gain access...

    banksy
    B>6 II1C 8nuskool_spray_paint_can_tattoonuskool spray paint can tattoodrone bombs my leg

    nu skool spray paint can tattoo

    one of the other members of the 806 crue, drone, works with me at egobrain tattoo. his style is amazing, i really love the nu skool tweaked 3D perspectives he uses. but in the tattoo scene he is well known for his skills in biomechanical work...


    nu skool spray paint can tattoo nu skool spray paint can tattoo paint

    one of the other members of the 806 crue, drone, works with me at egobrain tattoo. his style is amazing, i really love the nu skool tweaked 3D perspectives he uses. but in the tattoo scene he is well known for his skills in biomechanical work. i showed him the molotov tattoo i have on my right calf, and asked him if he’d design me a spray can in a similar style for my left leg. when i saw the first round of sketches we worked on the can shape, mirroring my molotov while still looking unique. in the second round of sketches we focused on the paint coming from the can. and his biomechanical style really shows through here. thanx drone!

    Bn F!9 SS!MM ;post_and_querystring_vars_in_dotnetpost and querystring vars in dotnetasp.net c#

    here's a nice little snip of c# code. this is meant to be used in an asp.net web application. the following code will return either a querystring variable or a post variable, it tries both and finds the valid one.

    public string RequestParam(string paramname)
    {
        string result = string.Empty;
        if (Context.Request.Form.Count != 0)
        {
            result = Convert.ToString(Context.Request.Form[paramname]);
        }
        else if (Context.Request.QueryString.Count != 0)
        {
            result = Convert.ToString(Context.Request.QueryString[paramname]);
        }
        return (result == null) ? string.Empty : result.Trim();
    }
    

    here's a nice little snip of c# code. this is meant to be used in an asp.net web application. the following code will return either a querystring variable or a post variable, it tries both and finds the valid one.

    public string RequestParam(string paramname)
    {
        string result = string.Empty;
        if (Context.Request.Form.Count != 0)
        {
            result = Convert.ToString(Context.Request.Form[paramname]);
        }
        else if (Context.Request.QueryString.Count != 0)
        {
            result = Convert.ToString(Context.Request.QueryString[paramname]);
        }
        return (result == null) ? string.Empty : result.Trim();
    }
    
    Cmy cet business card

    i now proudly work for the Center for Educational Technologies at Wheeling Jesuit University. my official job title is web application programmer. i will be working with asp.net, c#, php, flash, mysql, mssql, and whatever else they need. all the projects we work on are grant based, so the CET staff are constantly writing proposals and bidding for new work. this means that the work we do is completely varied from project to project...

    my cet business card

    i now proudly work for the Center for Educational Technologies at Wheeling Jesuit University. my official job title is web application programmer. i will be working with asp.net, c#, php, flash, mysql, mssql, and whatever else they need. all the projects we work on are grant based, so the CET staff are constantly writing proposals and bidding for new work. this means that the work we do is completely varied from project to project. one app might be a web based training course, another an emergency alerting system, a classroom PBL, or a mobile application, just to name a few. my good friend donovan hubbard has an internship upstairs at the Challenger Learning Center. he saw the job posting and told me to apply. that means i’m 1/1 in the post college job hunt!

    C 8 *P*#; --Ecc =the_magic_numberthe magic numberHD DVD processing key leaked

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0

    HD DVDs

    everyone is going crazy over this. in case you’re a n00b and don’t know, this is the 'processing key' for all HD-DVDs out currently. this means that linux will now have the ability to decode and play HD movies, as well as facilitate the creation of HD-DVD backup warez. this number cannot be copywritten, so feel free to share!

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0

    HD DVDs

    everyone is going crazy over this. in case you’re a n00b and don’t know, this is the 'processing key' for all HD-DVDs out currently. this means that linux will now have the ability to decode and play HD movies, as well as facilitate the creation of HD-DVD backup warez. this number cannot be copywritten, so feel free to share!

    C-: ''7] iubi blue pmp

    Well I just got my first paycheck, and bought myself a present… an iubi blue (high rez photos here). it’s still not available in the US, but I ordered my from the UK here.

    so what is it you ask? It’s an audio/video player/recorder and a logical usb hard drive. As for playback, it will run almost every codec under the sun: MPEG 1, 2, 4 DivX 3.X, DivX 4.X, DivX 5.X, Xvid, WMV9, H.264/MP4, AVI, OGM, WMV 7, 8, MOV, & Real video files! The screen is very bright a clear, and you can see it from almost any angle.

    iubi blue pmp

    Well I just got my first paycheck, and bought myself a present… an iubi blue (high rez photos here). it’s still not available in the US, but I ordered my from the UK here.

    so what is it you ask? It’s an audio/video player/recorder and a logical usb hard drive. As for playback, it will run almost every codec under the sun: MPEG 1, 2, 4 DivX 3.X, DivX 4.X, DivX 5.X, Xvid, WMV9, H.264/MP4, AVI, OGM, WMV 7, 8, MOV, & Real video files! The screen is very bright a clear, and you can see it from almost any angle.

    it has a line in/out feature so you can hook it up to the TV and watch, but it can also record as well... i use the line in for old records/tapes, not to mention it encodes video/audio in both mp3 and Xvid/AVI format. high quality recordings too, not just crap. i’ve encoded and watched stuff on the blue, then on my pc, then ripped it to dvd w/ no loss in quality! (thanx nero vision)

    and did i mention that it's a 30gb logical hard drive? 
    no drivers, just plug & play. It also has a dual ended usb cable for either asynchronous file transfer, or charging and using the device as a hard drive simultaneously. 

    C&ڬ l D Ql%? 5??[[ Aphp_email_validationpure php email validationusing regular expressions
    <?php
    $email = 'someone@somewhere.com';
    if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
        //invalid email
    } else {
        //valid email
    }
    ?>
    
    <?php
    $email = 'someone@somewhere.com';
    if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
        //invalid email
    } else {
        //valid email
    }
    ?>
    
    D :> +++  @sql_get_last_idSQL get last IDmssql and mysql

    here's a simple SQL script that returns the last row created. this is great for when you add a new record that has an autogenerated id and you need that number.

    mssql

    CREATE PROCEDURE [dbo].[getLastLogin]
    AS
    SELECT TOP 1 *
    FROM dbo.login
    ORDER BY id DESC
    GO
    

    mysql

    SELECT * FROM `login` 
    ORDER BY `id` DESC
    LIMIT 1,1;
    

    here's a simple SQL script that returns the last row created. this is great for when you add a new record that has an autogenerated id and you need that number.

    mssql

    CREATE PROCEDURE [dbo].[getLastLogin]
    AS
    SELECT TOP 1 *
    FROM dbo.login
    ORDER BY id DESC
    GO
    

    mysql

    SELECT * FROM `login` 
    ORDER BY `id` DESC
    LIMIT 1,1;
    
    D`؇p= ##[// ?plasma_pongplasma pongfluid dynamics meets 80's nostalgia

    plasma pong

    this little freeware gem will keep you occupied for hours. the game combines fluid dynamics with classic 80's nostalgia for and awesome game. and did i mention that it was free? grab a copy for pc or mac at plasmapong.com.


    plasma pong

    this little freeware gem will keep you occupied for hours. the game combines fluid dynamics with classic 80's nostalgia for and awesome game. and did i mention that it was free? grab a copy for pc or mac at plasmapong.com.


    DNYP9< 77)}} >graphic_reset_buttonsgraphic reset buttonsw/o javascript

    i was having some trouble at work creating form buttons with graphics for reset buttons. i just thought someone might be interested in my non-javascript solution:

    <button style="background: none; border: none;">
    <img src="reset.jpg" alt="" />
    </button>
    

    i was having some trouble at work creating form buttons with graphics for reset buttons. i just thought someone might be interested in my non-javascript solution:

    <button style="background: none; border: none;">
    <img src="reset.jpg" alt="" />
    </button>
    
    DC ZQA !!-)) Cart_floriaart floria african violets

    african violets

    what a beautiful summer it has been so far. my mom has been able to grow foreign flowers that she could have never dreamed about this year. a prime example were these gorgeous african violets. they bud as little pink balls, then they slowly open up into amazing little purple flowers.

    african violets

    what a beautiful summer it has been so far. my mom has been able to grow foreign flowers that she could have never dreamed about this year. a prime example were these gorgeous african violets. they bud as little pink balls, then they slowly open up into amazing little purple flowers.

    Dc$#@ !3U Bfontvirusfontvir.usmy new type foundry

    the time is has finally come. my new font site is online. i have meticulously updated all my older fonts, and reinvented my type foundry. i currently have 21 fonts for download. type|size=0 is dead. long live the fontvir.us!

    the time is has finally come. my new font site is online. i have meticulously updated all my older fonts, and reinvented my type foundry. i currently have 21 fonts for download. type|size=0 is dead. long live the fontvir.us!

             00XXXX                        XXXX00        
             00XXxx                        xxXX00        
             ee0000eeeeRR            RReeee0000ee        
                   xxXX00            00XXxx              
                   XXXX00            00XXXX              
             eexxXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxee        
             00XXXXeeee00XXXXXXXXXXXX00eeeeXXXX00        
         xxXXXXXXXX    00XXXXXXXXXXXX00    XXXXXXXXxx    
         XXXXXXXXXX    00XXXXXXXXXXXX00    XXXXXXXXXX    
     eeeeXXXXXXXXXXeeeeRRXXXXXXXXXXXXRReeeeXXXXXXXXXXeeee
     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     XXXX""""RRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXRR""""XXXX
     XXXX    00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX00    XXXX
     XXXX    00XXXX""""""""""""""""""""""""XXXX00    XXXX
     XXRR    00XXXX                        XXXX00    RRXX
     eeXX    00xxxxRR000000ee    ee000000RRxxxx00    XXee
                   xxXXXXXXxx    xxXXXXXXxx              
                   XXXXXXXXXX    XXXXXXXXXX              
              
      _____             __        .__
    _/ ____\___   _____/  |____  _|__|______  __ __ ______
    \   __Y  _ \ /    \   __\  \/ /  \_  __ \|  |  Y  ___/
     |  |(  <_> )   |  \  |  \   /|  ||  | \/|  |  |___ \
     |__| \____/|___|  /__|   \_/ |__||__|  /\____/____  >
                     \/                     \/         \/
    
    Dݔ z_C --33 Ewiimote_3d_modelwiimote 3d modelfor 3DSM

    wiimote 3D model

    i just found this zip on wiinintendo.net. someone made a flawless wiimote in 3D studio max. i can see a use for this in future projects...

    wiimote 3D model

    i just found this zip on wiinintendo.net. someone made a flawless wiimote in 3D studio max. i can see a use for this in future projects...

    DB 77A;; Dwii_flash_integrationwii flash integrationusing the wiimote with as3

    as i have been checking out the new features of actionscript 3 and flex, i stumbled upon fwiidom.org. this site is run by joa ebert + thibault imbert, and their mission is full flash wiimote integration. 

    currently wiiflash supports multiple wiimotes and nunchuks, the classic controller, as well as pc sensor bars. all you need is a bluetooth enabled pc (or adaptor) and a wiimote.

    the newest version is available from wiiflash or googlecode or you could get on the mailing list

    as i have been checking out the new features of actionscript 3 and flex, i stumbled upon fwiidom.org. this site is run by joa ebert + thibault imbert, and their mission is full flash wiimote integration. 

    currently wiiflash supports multiple wiimotes and nunchuks, the classic controller, as well as pc sensor bars. all you need is a bluetooth enabled pc (or adaptor) and a wiimote.

    the newest version is available from wiiflash or googlecode or you could get on the mailing list

    DT HHE -ss Ggraffontigraffonti#2 on dafont.com

    graffonti #2 on dafont.com

    woohoo! my new font graffonti is #2 on dafont.com's top 100 font list! if you don't know, dafont is the best free font site on the net. indexing 1000's of designers and font foundries. so to be font #2 (even for a day) is a pretty big honor! thanx everyone!

    graffonti #2 on dafont.com

    woohoo! my new font graffonti is #2 on dafont.com's top 100 font list! if you don't know, dafont is the best free font site on the net. indexing 1000's of designers and font foundries. so to be font #2 (even for a day) is a pretty big honor! thanx everyone!

    E"D ''-kk Fpapervision3dpapervision3Dreal 3D in flash

    papervision3D logo

    so i finally got a copy of adobe cs3 and flex builder2. flex is amazing, combining mxml and actionscript 3 together into a seamless package. now that im on the as3 tip, i decided to dive into papervision3D. pv3d is a set of actionscript classes that are used to create 3D objects within the flash environment. it's currently in beta and the source code is only available to osflash emailing list members. so if you want it signup here. thanx to carlos for creating pv3d, and to his girlfriend for convincing him to release the project open source!

    papervision3D logo

    so i finally got a copy of adobe cs3 and flex builder2. flex is amazing, combining mxml and actionscript 3 together into a seamless package. now that im on the as3 tip, i decided to dive into papervision3D. pv3d is a set of actionscript classes that are used to create 3D objects within the flash environment. it's currently in beta and the source code is only available to osflash emailing list members. so if you want it signup here. thanx to carlos for creating pv3d, and to his girlfriend for convincing him to release the project open source!

    D eeF /O3 Hblue_pill_rootkitdont take the "blue pill"new rootkit exploit

    the blue pill

    so i bet you haven’t heard about "the blue pill" exploit yet... so here's the basics. circa 2005, amd and intel started adding virtual machine functionality to the instruction set of the processors. the idea was having a virtual machine running natively on the processor, not an emulated one, which would cause an increase in speed. the virtual processor then switches to what's called “ring1 mode” which is like a basic user with limited privileges. In this mode, it can't touch any of the memory of the standard os, which is running in “ring0 mode”. this switch only happens when weird instructions go in that need to take advantage of the full cpu.

    the blue pill

    so i bet you haven’t heard about "the blue pill" exploit yet... so here's the basics. circa 2005, amd and intel started adding virtual machine functionality to the instruction set of the processors. the idea was having a virtual machine running natively on the processor, not an emulated one, which would cause an increase in speed. the virtual processor then switches to what's called “ring1 mode” which is like a basic user with limited privileges. In this mode, it can't touch any of the memory of the standard os, which is running in “ring0 mode”. this switch only happens when weird instructions go in that need to take advantage of the full cpu.

    the blue pill code exploits this by loading a virtual machine that “hyperjacks” the hypervisor (the visor is the mechanism that controls the os switching). it then switches operating systems so that blue pill is moved into ring0 and your os (e.g. vista) moves into ring1. now you have an infected computer that can't even access the virus that's infecting it, and the whole thing is completely undetectable. this is a serious rootkit...

    read more here and here

    F]  G AAa3 Irock_and_roll_hall_of_famerock and roll hall of famevacation

    the clash's london calling smashed guitar at the rock and roll hall of fame

    so my parents, nina, and i went to the rock & roll hall of fame in cleveland ohio. my dad had a few vacation days, so he wanted to take a trip. i have been to the hall a few times prior, but they have such a flux of different memorabilia... so it’s never the same place. this time the featured exhibits were the doors, the clash, and warped tour. the clash exhibit had a ton of old outfits the band wore, along with old instruments, tour photos, and flyers.

    rock and roll hall of fame

    so my parents, nina, and i went to the rock & roll hall of fame in cleveland ohio. my dad had a few vacation days, so he wanted to take a trip. i have been to the hall a few times prior, but they have such a flux of different memorabilia... so it’s never the same place. this time the featured exhibits were the doors, the clash, and warped tour. the doors exhibits were basically drawing, writing, and photos of jim morrison. the clash exhibit had a ton of old outfits the band wore, along with old instruments, tour photos, and flyers. security is tight inside the hall, but i did manage to snap of flew flix.

    the clash's london calling smashed guitar at the rock and roll hall of fame

    the clash's london calling smashed guitar at the rock and roll hall of fame view 2

    nina at the rock and roll hall of fame

    xero at the rock and roll hall of fame

    Fs$  I ))? Knhl_draft_2007NHL draft 2007i touched the stanley cup

    nina and xero with the stanley cup

    on thursday will calls me up and says...

    the nhl draft is this weekend in columbus ohio.
    you and nina are coming with me, i already have tickets.

    weird willy

    ...and it was on.

    the new area for the blue jackets was really nice! i cant wait until pittsburgh has a new arena. so afterȕ]H Kc-_ Jpapervision3d_component_for_cs3papervision3d component for adobe flash cs3flash cs3 plugin

    papervision3D component for flash CS3


    today john grden of rockonflash.com has release his new papervision3D component.
    this plugin for the flash cs3 ide allows you to...

    • render and edit your 3d objects in Flash IDE at design time!
    • it supports multiple material types
    • you can create scenes and cameras
    • management of resizing / centering of a papervision3D scene
    • dynamic masking to constrain the viewable area to set bounds
    • full api and access to scene, camera, and objects to code around
    • automatically loads materials via collada file
    • modification of rotation, camera zoom, camera focus, cameraZ

    papervision3D component for flash CS3


    today john grden of rockonflash.com has release his new papervision3D component.
    this plugin for the flash cs3 ide allows you to...

    • render and edit your 3d objects in Flash IDE at design time!
    • it supports multiple material types
    • you can create scenes and cameras
    • management of resizing / centering of a papervision3D scene
    • dynamic masking to constrain the viewable area to set bounds
    • full api and access to scene, camera, and objects to code around
    • automatically loads materials via collada file
    • modification of rotation, camera zoom, camera focus, cameraZ


    john has really outdone himself this time. this takes alot of the tedium of testing and retesting your 3D scenes to make sure the objects are positioned correctly.

    download the component here

    watch the rmi training videos
    for developers
    for designers
    source files for training videos

    F[ our 2 hour drive we arrived in columbus. amazingly i was able to park in the arena lot, right by the entrance...

    nina and xero with the stanley cup

    on thursday will calls me up and says...

    the nhl draft is this weekend in columbus ohio.
    you and nina are coming with me, i already have tickets.

    weird willy

    ...and it was on.

    the new area for the blue jackets was really nice! i cant wait until pittsburgh has a new arena. so after our 2 hour drive we arrived in columbus. amazingly i was able to park in the arena lot, right by the entrance. and their was this cool puck sticking out of the building above my car...

    NHL draft

    we gave the people our tickets and they handed us nhl draft towels, now even other sports are trying to steal the terrible towel. so the first thing i noticed when we walked up the stairs was the stanley cup. just sitting right there, not behind glass or anything. we waited in line for about 20 minutes until it was our turn with the cup. we got to touch the stanley cup! ( but i blinked in the photo :P ) after that we found out that the penguins draft pick wasn't for another hour. so we walked around and checked out the stadium. their were trophies everywhere! here's nina and i with the art ross trophy!

    NHL draft - art ross trophy

    we took like 100 photos of us with all of them. i was "that guy" photo-bombing in the background of a lot of people photos... lulz!

    NHL draft - photo bomber

    after that we still had some time to kill, so we left the arena and ate at my favorite restaurant in columbus, zen. it's a sushi bar, that has 15 different brands of saki. needless to say we ate tofu and got drunk.

    NHL draft - sushi break

    with a full stomach, we meandered back to the draft just in time to see the pens pick. we hung out at the arena for a while longer then went to check out more of the city. in the parking lot will turns to us and says...

    i swear i hear motley crue in the distance. Yeah!
    it's either them, or the best crue cover band alive!

    weird willy

    turns our will was right... down the road on neal street, vince neal was playing! we listened to the show from afar for a while then hit the bar. we ended up at mac's scottish pub, where i had the best black and tan of my life! we had was a blast!

    F L<L K WW5S Masp_net_pure_code_database_connectionasp.net pure code database connectionthree different ways

    visual studio 2005 has a tool for connecting to a database called a "sqlDataSource". while this tool works, i find myself wanting to create the connection and build or execute stored procedures within my own C# code. this tutorial will show you how to connect to a sql database 3 different ways in asp.net

    the first thing is creating a connection with your database. if yʗAJ 33? o L3d_sound_visualizer3D sound visualizerpapervision3D spikey ball

    papervision3D sound visualizer

    a fellow papervision3D enthusiast zeh (creator of the popular mctween) has created a new way of animating full 3D objects in the flash/flex environment with 100% code! introducing the caurina tweener, which is now hosted on googlecode. tweener is still in development, but is completely stable and functional.

    check out the sound visualization demo i created using pv3d and tweener
    http://lab.xero.nu/spineSound/ (source)

    papervision3D sound visualizer

    a fellow papervision3D enthusiast zeh (creator of the popular mctween) has created a new way of animating full 3D objects in the flash/flex environment with 100% code! introducing the caurina tweener, which is now hosted on googlecode, this re-envisioning of tweening is no longer a collection of h4x and prototypes extending existing ones. zeh has written full static classes following the idea of simple, one line commands. tweener is still in development, but is completely stable and functional.

    check out the sound visualization demo i created using pv3d and tweener
    http://lab.xero.nu/spineSound/ (source)

    UPDATE!

    i have created a new version of the demo in flex using mxml. this demo also has the ability to dynamically change the colors of the filters applied to the spikey ball. i also compiled this demo with the current trunk version of papervision3D as well as the new 1.5 refactored branch to test the speed increase with the new version. 

    check out the 0.91 version here (source)
    and the new 1.5 version here (source)

    FE@ou understand how connection strings are built, write your own other wise will can use the visual studio database tool to do that for us.

    configure database

    visual studio 2005 has a tool for connecting to a database called a "sqlDataSource". while this tool works, i find myself wanting to create the connection and build or execute stored procedures within my own C# code. this tutorial will show you how to connect to a sql database 3 different ways in asp.net

    the first thing is creating a connection with your database. if you understand how connection strings are built, write your own other wise will can use the visual studio database tool to do that for us.

    configure database

    drag a new sqlDataSource onto the canvas, highlight it, then click the little arrow that appears to reveal configure datasource. in the windows that follow you can create a new database connection or use an existing one. refresh the server list and select your database server or use localhost. then choose if you want to use windows integrated security (where the server is the database user) or sql server security (where you supply the sql username and password). then select the database you want to connect to on the server, and test your connection.

    select database

    press ok, and you will return to the previous window, click the little plus sign to expand and show the connection string that visual studio generated for you. copy it, and click cancel. now you can delete the sqlDataSource and switch to code view.

    database connection

    now the first thing we need to do is create a database connection in our code:

    SqlConnection con = new SqlConnection("Data Source=DEVELOPMENT;Initial Catalog=rss;Integrated Security=True");
    


    hardcoded procedure:

    int id = 13;
    con.Open();
    //---create procedure
    string select = "SELECT * FROM 'table' WHERE 'id' = @ID"; 
    SqlCommand command = new SqlCommand(select, Con); 
    //---paramerter adding
    command.Parameters.Add("@ID", SqlDbType.Int).Value = id;
    //---make a data reader
    SqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) { 
       String data = reader["thing"].ToString();
    }
    //---close connection
    con.Close();
    


    using a stored procedure with one parameter
    (e.g. "DELETE 'tabelname' WHERE 'id' = @ID; ")

    int id = 42;
    con.Open();
    //---setup query
    SqlCommand commando = new SqlCommand("deleteUser", con);
    commando.CommandType = CommandType.StoredProcedure;
    //---paramerter adding
    commando.Parameters.Add("@ID", SqlDbType.Int).Value = id;
    //---execute the query
    commando.ExecuteNonQuery();
    //---close connection
    con.Close();
    


    using a stored procedure without any parameters
    (e.g. "SELECT * FROM 'tabelname'; ")

    con.Open();
    //---select a stored procedure
    SqlCommand commander = new SqlCommand("getFilename", con);
    commander.CommandType = CommandType.StoredProcedure;
    //---make a data reader
    SqlDataReader SQLreader;
    SQLreader = commander.ExecuteReader();
    while (SQLreader.Read()) {
       //---select data by array index
       String data  = SQLreader[0].ToString();
       //---select data by sql collumn name
       String data2 = SQLreader["name"].ToString();
    }
    //---close connections
    SQLreader.Close();
    con.Close();
    
    F9h zL KK9+ Nasp_net_random_number_generatorasp.net random number generatorthe central randomizer

    here is my asp.net randomizer class based on the c R250/512 shift-register sequence random number generator, by kirkpatrick and stoll and published (j. computational physics, vol 40, pp. 517-526) with an added a pseudo-random class redefinition and buffer overflow protection.

    example usage:

    randomizer x = new randomizer();
    int num = x.random();
    

    here is my asp.net randomizer class based on the c R250/512 shift-register sequence random number generator, by kirkpatrick and stoll and published (j. computational physics, vol 40, pp. 517-526) with an added a pseudo-random class redefinition and buffer overflow protection.

    public sealed class randomizer {
        private int good_index;
        private int evil_index;
        private int[] good_buffer = new int[250];
        private int[] evil_buffer = new int[521];
     
        public randomizer()
        {
            Random r = new Random();
            int i = 521;
            int seed = 1;
            int salt = 999999999;
     
            while (i-- > 250) {
                evil_buffer[i] = r.Next();
            }
            while (i-- > 31) {
                good_buffer[i] = r.Next();
                evil_buffer[i] = r.Next();
            }
            while (i-- > 0) {
                good_buffer[i] = (r.Next() | seed) & salt;
                evil_buffer[i] = (r.Next() | seed) & salt;
                salt ^= seed;
                seed >>= 1;
            }
            good_buffer[0] = seed;
            evil_buffer[0] = salt;
            good_index = 0;
            evil_index = 0;
        }
     
    
        public int random() {
            int g = good_index;
            int e = evil_index;
     
            int nina = g - (250-103);
            if (nina < 0)
                nina = g + 103;
            int xero = e - (521-168);
            if (xero < 0)
                xero = e + 168;
     
            int x = good_buffer[nina] ^ good_buffer[g];
            good_buffer[g] = x;
            int z = evil_buffer[xero] ^ evil_buffer[e];
            evil_buffer[e] = z;
     
            g = (g != 249) ? (g + 1) : 0;
            good_index = g;
            e = (e != 521) ? (e + 1) : 0;
            evil_index = e;
     
            return x ^ z;
        }
    
    }
    


    example usage

    randomizer x = new randomizer();
    int num = x.random();
    
    G4 --PM UU1K Orfc822_compliant_dates_for_rss_feedsRFC822 compliant dates for rss feedsin php and asp.net

    with the advent of web-syndication, a few different feed protocols have evolved (rss and atom being the most popular). because of their growth in popularity the protocol to create a feed has become more stringent. luckily we have validators who help us keep our feeds on the right track. one of these guidelines is RFC822 compliant dates. these dates look like Sat, 14 Jul 2007 18:40:26 -0400. formatting your data to be compliant with this standard can be challenging, so i have written some code to help you along... 

    Creating a RFC822 compliant date in php is a snap...

    $rssDate = date("r");
    

    in asp.net this is a bit more tricky. microsoft doesn't have a native RFC822 date format, so we are going to have to convert our dateTime.now() into that format...

    with the advent of web-syndication, a few different feed protocols have evolved (rss and atom being the most popular). because of their growth in popularity the protocol to create a feed has become more stringent. luckily we have validators who help us keep our feeds on the right track. one of these guidelines is RFC822 compliant dates. these dates look like Sat, 14 Jul 2007 18:40:26 -0400. formatting your data to be compliant with this standard can be challenging, so i have written some code to help you along... 

    Creating a RFC822 compliant date in php is a snap...

    $rssDate = date("r");
    

    in asp.net this is a bit more tricky. microsoft doesn't have a native RFC822 date format, so we are going to have to convert our dateTime.now() into that format:

    public string dateFormat(DateTime date) {
        int offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours;
        string timeZone = "+" + offset.ToString().PadLeft(2, '0');
        if (offset < 0) {
            int i = offset * -1;
            timeZone = "-" + i.ToString().PadLeft(2, '0');
        }
        return date.ToString("ddd, dd MMM yyy HH:mm:ss " + timeZone.PadRight(5, '0'));
    }
    
    GW PO ==/  Qactionscript3_randomizeractionscript3 randomizerone line function

    here a nice little one liner. this function returns a random number between a user supplied range.

    function randomizer (low:Number, high:Number):Number {
       return Math.floor(low + (Math.random() * (high-low)));
    }
    

    example useage, will return a number between 5 - 50.

    var x:Number = randomizer(5, 50);
    

    here a nice little one liner. this function returns a random number between a user supplied range.

    function randomizer (low:Number, high:Number):Number {
       return Math.floor(low + (Math.random() * (high-low)));
    }
    

    example useage, will return a number between 5 - 50.

    var x:Number = randomizer(5, 50);
    
    F`zN +A#o Pstuck_butterflybutterfly stuck in a lillyart floria

    monarch buttery fly stuck in a lilly

    it has been a great year for flowers. thus it has been a great year for floral photography. i dont know why, but after my experience with the african violets, i have been into art flora a lot more. my mother's green thumb grew some beautiful golden lillys right by their porch. i took a few snaps, then went inside. i returned a few minutes later with a clean memory stick only to discover a monarch butterfly in the lilly i was just shooting.

    monarch buttery fly stuck in a lilly

    it has been a great year for flowers. thus it has been a great year for floral photography. i dont know why, but after my experience with the african violets, i have been into art flora a lot more. my mother's green thumb grew some beautiful golden lillys right by their porch. i took a few snaps, then went inside. i returned a few minutes later with a clean memory stick only to discover a monarch butterfly in the lilly i was just shooting. he (the monarch) was drinking out of the base of the flower, but had slipped in and lodged himself between the stamen and flowers petals. i took a few more shots, then helped him escape. 

    check out the entire album here.

    Fmքonnection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler); connection.connect(null); } private function netStatusHandler(evt:NetStatusEvent):void { switch (evt.info.code) { case "NetConnection.Connect.Success": stream = new NetStream(connection); stream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncErrorHandler); video = new Video(); video.attachNetStream(stream); stream.play("lupinIII-s2e002-buns.guns.and.fun.in.the.sun.flv"); label.htmlText ="xero.nu presents... \n lupin the 3d\n buns guns and fun in the sun"; break; case "NetStream.Play.StreamNotFound": label.text="flv not found..."; break; case "NetStream.Play.Stop": //loop video stream.seek(0); break; } } // _______________________________________________________________________ // event handlers private function asyncErrorHandler(evt:AsyncErrorEvent):void { } private function securityErrorHandler(evt:SecurityErrorEvent):void { label.text="security error..."; } // _______________________________________________________________________ // init3D private function init3D():void { this.container = new Sprite(); addChild(this.container); this.container.x = this.stage.stageWidth / 2; this.container.y = this.stage.stageHeight / 2; scene = new MovieScene3D( container ); camera = new Camera3D(); camera.z = -planeSize; camera.focus = 1000; camera.zoom = 1; bmpData = new BitmapData(TEXTURE_W,TEXTURE_H,false,0xff0000); material = new BitmapMaterial(bmpData); material.oneSide = true; planeObj = scene.addChild( new Cube( material, planeSize, planeSize, planeSize, segment, segment, segment) ); } // _______________________________________________________________________ // loop3d private function loop3D( event:Event ):void { valx -= 0.2; valy -= 0.5; planeObj.rotationY = valx; planeObj.rotationX = 35; video.attachNetStream(null); bmpData.draw(video); video.attachNetStream(stream); var filters:Array = new Array; filters.push(new GlowFilter(0xFFFFFF, 1, 10, 10, 10, 1)); filters.push(new DropShadowFilter(70, 55, 0x000000, 0.5, 9, 9, 1, BitmapFilterQuality.HIGH)); /* var blur:Number = 10*Math.sin( (++count/25) ); if(blur > 0){ filters.push(new BlurFilter(blur,blur,BitmapFilterQuality.HIGH)); } */ planeObj.container.filters = filters; this.scene.renderCamera( camera ); } // _______________________________________________________________________ // onStageResize private function onStageResize(event:Event):void { this.container.x = this.stage.stageWidth / 2; this.container.y = this.stage.stageHeight / 2; } }

    p.s. happy birthday to me!

    Fd MM(P EE)]_ Rpapervision3d_video_materialpapervision3D video materialthe lupin cube

    papervision3D video material - the lupin cube

     

    my latest papervision3d project was a revamp of the video cube. this time around the rotation of the cube is static, not mouse driven, also i added some new filtering, and a different method of using a video texture that doesn’t throw an error message. the flv is from the best cartoon ever lupin the 3rd. this episode is called "buns, guns, and fun in the sun" 

    check it out here.

    and here's the as3 code:

    papervision3D video material - the lupin cube

     

    my latest papervision3d project was a revamp of the video cube. this time around the rotation of the cube is static, not mouse driven, also i added some new filtering, and a different method of using a video texture that doesn’t throw an error message. the flv is from the best cartoon ever lupin the 3rd. this episode is called "buns, guns, and fun in the sun" 

    check it out here.

    and here's the as3 code:

    package
     {
         import flash.display.*;
         import flash.events.*;
         import flash.media.*;
         import flash.net.*;
         import flash.text.*;
         import flash.filters.*;
     
         //filmed in papervision3d     
         import org.papervision3d.scenes.*;
         import org.papervision3d.objects.*;
         import org.papervision3d.cameras.*;
         import org.papervision3d.materials.*;
     
         [SWF(backgroundColor=0x333333)]
     
         public class main extends Sprite
         {
           // _______________________________________________________________________
           //                                                                  vars3D
             private var container : Sprite;
             private var scene     : MovieScene3D;
             private var camera    : Camera3D;
     
             private var planeObj  : DisplayObject3D;
             private var planeSize : int = 500;
             private var segment   : int = 2;
             private var material  : BitmapMaterial;
             private var bmpData   : BitmapData;
             private var connection: NetConnection;
             private var stream    : NetStream;
             private var video     : Video;
             private var label     : TextField;
     
             private var valx      : Number = 0;
             private var valy    : Number = 0;
             private var count     : uint = 0;
     
             static public const
                 TEXTURE_W:int = 320,
                 TEXTURE_H:int = 240;
     
             // _______________________________________________________________________
             //                                                             constructor
             public function main():void
             {
                 stage.frameRate = 60;
                 stage.quality   = "MEDIUM";
                 stage.scaleMode = "noScale";
                 stage.align = StageAlign.TOP_LEFT;
                 this.addEventListener(Event.ENTER_FRAME, loop3D);
                 this.stage.addEventListener(Event.RESIZE, onStageResize);
                 label=new TextField();
                 label.autoSize=TextFieldAutoSize.LEFT;
                 label.x = 10;
                 label.textColor=0xFFFFFF;
                 label.selectable=false;
                 addChild(label);
     
                 init3D();
     
                 connection=new NetConnection();
                 c
    sending email is a snap with asp.net 2.0, this simple function sends an email to the specified name and email you pass to the function. with a little database integration this can be recalled in almost infinite recursion, and will not be tagged as spam because it sends individual emails, not a bulk message to many users. for fastest delivery times specify the direct path to your mail server (see line #18), and setup your mail server to not scan outgoing  webserver mail for spam. *edit* i now recant that statement. true, pure execution times will be faster but at the sake of ignorance. i would rather have the slightly increased send time and the knowledge that my code has not be hijacked and sending spam. 

    example usage:

    sendmsg("xero", "x@xero.owns.us");
    

    sending email is a snap with asp.net 2.0, this simple function sends an email to the specified name and email you pass to the function. with a little database integration this can be recalled in almost infinite recursion, and will not be tagged as spam because it sends individual emails, not a bulk message to many users. for fastest delivery times specify the direct path to your mail server (see line #18), and setup your mail server to not scan outgoing  webserver mail for spam. *edit* i now recant that statement. true, pure execution times will be faster but at the sake of ignorance. i would rather have the slightly increased send time and the knowledge that my code has not be hijacked and sending spam. 

    using System.Net.Mail;
    using System.Net.Mime;
     
    protected void sendmsg(string name, string email)
    {
        String filename = Server.MapPath("some.random.file.exe");
        Attachment file = new Attachment(filename, MediaTypeNames.Application.Octet);
     
        MailMessage msg = new MailMessage();
        msg.From = new MailAddress("sender@fontvir.us");
        msg.To.Add(new MailAddress(email));
        msg.Subject = "test email";
        msg.Attachments.Add(file);
        msg.IsBodyHtml = true;
        msg.Body = "hello, " + name.ToString();
     
        SmtpClient client = new SmtpClient();
        client.Host = "mail.fontvir.us";
        client.Send(msg);
    }

    example useage

    sendmsg("xero", "x@xero.owns.us");
    
    FP  =IS ][] Uevo_flash_bombsquad_blowup_the_demosceneevoFlash/bombsquad blowup the demosceneADHDTV

    ADHDTV demoscene release by evoflash/bombsquad

    so for anyone who dousnt know, the demoscene is a community of programmers, artists, and musicians, who come together and create amazing graphic visualizations for or coupled by music. (mr.doob explains) at this years assemby07 the evoflash team of bombsquad went crazy! their demo, entitled ADHDTV is amazing. They combine realtime fluid dynamics, with 3D computational physics, enviorment mapping, raycasting, phong shading, dynamic lighting, and shadowing... now that's some sexy math! 

    watch the demo online or download it from 

    so for anyone who dousnt know, the demoscene is a community of programmers, artists, and musicians, who come together and create amazing graphic visualizations for or coupled by music. (mr.doob explains) at this years assemby07 the evoflash team of bombsquad went crazy! their demo, entitled ADHDTV is amazing. They combine realtime fluid dynamics, with 3D computational physics, enviorment mapping, raycasting, phong shading, dynamic lighting, and shadowing... now that's some sexy math! 

    watch the demo online or download it from thescene

    G@R ??Gmm Tgraffonti_upz_in_kickflipgraffonti upz in kickflipfont featured in a video game

    my font, graffonti, has been featured in a new flash and papervision3D skateboarding game called kickflip. the game was designed and programmed by ugur ister (aka tom samson) co-founder of stimunationgames for the wrigley's candystand site.

    click here to play kickflip

    my font, graffonti, has been featured in a new flash and papervision3D skateboarding game called kickflip. the game was designed and programmed by ugur ister (aka tom samson) co-founder of stimunationgames for the wrigley's candystand site.

    click here to play kickflip

    F RR+T CC??q Vas3_geometry_class_exporteras3 geometry class exporterexport 3D models to flash

    a new component for 3D studio max has arrived that allows you to export the geometry of you model directly into a format that actionscript 3 can understand. the plugin has options for exporting to papervision3D, away3D, and sandy3D. it was developed by seraf and can be downloaded here. and exporting a model couldnt be easier. 

    step 1. create you model, and select it 
    (you can tell its selected because of the white bounding box)

    select model

    a new component for 3D studio max has arrived that allows you to export the geometry of you model directly into a format that actionscript 3 can understand. the plugin has options for exporting to papervision3d, away3d, and sandy. it was developed my seraf and can be downloaded here. and exporting a model couldnt be easier. 

    step 1. create you model, and select it 
    (you can tell its selected because of the white bounding box)

    select model

    step 2. open the utilities panel and select MaxScript

    maxscript utilities

    step 3. in the MaxScript window, select Run Script

    run script

    step 4. select the as3GeomClassExporter.ms file,
    then select it from the drop down

    select script

    step 5. a new as3GeomClassExporter panel will appear. select you 3D engine, give your object a class name, and a package location (if necessary) then press the export class button to save it.

    as3 geomclass exporter

    now using this object in papervision3D is a snap! just...

    import com.fontvirus.KnotAgain;
    var theKnot:KnotAgain = new KnotAgain( skin );
    
    G2h %U %%G]{ Wtie_the_knottie the knotpapervision3D torus knot demo

    tie the knot - papervision3D demo

    so i had the chance this weekend to create a few 3D models and export their geometry into papervision3D primitives. so i decided to create a demo, using both my as3 torusKnot primitives and the new flex accordion component. about the time i finished my demo i decided to re-sync my pv3d folder with the svn. at that exact same moment their was a slip-up. somehow one of the new dev materials got leaked into the public svn. the new material features dynamic lighting! so i decided to hack it into my new demo. so enjoy my custom primitive shadedColorMaterial demo created in flex3.

    tie the knot - papervision3D demo

    so i had the chance this weekend to create a few 3D models and export their geometry into papervision3D primitives. so i decided to create a demo, using both my as3 torusKnot primitives and the new flex accordion component. about the time i finished my demo i decided to re-sync my pv3d folder with the svn. at that exact same moment their was a slip-up. somehow one of the new dev materials got leaked into the public svn. the new material features dynamic lighting! so i decided to hack it into my new demo. so enjoy my custom primitive shadedColorMaterial demo created in flex3. 

    updated with fullscreen support!

    view the demo or the source (right click enabled)
    stay in the loop, join the papervison3D mailing list.

    E V M% Xrecyourecyoupapervision3D webcam experiment

    recyou

    check out this new ad campaign for sony walkman in japan created by keita, and called RECYOU. this crazy web-promotion site combines flash interactivity with sound and motion visuals created with papervision3D

    clicking "S" allows you to upload a photo, from witch they use facial recognition software to define the key areas of your face. then they crop in a new sony walkman and make you sing.

    they also send you a copy of the video they create of you in mp4 format, along with a release form that says you may appear on japanese tv. 

    i took about a day until i found myself on the site, im in the photo above...

    recyou

    check out this new ad campaign for sony walkman in japan created by keita, and called RECYOU. this crazy web-promotion site combines flash interactivity with sound and motion visuals created with papervision3D

    clicking "S" allows you to upload a photo, from witch they use facial recognition software to define the key areas of your face. then they crop in a new sony walkman and make you sing.

    they also send you a copy of the video they create of you in mp4 format, along with a release form that says you may appear on japanese tv. 

    i took about a day until i found myself on the site, im in the photo above 
    (with the beard and the ear goggles)

    GWrequiredRevision = 28; </script> <body scroll="no" bgcolor="#000000"> <script language="JavaScript" type="text/javascript"> <!-- var hasProductInstall = DetectFlashVer(6, 0, 65); var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision); if ( hasProductInstall && !hasRequestedVersion ) { var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn"; var MMredirectURL = window.location; document.title = document.title.slice(0, 47) + " - Flash Player Installation"; var MMdoctitle = document.title; AC_FL_RunContent( "src", "playerProductInstall", "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"", "width", "100%", "height", "100%", "align", "middle", "id", "test", "quality", "high", "bgcolor", "#869ca7", "name", "test", "allowScriptAccess","sameDomain", "type", "application/x-shockwave-flash", "pluginspage", "http://www.adobe.com/go/getflashplayer" ); } else if (hasRequestedVersion) { AC_FL_RunContent( "src", "test", "width", "100%", "height", "100%", "align", "middle", "id", "test", "quality", "high", "bgcolor", "#869ca7", "name", "test", "allowScriptAccess","sameDomain", "type", "application/x-shockwave-flash", "flashvars",'passed=<?php echo($getit); ?>', "pluginspage", "http://www.adobe.com/go/getflashplayer" ); } else { var alternateContent = 'Alternate HTML content should be placed here. ' + 'This content requires the Adobe Flash Player. ' + '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>'; document.write(alternateContent); } // --> </script> <noscript> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="test" width="100%" height="100%" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"> <param name="movie" value="test.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#869ca7" /> <param name="flashvars" value="passed=<?php echo($getit); ?>" /> <param name="allowScriptAccess" value="sameDomain" /> <embed src="test.swf" quality="high" bgcolor="#869ca7" width="100%" height="100%" name="test" align="middle" flashvars="passed=<?php echo($getit); ?>" play="true" loop="false" quality="high" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"> </embed> </object> </noscript> <?php } ?> </body> </html>

    to access the "passed" var is flex use:
    Application.application.parameters.passed;

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application 
    	xmlns:mx="http://www.adobe.com/2006/mxml" 
    	layout="absolute" 
    	backgroundGradientAlphas="[1.0, 1.0]" 
    	backgroundGradientColors="[#000000, #252525]"
    	creationComplete="init()">
    <mx:Script>
    	<![CDATA[
    		public var passedvar:String;
    		private function init():void { 
    			//passed is the name of the flash var
    			passedvar = Application.application.parameters.passed;
    			thething.htmlText = passedvar.toString();
    		}
    	]]>
    </mx:Script>
    	<mx:Label id="thething" text="Label" color="#FFFFFF" fontSize="23" horizontalCenter="0" verticalCenter="0" />
    </mx:Application>
    

    to access the "passed" var is flash use:
    LoaderInfo(this.root.loaderInfo).parameters;

    var tf:TextField = new TextField();
    tf.textColor = 0xFFFFFF;
    addChild(tf);
    try {
        var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
    	//passed is the name of the flash var
    	tf.appendText("passed var: " + paramObj['passed'].toString());
    } catch (error:Error) {
        tf.appendText("error: " + error.toString());
    }
    
    G   iW KM7WK Yactionscript3_runtime_variablesactionscript 3 runtime variablessetting them with php

    the key to creating dynamic systems on the web is the ability to send and receive data from one component to the next. flash and flex are no different. there are a lot of cases where you need to send these variables while the application is running, but there are an equal amount of times where the application needs data at run time. passing variables to flash historically has been rather easy, you just query-string data right into the src tag of your flash movie:

    src="test.swf?passed=hello"
    

    by doing this flash would create a new variable (in this case named passed) when the flash movie is loaded. but with the advent of OOP coding in AS3, this technique has become depreciated. 

    in actionscript 3 you need to use the flashvars parameter to send data to your flash movie. the technique is the same for both flash and flex, but once the variable is passed flash and flex has a different syntax to access these vars.

    the key to creating dynamic systems on the web is the ability to send and receive data from one component to the next. flash and flex are no different. there are a lot of cases where you need to send these variables while the application is running, but there are an equal amount of times where the application needs data at run time. passing variables to flash historically has been rather easy, you just query-string data right into the src tag of your flash movie:

    src="test.swf?passed=hello"
    

    by doing this flash would create a new variable (in this case named passed) when the flash movie is loaded. but with the advent of OOP coding in AS3, this technique has become depreciated. 

    in actionscript 3 you need to use the flashvars parameter to send data to your flash movie. the technique is the same for both flash and flex, but once the variable is passed flash and flex has a different syntax to access these vars. here is a simple php script that displays a text box, for data input then creates a swf wrapper that embeds your variable into the swf. ( look for <?php echo($getit); ?> )

    <html>
    <head>
    <title>flex runtime vars</title>
    <?php
    $getit = $_REQUEST["what"];
    if(!$getit){
    ?>
    </head><body bgcolor="#000000">
    <form method="GET" action="index.php">
    <input type="text" id="what" name="what" style="COLOR: #cccccc;BACKGROUND-COLOR:#000000" /><br />
    <input type="submit" value="submit" style='COLOR: #cccccc; BACKGROUND-COLOR: #282828' />
    </form>
    <?php
    } else {
    ?>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="deeplinking/deeplinking.css" />
    <script src="AC_OETags.js" language="javascript"></script>
    <script src="deeplinking/deeplinking.js" language="javascript"></script>
    <style>
    body { margin: 0px; overflow:hidden }
    </style>
    <script language="JavaScript" type="text/javascript">
    var requiredMajorVersion = 9;
    var requiredMinorVersion = 0;
    var pt>
    	<![CDATA[
    		import mx.controls.Alert;
    		import org.papervision3d.cameras.Camera3D;
    		import org.papervision3d.scenes.Scene3D;
    		import org.papervision3d.objects.Plane;
    		import org.papervision3d.objects.DisplayObject3D;
    		import org.papervision3d.materials.BitmapMaterial;
    		import com.fontvirus.FlexFPS;
    		
    		private var theFPS:FlexFPS;
    		private var basePoint:Point;
    		private var rect:Rectangle;
    		private var formTexture:BitmapData;
    		private var scene3D:Scene3D;
    		private var camera:Camera3D;
    		private var rootNode:DisplayObject3D;
    		private var plane:DisplayObject3D;
    	
    		private function init3D():void {
    			theFPS = new FlexFPS(0x006600, 0x000000, 0xFFFFFF);
    			this.addChild(theFPS);
    			var formwidth:Number = myPanel.width;
    			var formheight:Number = myPanel.height;
    							
    			formTexture = new BitmapData (formwidth, formheight);
    			
    			scene3D = new Scene3D(paperCanvas.canvas);
    		
    			camera = new Camera3D();
    			camera.zoom = 10;
    			camera.focus = 200;
    			
    			rootNode = scene3D.addChild(new DisplayObject3D("rootNode"));
    			rootNode.container = paperCanvas.canvas;
    			
    			var material1:BitmapMaterial = new BitmapMaterial(formTexture);
    			material1.oneSide = false;
    		
    			plane = rootNode.addChild(new Plane(material1,formwidth,formheight,4,4), "plane");	
    		}
    		
    		private function loop3D(event:Event):void {
    			theFPS.update("rendered: " + scene3D.stats.rendered.toString());
    			if(camera != null) {
    				camera.x += ((mouseX * 5) - camera.x) * 0.10;
    				camera.y += ((mouseY * 5) - camera.y) * 0.10;
    				
    				formTexture.draw(myPanel);
    				rootNode = scene3D.getChildByName("rootNode");
    				rootNode.container.filters = [new GlowFilter(0x00FF00, 1, 90, 90, 1, 1, false, false)];
    				scene3D.renderCamera(camera);	
    			}
    		}			
    		private function reset():void {
    			txtname.text = "";
    			txtpass.text = "";
    		}
    		private function hit():void {
    			Alert.show("login success!", "fontvir.us", 1, this);
    		}
    	]]>
    </mx:Script>
    <mx:Panel id="myPanel" title="flexComponet3D" shadowDistance="6" shadowDirection="left" backgroundColor="#000000" color="#fFFFFF" cornerRadius="0" headerHeight="22" headerColors="[#000000, #666666]" width="209" backgroundAlpha="1.0" height="162" borderStyle="solid" x="10" y="62">		
    	<mx:Form width="204" height="135" backgroundColor="#000000">
    		<mx:FormItem label=" "/>
    		<mx:FormItem label="name">
    			<mx:TextInput width="83" backgroundColor="#666666" themeColor="#00FF00" color="#FFFFFF" id="txtname"/>
    		</mx:FormItem>
    		<mx:FormItem label="password">
    			<mx:TextInput width="82" backgroundColor="#666666" themeColor="#00FF00" color="#FFFFFF" id="txtpass"/>
    		</mx:FormItem>
    			<mx:HBox width="100%">
    				<mx:Button label="enter" textRollOverColor="#cccccc" textSelectedColor="#FFFFFF" color="#FFFFFF" fillColors="[#333333, #999999]" borderColor="#000000" themeColor="#00FF00" click="hit()"/>
    				<mx:Button label="reset" textRollOverColor="#cccccc" textSelectedColor="#FFFFFF" color="#FFFFFF" fillColors="[#333333, #999999]" borderColor="#000000" themeColor="#00FF00" click="reset()"/>
    			</mx:HBox>
    	</mx:Form>
    </mx:Panel>
    <xx:Canvas3D id="paperCanvas" backgroundAlpha="0" width="100%" height="100%" x="235" y="0"/>
    <mx:Style>
      Alert {
        corner-radius: 14;
        header-height: 27;
        header-colors: #999999, #000000;
        background-color: #000000;
        color: #ffffff;
        border-thickness: 4;
        border-color: #000000;
        panel-border-style: roundCorners;
        shadow-distance: 9;
        shadow-direction: right;
      }
      Button {
        width: 85;
        height: 24;
        border-thickness: 1;
        corner-radius: 4;
        fill-colors: #666666, #999999;
        border-color: #666666;
        theme-color: #000000;
        text-roll-over-color: #ffffff;
        text-selected-color: #cccccc;
        color: #cccccc;
      }
    </mx:Style>
    </mx:Application>
    

    view demo here

    Gv 232~Y 7SS [dethalbumdethalbumdethklok metaloclypse

    dethalbum cover

     

    OMFG! the dethklok metaloclypse DETHALBUM and dvd just arrived and are amazing! if you haven't seen the show, you need to. and if you have, then you know what im talking about! the deluxe cd has a bonus disk with a bunch of funny songs on it, but good luck finding it, because it's been sold out since 0-day. more info on [adult-swim]'s metal page.

    dethalbum cover

     

    OMFG! the dethklok metaloclypse DETHALBUM and dvd just arrived and are amazing! if you haven't seen the show, you need to. and if you have, then you know what im talking about! the deluxe cd has a bonus disk with a bunch of funny songs on it, but good luck finding it, because it's been sold out since 0-day. more info on [adult-swim]'s metal page.

    FhܱBX ??]i_ Zflex_forms_as_3d_texturesflex forms as 3D texturesuse the bitmapData of any flex component

    3D flex components

    i guess this is more of a test then a real demo. in flex its extremely simple to access the bitmap data from any component on the screen as it is styled at that time. this includes things like text with in a text box.
    in this example, create a flex panel

    <mx:Panel id="myPanel" /> 

    then create a bitmapdata object

    var formTexture = new BitmapData; 

    then draw the panel right into it

    formTexture.draw(myPanel);

    then I use that texture on a 3D plane with the help of papervsion3D. and a little glow filter just because...

    3D flex components

    i guess this is more of a test then a real demo. in flex its extremely simple to access the bitmap data from any component on the screen as it is styled at that time. this includes things like text with in a text box.
    in this example, create a flex panel

    <mx:Panel id="myPanel" /> 

    then create a bitmapdata object

    var formTexture = new BitmapData; 

    then draw the panel right into it

    formTexture.draw(myPanel);

    then I use that texture on a 3D plane with the help of papervsion3D. and a little glow filter just because...

    heres the full source:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application 
    	xmlns:mx="http://www.adobe.com/2006/mxml" 
    	xmlns:xx="com.fontvirus.*"
    	layout="absolute" 
    	backgroundGradientAlphas="[1.0, 1.0]" 
    	backgroundGradientColors="[#000000, #555555]"
    	creationComplete="init3D()"
    	enterFrame="loop3D(event)">
    <mx:Scri
    Z99'YY	\photoshop_cs3_graffitiphotoshop cs3 graffitiwith vectors!

    skull arrow vomit vector graffiti

    his weekend i decided to not dive into flash/flex for a change, but do some work in photoshop cs3 instead. there a lots of new features i have yet to learn, but this weekend i concerned myself with creating custom brushes and using them. i came up with two sick designs. the first is a gasmask and crossbones featuring one of my new fonts that's not available quite yet called v is for victorian. the other is a venture bros-esque skull vomiting up a bunch of graffiti arrows. both of these exist thanx to gomedia's amazing vector pack arsenal. they are cheap and well worth the cost. 

    you can download my wallpaper designs here.

    skull arrow vomit vector graffiti

    his weekend i decided to not dive into flash/flex for a change, but do some work in photoshop cs3 instead. there a lots of new features i have yet to learn, but this weekend i concerned myself with creating custom brushes and using them. i came up with two sick designs. the first is a gasmask and crossbones featuring one of my new fonts that's not available quite yet called v is for victorian. the other is a venture bros-esque skull vomiting up a bunch of graffiti arrows. both of these exist thanx to gomedia's amazing vector pack arsenal. they are cheap and well worth the cost. 

    you can download my wallpaper designs here.

    G\$ S[ 77%1 ]pirate_themed_weddingpirate themed weddingon halloween

    pirate nina and xero

    this year's halloween was a bit different. our friends opie and jessie had a pirate themed wedding! so deciding was to be this time around was pretty obvious. they had the ceremony and the reception at the same hall in pittsburgh, but since we were late as usual, we missed the first part. but they didn't seem to mind, since the actual wedding part took about 10 minutes! LOL! 

    the reception was crazy! all the guests were dressed as pirates...

    pirate nina and xero

    this year's halloween was a bit different. our friends opie and jessie had a pirate themed wedding! so deciding was to be this time around was pretty obvious. they had the ceremony and the reception at the same hall in pittsburgh, but since we were late as usual, we missed the first part. but they didn't seem to mind, since the actual wedding part took about 10 minutes! ++LOL! 

    the reception was crazy! all the guests were dressed as pirates, i mean EVERYONE! at one point i saw this 80 year old main in a tux with an eye patch. i leaned over to nina and said...

    ARRG! yew think that be his costume? or he be a vietnam vet?

    capt'n mint beard

    the party was awesome, we saw tons of old friends from the iron city we haven't seen in an while, and met some  new friends as well. they had a tiny cake that they cut with a sword. and the groomsmen forced the drunken best man to walk the plank! 

    check out all the photos here.

    G)O  kH] %%; _knuckle_tatzknuckle tatzfun with fonts and flex

    knuckle tatz

    i have updated the fontvir.us with some new content. now each of the font pages have a flex app that allows you to demo each of my fonts. in addition to that, i have created the knuckle tatz lab. have you ever wondered what a particular slogan or saying might look like as knuckle tattoos? no? oh, well i have, so now you too can pretend to be that cool. 

    click here to check it out.

    knuckle tatz

    i have updated the fontvir.us with some new content. now each of the font pages have a flex app that allows you to demo each of my fonts. in addition to that, i have created the knuckle tatz lab. have you ever wondered what a particular slogan or saying might look like as knuckle tattoos? no? oh, well i have, so now you too can pretend to be that cool. 

    click here to check it out.

    GK+؍\ 5!'cc ^insomnesia_free_fontinsomnesianew free font

    insomnesia font sample

    the child of insomnia and fontlab. a few months ago i was having a rather lengthy battle with insomnia, so to help bide my time, i decided to make a font from scratch. i awoke the next morning on the couch with a discharged laptop, and forgot all about my fontography exploits. a month later i was looking in my font dev folder and found this. so i spent this weekend kerning, resizing letters, and making special characters to complete the font. the font contains a full set of A-Z capz only, digits, and most special characters. 

    click here to download

    insomnesia font sample

    the child of insomnia and fontlab. a few months ago i was having a rather lengthy battle with insomnia, so to help bide my time, i decided to make a font from scratch. i awoke the next morning on the couch with a discharged laptop, and forgot all about my fontography exploits. a month later i was looking in my font dev folder and found this. so i spent this weekend kerning, resizing letters, and making special characters to complete the font. the font contains a full set of A-Z capz only, digits, and most special characters. 

    click here to download

    G. ~^ -/;!c `papervision3d_v2papervision3D 2.0code name - great white

    papervision3D  2.0

    well the time is finally upon us, for all of you who aren't avid mailing list readers, papervsion3D 2.0 alpha (code name: great white) has been released for testing. and the team bringing real-time 3D in flash has gone all out this release! this versions new features boast shaded materials, custom shaders, the new ascollada (now with animation support), frustrum culling, multiple viewports, rendering to scene, and more...

    papervision3D 2.0 - great white

    well the time is finally upon us, for all of you who aren't avid mailing list readers, papervsion3D 2.0 alpha (code name: great white) has been released for testing. and the team bringing real-time 3D in flash has gone all out this release! this versions new features boast shaded materials, custom shaders, the new ascollada (now with animation support), frustrum culling, multiple viewports, rendering to scene, and more.. not to mention the average 26% gain in overall fps! 

    this weekend my wife nina was out of town, which meant that i had time to sit down and check out some of pv3D 2.0's new features. i made a simple demo of creating a 3D scene in flex using MXML. the demo basically lets you switch between a few different 3D models, (the first two are by mr.doob and the rest are by me) and the material drawn on it. this demo features the new flat shaded, cell shaded, gouraud shaded, and phong shaded materials at your disposal in the new version. as usual models exported from 3D studio max to actionscript 3 with the help of the awesome as3 geom class exporter

    click here to check out the demo
    and click here to view the source

    G] EE?` UY9Kk bpapervision3d_face_level_interactionpapervision3D - face level interactioninteractive 3D objects

    papervision3D - face level interaction

    the new pv3d 2.0 release features an entirely new way of dispatching and handling events. earlier versions of the engine utilized two different flavors of materials, regular and ޖn_ A_G!s apv3d_dynamic_lighting_demopapervision3D 2.0 - dynamic lighting demolet there be dynamic shaders!

    working with the new pv3d 2.0 release, there are a lot of new features to learn. one of the most powerful being the new pointlight3D class. using this will allow you to create all kinds of cool shading effects. at first i was having some trouble deciding where the light is positioned by default. i tried setting the light’s visibility flag to true, but it still wasn’t rendering. after a bit of digging i discovered that the position of the light by default it set to (x:0, y:0, z:-1000), no wonder it wasn’t rendering, it was in the same position as the camera! 

    so i decided to make a little flex demo for the new pointlight3D class. the flex form allows you to use sliders to move the x, y, and z position of the light, as well a an orbit function.

    working with the new pv3d 2.0 release, there are a lot of new features to learn. one of the most powerful being the new pointlight3D class. using this will allow you to create all kinds of cool shading effects. at first i was having some trouble deciding where the light is positioned by default. i tried setting the light’s visibility flag to true, but it still wasn’t rendering. after a bit of digging i discovered that the position of the light by default it set to (x:0, y:0, z:-1000), no wonder it wasn’t rendering, it was in the same position as the camera! 

    so i decided to make a little flex demo for the new pointlight3D class. the flex form allows you to use sliders to move the x, y, and z position of the light, as well a an orbiting function. you can set the orbit to horizontal or vertical spin, as well as setting the radius and speed the light will orbit. 

    just a little note on the light’s visibility:
    by default, your light object will not be visible (though the light casted from the object will be). to make your light visible you need to do two things:

    first, when creating your light you need to set the showLight flag to true. second, you add your light to your scene3D (normally you don’t add the light to the scene, you just create it and use it later)

    thelight = new PointLight3D(true);
    scene.addChild(thelight);

    check out the demo here
    then view the source code

    Gihinteractive. with this new release, you just have materials with a boolean interactive property.

    with this simple demo, im trying to learn more about the new interactive scene events. first, you create a 3D scene, and set it's interactive flag to true:

    view = new Viewport3D(width, height, scaleToStage, interactive);

    then create a material and set it's interactive property to true:

    papervision3D - face level interaction

    the new pv3d 2.0 release features an entirely new way of dispatching and handling events. earlier versions of the engine utilized two different flavors of materials, regular and interactive. with this new release, you just have materials with a boolean interactive property.

    with this simple demo, im trying to learn more about the new interactive scene events. first, you create a 3D scene, and set it's interactive flag to true:

    view = new Viewport3D(width, height, scaleToStage, interactive);

    then create a material and set it's interactive property to true:

    skin = new CompositeMaterial();
    skin.interactive = true;

    this can also be done through the object as opposed to the material:

    terrain = new Plane(...);
    terrain.material.interactive = true;

    after that you attach listeners to your object. in this case, we're going to use the interactiveScene3DEvent.

    terrian.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, extrude);

    here's a list of the available interactive scene3d events:

    OBJECT_CLICK
    OBJECT_OVER
    OBJECT_OUT
    OBJECT_MOVE
    OBJECT_PRESS
    OBJECT_RELEASE
    OBJECT_RELEASE_OUTSIDE
    OBJECT_ADDED

    from these events its possible to receive a multitude of information. the 4 main ones are the instance properties available to you, which are:displyObject3Dface3DrenderHitData, and sprite. in this demo i use face3D to return the current triangle3D that the user is interacting with. 

    when the user moves the mouse over the plane, a highlight function is fired. i look at the current face3D and the last face3D and change their materials. this gives the effect that the triangle you are hovering over is illuminated. 

    but the code gets a bit hacky in the extrude function. this gets fired when the user actually clicks the plane. i receive an event from the interactive scene manager and once again get the current face3D instance. beyond that, i look that the v0 property and increment (or decrement, depending on the user's on click settings) the current face's z amount. notice that the current face is not the only one affected. it's surrounding triangles also rise up and form pyramids on their own. this is a sign is a well programmed engine! 

    as usual, sources are available...
    view the interactive terrain generator
    view its source code here

    Gt EE8a G=SwA cextending_the_pv3d_basic_viewextending the basic viewmaking papervision3D setup simpler

    the core PV3D team has released a new class called the basicView. the idea here is to create one object that already contains the camera, scene, viewport, and render engine needed to made a 3D scene in flash. 

    after reading the post about it on andy’s blog, you can see that this is a very simple technique. but lets take it one step further. why not create a new actionscipt project that extends basic view?! its very simple, and makes setting up your scene a snap!

    the core PV3D team has released a new class called the basicView. the idea here is to create one object that already contains the camera, scene, viewport, and render engine needed to made a 3D scene in flash. 

    after reading the post about it on andy’s blog, you can see that this is a very simple technique. but lets take it one step further. why not create a new actionscipt project that extends basic view?! its very simple, and makes setting up your scene a snap!

    package {
    	import com.fontvirus.*;
    	
    	import flash.display.*;
    	import flash.events.Event;
    	
    	import org.papervision3d.cameras.*;
    	import org.papervision3d.core.render.data.RenderStatistics;
    	import org.papervision3d.lights.*;
    	import org.papervision3d.materials.shadematerials.*;
    	import org.papervision3d.objects.primitives.*;
    	import org.papervision3d.scenes.*;
    	import org.papervision3d.view.*;
       [SWF(backgroundColor="#000000")]
    	
    	public class basicPV3D extends BasicView
    	{
    		private var thelight    :PointLight3D;
    		private var thing       :Sphere;
    		private var fps         :FlashFPS;
    		private var stats       :RenderStatistics;
    		public function basicPV3D():void
    		{
    			super(0,0,true,true,Camera3D.TYPE);
    			stats = this.renderer.renderScene(this.scene, this.camera, this.viewport);
    			this.viewport.autoClipping = false;
    			init3D();
    		}
    		private function init3D():void
    		{
    			stage.align = StageAlign.TOP_LEFT;
    			stage.scaleMode = StageScaleMode.NO_SCALE;
    			fps = new FlashFPS(0x006600, 0x000000, 0xffffff, 0, "kb");
    			addChild(fps);
    			thelight = new PointLight3D();
    			scene = new Scene3D();
    			thing = new Sphere(new PhongMaterial(thelight, 0x00FF00, 0x000000, 4), 500, 10, 14);
    			scene.addChild(thing);
    			startRendering();	
    		}
    		override protected function onRenderTick(event:Event=null):void
    		{
    			fps.update("rendered: " + stats.shadedTriangles + " polys");
    			thing.rotationY++;
    			super.onRenderTick(event);
    		}
    	}
    }
    

    this demo is so basic i decided not to post a swf...
    but this can be run using flex builder 3 or flash cs3 and the papervision3D - 2.0 great white sources.

    Gr local variable, you will automatically create a scene3D, camera3D, viewport3D, and a basicRenderEngine, all the core components of any PV3D application! 

    after my last post about creating an actionscript project that extends the basic view, i got to thinking... my flex canvas3D is getting a bit outdated. these days i just make canvas then add my viewport3D or a basicView to it. so why not create a new UIcomponent that extends basicView? why not indeed...

    introducing my new class, called CanvasView3D! this little flex gem makes setting up papervision3D in an MXML setting simple. by creating the CanvasView3D component, and initializing it to a local variable, you will automatically create a scene3D, camera3D, viewport3D, and a basicRenderEngine, all the core components of any PV3D application! 

    first things first, add a new xml namespace to your flex application
    in this case, its going to be com.fontvirus.* 

    <mx:Application
          xmlns:mx="http://www.adobe.com/2006/mxml" 
          xmlns:xx="com.fontvirus.*"
          layout="absolute"
          applicationComplete="init3D()">
    </mx:Application>

    now that we have a new custom namespace called "xx", we need to make a new CanvasView3D object.

    <xx:CanvasView3D id="paperCanvas" top="0" bottom="0" left="0" right="0"/>

    the top, bottom, left, and right properties dictate the placement and size of the CanvasView3D object. in this case it will be stretched to fit the full screen size. but there are other properties you can set here as well (or in your as3 code), such as:

    <xx:CanvasView3D autoScaleMode="true" interactivity="false" autoClipMode="true" autoCullMode="true"/>

    now that our CanvasView3D is setup and ready in our MXML, we need to instantiate it actionscript code. this step is just as easy as the rest, just declare a new basicView object and set it to your CanvasView3D’s view property.

    var view:BasicView = paperCanvas.view;

    now we have access to all of the bacicView objects just like if we would have created one then added it to a UIcomponent, etc, etc... now you have a choice to setup new variables for each of your objects or just use them through the basicView.

    var cam:Camera3D = paperCanvas.view.camera;
    cam.zoom = 10;
    cam.focus = 2;
    var scene:Scene3D = paperCanvas.view.scene;
    scene.addChild(new DisplyObject3D());
    var viewport:ViewPort3D = paperCanvas.view.viewport.
    var num = viewport.lastRenderList.length;
    var renderer:BasicRenderEngine = paperCanvas.view.renderer;
    render.renderScene(cam, scene, view);

    OR

    view.camera.zoom = 10;
    view.camera.focus = 2;
    view.scene.addChild(new DisplyObject3D());
    var num = view.viewport.lastRenderList.length;
    view.renderer.renderScene(view.camera, view.scene, view.viewport);
    

    personally i think the second coding style is much more concise and simplistic. but that's just one thing that is so great about object oriented languages, there's 10000 ways to do the same thing. its all about circumstance, and necessity.

    i hope this is useful to some one.

    download the CanvasView3D class
    here's a simple little demo
    and some code to get you started

    G<  "b U%Y dcanvasview3d_new_pv3d_flex_componentCanvasView3Dmy native papervision3D flex component

    after my last post about creating an actionscript project that extends the basic view, i got to thinking... my flex canvas3D is getting a bit outdated. these days i just make canvas then add my viewport3D or a basicView to it. so why not create a new UIcomponent that extends basicView? why not indeed...

    introducing my new class, called CanvasView3D! this little flex gem makes setting up papervision3D in an MXML setting simple. by creating the CanvasView3D component, and initializing it to a )c ?51sY e3d_flash_lorenz_attractorthe lorenz attractorwith papervision3D

    papervision3D lorenz attractor

    we were discussing recursive algorithms and chaos theory at work yesterday. when one of the chemistry professors brought up the lorenz attractor. he was trying to draw one on the white board for about 10 minutes until i decided it would be easier to draw in flash, lol!

    after a quick conversation w/ andy zupko about the new Line3D object, and my new CanvasView3D component for papervision, i made a sweet lorenz attractor! 

    the algorithm is super simple:

    x1 = x0 + h * a * (y0 - x0);
    y1 = y0 + h * (x0 * (b - z0) - y0);
    z1 = z0 + h * (x0 * y0 - c * z0); 

    papervision3D lorenz attractor

    we were discussing recursive algorithms and chaos theory at work yesterday. when one of the chemistry professors brought up the lorenz attractor. he was trying to draw one on the white board for about 10 minutes until i decided it would be easier to draw in flash, lol!

    after a quick conversation w/ andy zupko about the new Line3D object, and my new CanvasView3D component for papervision, i made a sweet lorenz attractor! 

    the algorithm is super simple:

    x1 = x0 + h * a * (y0 - x0);
    y1 = y0 + h * (x0 * (b - z0) - y0);
    z1 = z0 + h * (x0 * y0 - c * z0); 

    A, B, and C are variables that get their values from form components in the application, while H is a constant that represent the angles of the curves dictated by segment size. x0, y0, and z0 are the origin vertex’s while x1, y1, and z1 are the destination points.

    besides the form objects for the A, B, and C values, the application features an event driven camera, that follows the drawing as it happens. as well as a hover camera, which lets your rotate the object in 3D. the actual lines that are being drawn are given a new material each render. that's how the color tweening effect is achieved. use the color picker box to select a valid color to start with. also, the algor run 3000 times, (getting slower and slower as it loops) press the generate button to erase the lorenz you already have a begin drawing a new one w/ the form values you have selected.

    a little background on the lorenz...
    the lorenz attractor is a 3D structure corresponding to the long-term behavior of chaotic flow. the visual “map” represents the evolution of a dynamic system, that complexifys and into a unique non-repetitious pattern. originally discovered by edward lorenz in 1963, the current algorithm is based on simplified version of his equations of convection rolls arising in the atmosphere. for detailed technical info check out math world and this article by dominic van berkel.

    click here to check out the demo
    then browse the source code

    G0 rrUe SW-m gtracing_3d_objects_with_papervisiontracing 3D objects with papervision3Ddrawing the logo

    draw logo

    a question popped up on the papervision3D mailing list the other day about using the lines3D class to trace a 3D object. i found the idea fascinating, so i whipped up this little demo to demonstrate how simple it actually was. i started out by creating a simple cylinder with a wide base and small top, and setting its visibility to false. then creating my lines3D object. finally in the render loop i create a new line3D that connects each vertice. by checking to see in a counter variable is less than the total object vertice count ((box.geometry.vertices.length)), and adding a new line3D if the counter is less than that, or deleting all the lines and starting over...

    draw logo

    a question popped up on the papervision3D mailing list the other day about using the lines3D class to trace a 3D object. i found the idea fascinating, so i whipped up this little demo to demonstrate how simple it actually was. i started out by creating a simple cylinder with a wide base and small top, and setting its visibility to false. then creating my lines3D object. finally in the render loop i create a new line3D that connects each vertice. by checking to see in a counter variable is less than the total object vertice count ((box.geometry.vertices.length)), and adding a new line3D if the counter is less than that, or deleting all the lines and starting over.

    check out that demo here

    my pal nonfinite has finally released his long-awaited album entitled northbridge. listening brings you right back to your childhood (or your whole life in my case :P) sitting in front of the tv wasting the hours away playing video games an enjoying their repetitious bleep-bloop style beats. and nonfinite has his sounds on point! by using a homebrew gameboy cart called LSDJ he produces his new music on old hardware, giving him that pure old skool "chip tune" sound. grab your copy of the album here, FREE! nonfinite also does custom gameboy mods, check out his store 

    nonfinie's southbridge

    my pal nonfinite has finally released his long-awaited album entitled northbridge. listening brings you right back to your childhood (or your whole life in my case :P) sitting in front of the tv wasting the hours away playing video games an enjoying their repetitious bleep-bloop style beats. and nonfinite has his sounds on point! by using a homebrew gameboy cart called LSDJ he produces his new music on old hardware, giving him that pure old skool "chip tune" sound. grab your copy of the album here, FREE! nonfinite also does custom gameboy mods, check out his store for gameboy mods and LDSJ carts!

    Gݼnu/lineObject/srcview/" target="_blank">view the demo source

    so that wasn't enough.
    i decide that i wanted to trace the actual papervision3D logo. and since i have already made it in a font, it wasn't hard at all. working with the optimized version of the font on my site worked fine, but since there were so few verticies, the script would draw the logo in a matter of seconds. so instead of trying to devise a method of tweening from vertice to vertice i just went into font lab and added more points! 

    (the font used in this demo is available here)

    pv3d logo font

    now, i went into 3D studio max, clicked the "splines" button, and created a new text object. i used the new PV3D.Flex.Font i just made, set the size to 100 (larger/smaller is fine) and typed in the letter "A" (the only character in the font).

    3D text object

    after that i used the rotation tools to stand the letter upright, and moved it forward some. the next step is to do a mesh select, by clicking the modifiers tab and selecting "mesh select" from the dropdown menu. then in the mesh select parameters panel select vertices. now click back into your main perspective and select all the vertices (ctrl+a).

    mesh select

    the next step is an important one ((and the one i always forget)) we need to give our 3D object a uvw mapping. still under the modifiers tab, select "UVW Mapping" from the dropdown list. and under the parameters panel make sure its mapping mode is set to "Planar". i was having all kinds of trouble exporting 3D objects that were based on points only. seraf explained to me that w/o a uvw mapping on your object the as3geomClassExporter cant map the u and v points onto the triangle mesh, which are needed for texturing purposes.

    UVW wrap

    now its time to export our 3D logo, click on the tools tab and select max script, then run the as3geomClassExporter. set your package folder and the actual class name, then select papervision3D 2.0 from the dropdown list. for this particular object i left the scale set to 1. then click export class and save it in the same folder as you set in your package. 

    export

    then its onto flex.
    i decided i wanted to use the math-based color fade from my last demo again, so i couldn't use the standard color picker. this demo uses 2 states, normal and the color picker. which is just a 2nd state with a panel object w/ blank flex buttons on them. using the flex buttons worked out well because i was able to just set the color gradient to the same colors in the fade, or just solid ones for the normal sets. i tried to make is one a simple as possible so you can understand the core concepts of what's going on more than the over-all "flashy-ness" of the thing. so enjoy!

    click here to view the demo
    and its source of course!

    G.  j jf SS933 hanother_as3_range_seeded_randomizeranother as3 range seeded randomizerrandom number in flash

    just another take on a classic piece of code. the pseudo-random number generator. this one is almost the same, just a slightly diffrent algorithm.

    private function randomizer(low:Number, high:Number):Number {
    	var num:Number = high-low;
    	return (Math.random()*num)+low;
    }

    then use it...

    var x:Number = randomizer(5, 50);

    i <3 randomization

    just another take on a classic piece of code. the pseudo-random number generator. this one is almost the same, just a slightly diffrent algorithm.

    private function randomizer(low:Number, high:Number):Number {
    	var num:Number = high-low;
    	return (Math.random()*num)+low;
    }

    then use it...

    var x:Number = randomizer(5, 50);

    i <3 randomization

    Gnte"> <mx:Style> Application { backgroundColor: #000000; backgroundGradientColors: #666666, #cccccc; themeColor: #00ff00; color: #ffffff; } Panel { borderStyle: solid; borderColor: #cccccc; roundedBottomCorners: true; cornerRadius: 0; headerHeight: 18; backgroundColor: #666666; titleStyleName: "panelTitle"; } .panelTitle { letterSpacing: 3; color: #ffffff; textAlign: center; fontFamily: Verdana; fontSize: 12; } TextInput { borderStyle: solid; borderColor: #ffffff; borderThickness: 1; cornerRadius: 0; backgroundColor: #333333; color: #ffffff; textAlign: center; fontFamily: Verdana; fontSize: 12; } Button { cornerRadius: 0; fillColors: #333333, #999999, #ffffff, #333333; color: #ffffff; textRollOverColor: #ffffff; textSelectedColor: #ffffff; borderColor: #333333; } .anotherButton { cornerRadius: 0; fillColors: #ffffff, #666666, #333333, #999999; color: #ffffff; textRollOverColor: #ffffff; textSelectedColor: #ffffff; borderColor: #333333; } </mx:Style> <mx:Panel styleName="" width="244" height="134" layout="absolute" horizontalCenter="-1" verticalCenter="9" title="here's a panel"> <mx:Label x="0" y="10" text="Label"/> <mx:TextInput x="0" y="27" width="220" text="text input"/> <mx:Button x="0" y="57" label="Button"/> <mx:Button styleName="anotherButton" x="78" y="57" label="Button"/> <mx:Button x="155" y="57" label="Button"/> </mx:Panel> </mx:Application>

    skinning is the technique of images and/or movieclips to create a visual style for a flex component. being that adobe makes a dozen different applications, there are in fact a dozen different ways to create flex skins. here's a really nice article over viewing the different ways to skin flex 
    and here's another great article

    today in going to discuss creating skins in flash. adobe makes it really easy for us by providing a set of pre-made flex skin templates. go a head and download them from here:

    Your looking for the "Flex Skin Design Extension for Flash"
    the files
    the documentation
    (*note* you will need an adobe ID -- they are free btw...)

    there are also a set of component classes for creating completely custom, skinnable flex compatible components called "the flex component kit for flash cs3". but im not gonna dive into all that just yet... ;D

    now that you have download the "flex3skins-flash.mxp" file, you need to register it with the adobe extension manager. (this should be installed already if you have any cs3 product, but if not grab a copy here) just double click on the file, or open the extension manager and click "File... Install Extension"

    extension manager

    after agreeing to the disclaimer, you should see an alert box telling you that your templates have been successfully installed. now we're ready to make some flex skins!

    open flash cs3.
    select "File... New", then click the "templates" tab on the top left. change the category to "Flex Skins", and now you can see a list of all the available flex component templates. now just to let you know, there is not a template for EVERY available flex component, but the vast majority. 

    fle����x templates

    so go ahead and select the "button" template. when the flash file loads take a look at the library, you'll notice there's a movieclip called "button_skin". open it up and take a look at what's there. 

    skinning on flash

    in the timeline, in the "states" layer, we have four separate keyframes, up, over, down, and disabled. these keyframes are the four main visual styles for the flex button component. now, take a look at the gridline down in the main design area. these lines are called a scale9grid (more info about that here) they show flex the areas that are allowed to scale, the default size, and the main area where the label is going to be placed. make a new layer in the timeline above "art" and add blank key frames that match the layer below. now add some images for each of the button states. then use the cursor tool to move the scale9grid lines to match up for your skin.

    skinned button

    once you have all the images ready to go right click on the "button_skin" object in the library and click "linkage". this brings up the actionscript3 properties for that particular movieclip. give your visual style a name I used "blaqueButtonSkin". now take a look at the base class for this object. it need to be set to "mx.flash.UIMovieClip". the user interface movieclip class is setup to look for the names of the keyframes to decide which images to use for the different states of your skinned components. so make sure you keep the frame names set to "up, over, down, and disabled" or flex will not be able to parse your skin!

    flash object linkage

    he last step in flash is to generate our skin library for flex. click "File... Publish Setting" (or ctrl+shift+f12) make sure your swf setting are set to actionscipt3, and the "Export .SWC" checkbox is checked. then publish your skin. take a look in the directory that flash published to. there should be a few files in there, but were only going to be concerned with the SWC file. copy that file to the clip board and open flex 3.

    in flex start by creating a new MXML application. then right click on the /libs/ folder and paste in our skin.swc file. everything in the lib (or library) folder is automatically added into flex's available namespaces to be used in your application. switch into the source code tab and add a style tag to your application. then add the following css...

    Button {
      skin: Embed(skinClass="blaqueButtonSkin");
      color: #ffffff;
      textRollOverColor: #ffffff;
      textSelectedColor: #ffffff;
      textAlign: left;
    }

    notice how the skin is applied to the button with the "skin" tag and we're using the linkage name we set in flash, blaqueButtonSkin. also by using the embed keyword in conjunction with the skinClass tag will attach your visual style completely, even during design time. 

    one thing to note is that some of the components are based on other ones. the for instance, its template file only contains the up and down arrows. the textbox that the actual selected number appears in is based on the regular flex component. so to skin both parts you will need to make a skin for the numericstepper as well as the textarea. but you can save both of those files into one swc by just copying and pasting the library object from one template into the library of another one.

    HH. g //As icustom_flex_skinscustom flex skinscustomize your components

    skinned flex app

    creating web-applications with flex 3 is great. there are a ton of pre-made components, and an open-ended architecture to allow you to create your own. built into flex is also a variety of options to change the visual styles of the components. today i will talk about two different types of customization. first, the simplest method, is using css to style your components. next, the more advanced technique, is creating component skins. for this example i will be using flash cs3.

    with in a flex mxml application, css is natively understood. so by utilizing the tags, we can create a variety of styles for an application. personally, i don't really care for the eclipse/flex built in css editor, but since flex uses valid css, any editor can work!

    skinned flex app

    creating web-applications with flex 3 is great. there are a ton of pre-made components, and an open-ended architecture to allow you to create your own. built into flex is also a variety of options to change the visual styles of the components. today i will talk about two different types of customization. first, the simplest method, is using css to style your components. next, the more advanced technique, is creating component skins. for this example i will be using flash cs3.

    with in a flex mxml application, css is natively understood. so by utilizing the tags, we can create a variety of styles for an application. personally, i don't really care for the eclipse/flex built in css editor, but since flex uses valid css, any editor can work! macromedia has also created a very useful tool for helping designers/developers write flex 3 specific css. click here to view the flex 3 style explorer

    now for some code...
    like in all css there are two ways to define a style.
    first as an overall style for one type of object, for instance...

    Button {
       cornerRadius: 0;
       fillColors: #333333, #cccccc, #cccccc, #666666;
       color: #ffffff;
       borderColor: #ffffff;
    }

    this style will be applied to all buttons that appear in your application. notice the style name is simply "Button", the name of the component type. this is how flex understands which objects to apply the style to.

    .anotherButton {
       cornerRadius: 0;
       fillColors: #ffffff, #333333, #333333, #666666;
       color: #ffffff;
       borderColor: #000000;
    }

    now, this code by default will not be applied to any components in your application. notice the style name is time is ".anotherButton", the period that prefaces the style name indicates that this is a custom style, not a component style definition. to apply this style to a button in your application use the following code...

    <mx:Button styleName="anotherButton"/>

    so with that in mind, here's a very simple flex 3 application using css styles.

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolu
    Sh[AAK	jpoultrygeist_a_night_with_lloyd_kaufmanpoultrygeist at the warhola night with lloyd kaufman

    lloyd kaufman with nina and xero

    to kick off the pittsburgh zombie film festival, lloyd kaufman and the troma crew, made the venture down to the iron city to premiere their new film poultrygeist at the andy warhol museum. my buddy smitty and his girlfriend amanda decided that they would accompany nina and i. we didn't want to miss the show...

    lloyd kaufman with nina and xero

    to kick off the pittsburgh zombie film festival, lloyd kaufman and the troma crew, made the venture down to the iron city to premiere their new film poultrygeist at the andy warhol museum. my buddy smitty and his girlfriend amanda decided that they would accompany nina and i. we didn't want to miss the show, so i preordered our tickets on the internetz. ok, so the other reason i preordered the tix was because i love just walking into a venue, and saying "im on the guest list..." ++lol. anyway, so the cats that run the warhol's website posted the time wrong :P we misses the first hour of the movie. but for anyone who has ever seen a troma film, we just missed one horrifically bloody death scene. after the movie, we got to listen to lloyd talk about the state of troma, and whats in the works for 2009. after that he just hung out in the hallway and signed autographs, took photos, chatted up the horde, and hit on all the ladies. man, mr. tromavision was a mach and a half! he almost got nina and amanda to make out! ok, im exaggerating... after getting these flix, we just walked around the warhol for a few hours. then met up with my main man mccarthy, and hit the bar. it was a blast!

    Hۄon the plane ride there and back with 98% completion. we had a party thrown for our arrival, at my cousin ashley's house. i got to see all my relatives and meet my cousin's new baby angelina. she's a lil cutie. for the next few days we just hung out and went to beaches.

    its not a vacation unless there's a beach right?

    xero

    we spent one of the days in a town called jupiter. the beach was very nice, the sand smooth, the water warm. and my uncle knew about this cool lighthouse. there was a sweet banyan tree outside. the lighthouse was 7 stories and had a sweet spiral staircase.

    jupiter lighthouse

    jupiter lighthouse - spiral staircase

    jupiter lighthouse - hang over

    we saw some crazy stuff at the bass museum. weird stuff... after a few nights of sleeping at my cousin's house on an air mattress, we decided to spend our final night at a hotel. we stayed at a place in miami called the blue moon. it had this old 50's but still in good shape feel, but with a touch of modernism. the carpet was awesome. Good times were had by all.

    more photos

    bass museum

    cool painting

    CSI miami xero

    H( ;;j 5E lnyc_tripNYCphotos from our trip

    NYC cityscape

    i was just on vacation in NYC. the crew was myself, nina, and our friend nik. nina wanted to check out fordum university, and visit our friend john who lives in yonkers. not to mention that she had never been to the big apple before. we spent four days in the city, spending 75% of our time in museums, 15% in restaurants, and the remaining 10% walking/riding public transport. but when the sun went down we had a shofar. john (aka jaze juce) is a native new yorker, who nina met at school. jaze is a rapper, a life guard, and all around man about town. we saw a lot of the city from in the car at night, which was awesome.

    NYC cityscape

    i was just on vacation in NYC. the crew was myself, nina, and our friend nik. nina wanted to check out fordum university, and visit our friend john who lives in yonkers. not to mention that she had never been to the big apple before. we spent four days in the city, spending 75% of our time in museums, 15% in restaurants, and the remaining 10% walking/riding public transport. but when the sun went down we had a shofar. john (aka jaze juce) is a native new yorker, who nina met at school. jaze is a rapper, a life guard, and all around man about town. we saw a lot of the city from in the car at nigi 11'yE kwe_went_to_floridawe went to floridamini-vacation

    jupiter lighthouse

    my grandparents moved to flordia a few years ago, and ever since, the rest of my family have slowly been moving there. my uncle mark lived there already, then my aunt joan moved there shortly after. then my cousin, then her mom... yeah, almost that entire side of the fam. so needless to say, we were due for a visit. my dad is dr. paranoia, and couldn't fly down there. and i in no way wanted to ride with him, my mother, nina and his road rage. nor did i want to drive there myself with nina and my road rage. so we opted to hop with the jet set. the flight was so short i barely beat metroid fusion on the plane ride there and back with 98% completion.

    jupiter lighthouse

    my grandparents moved to flordia a few years ago, and ever since, the rest of my family have slowly been moving there. my uncle mark lived there already, then my aunt joan moved there shortly after. then my cousin, then her mom... yeah, almost that entire side of the fam. so needless to say, we were due for a visit. my dad is dr. paranoia, and couldn't fly down there. and i in no way wanted to ride with him, my mother, nina and his road rage. nor did i want to drive there myself with nina and my road rage. so we opted to hop with the jet set. the flight was so short i barely beat metroid fusion ht, which was awesome.

    NYC urban vs rural

    NYC manhattan skyline

    NYC up the fire escape

    day one we went to the guggenheim museum, they were camera-nazis so no photos from there. I don't know if we were there on an "off day" or something, but I honestly wasn't that impressed. But the building architecture was cool, like a parking garage meets modern adobe. on the way there we stopped in front of a random office building to buy fruit from a street vendor and found these giant hello kitty metal sculptures!!!!

    NYC metal hello kitty

    NYC metal hello kitty

    day two we went to the museum of modern art (MOMA) which was amazing! the place was 5 stories high, and was filled wall to wall with art! there was a lot of stuff i wasn't allowed to photograph, like the entire floor of picasso paintings/sculptures, or the HUGE salvador dali exhibit featured on the top floor! they had 250 of his paintings, tons of props, backdrops and other stuff from his films. and they were playing ALL the movies he made, including a DISNEY FILM he animated! 

    NYC MOMA

    NYC MOMA

    NYC MOMA

    NYC MOMA

    NYC MOMA

    after that we went to a museum of modern architecture and design. you’re really not supposed to take any photos there, but there were a few i just couldn't resist!

    NYC museum of modern architecture and design

    NYC museum of modern architecture and design

    NYC museum of modern architecture and design

    he last museum that we went to was the museum of natural history. which was really cool, but very busy. a lot of my photos from here didn't turn out as i hoped, so here's a few of the good ones.

    NYC museum of natural history

    NYC museum of natural history

    NYC museum of natural history

    NYC museum of natural history

    NYC museum of natural history

    and they had a REDICULOUS amount of dinosaur bones!

    NYC museum of natural history

    NYC museum of natural history

    NYC museum of natural history

    so, they don't let you inside the statue of liberty anymore. so what's the point of going to that tiny super crowed island just to try and look up lady libery's dress. so instead, john suggested we go to liberty park in new jersey to check out the statue. 

    lady liberty is just like any new yorker, she hates jersey!
    just look at the statue, she's farting on us!

    jaze juce

    NYC statue of liberty

    NYC manhatten

    NYC the crue

    as aforementioned, we saved a lot of money by walking places. at one point we took a shortcut through central park, and i took these photos along the way.

    NYC central park

    NYC central park

    NYC central park

    there was also a tornado while we were there. luckily we were in jersey when it hit manhattan, so we were ok. but we did get stuck in some "classic" NYC traffic.

    NYC traffic

    right after i took this photo the traffic started to move again. john was freestyling to the beat about bustin' a nut like a glock shot, then there was an random gunshot sampled into the beat. we all laughed, then there was a huge *BANG!* a few seconds later we had a flat tire (on route 89, a really busy road). john states that we're screwed because he doesn’t think he has a doughnut. i was like,

    this is a honda dude.
    are yew sure there’s not one in the secret compartment?

    xero

    and he was like,

    uhh... what secret compartment?

    jaze juce

    ... *sigh* we took all the crap out of his trunk in the pouring rain, pulled up the carpet on the floor of the trunk, and revealed not a doughnut, but a new spare tire. the tire jack was different from the one i had in my honda all those years ago, so we had some trouble with that. nik sarcastically asked me...

    xero, how come you can build and program computers
    but can’t figure out how to use a new tire jack?

    nik

    eventually we figured it out. and we got the old tire off and the new one on in just a few minutes. we had an awesome time. john was an great host. we saw some sweet shit. and i think nik and i got double our yearly exercise on the trip ++LOL!

    HL l 9'9}% npapervision3d_pq_torusPQ torus knotpapervision3D math art

    papervision3D PQ torus knot

    here we go again, another papervision3D demo featuring math permeated lines. this time im working with a classic piece of code known as the PQ torus. the vague idea is that you have 2 hk a!9=w mwavebubble_diy_portable_portable_rf_jammerwavebubbleDIY portable RF jammer

    NYC cityscape

    i just got clued in on a new project from one of the members of the cDc (cult of the dead cow), a notorious hacker group from way back in the l0pht days. the wave bubble is a self-tuning, wide-bandwidth portable RF jammer. an internal lithium-ion battery provides up to 2 hours of jamming (two bands, such as cell) or 4 hours (single band, such as cordless phone, GPS, WiFi, bluetooth, etc). the battery is rechargeable via a mini-USB connector or 4mm DC jack (a common size). alternately, 3 AAA batteries may also be used. self-tuning is provided via dual PLL, therefore, no spectrum analyzer is necessary to build this jammer and a single wave bubble can jam many different frequency bands...

    NYC cityscape

    i just got clued in on a new project from one of the members of the cDc (cult of the dead cow), a notorious hacker group from way back in the l0pht days. the wave bubble is a self-tuning, wide-bandwidth portable RF jammer. an internal lithium-ion battery provides up to 2 hours of jamming (two bands, such as cell) or 4 hours (single band, such as cordless phone, GPS, WiFi, bluetooth, etc). the battery is rechargeable via a mini-USB connector or 4mm DC jack (a common size). alternately, 3 AAA batteries may also be used. self-tuning is provided via dual PLL, therefore, no spectrum analyzer is necessary to build this jammer and a single wave bubble can jam many different frequency bands - unlike any other design currently available! to reconfigure the RF bands, simply plug it into the USB port of your computer and type in the new frequencies when prompted. multiple frequency ranges can be programmed in, each time the device is power cycled it will advance to the next program in memory.

    its capable of jamming a few different frequencies:

    cellular bands:

    • GSM/PCS broadband 1900 downlink – (us standard)
    • GSM 850 downlink – (us rural areas)
      GSM 900 downlink – (original and most common in Europe)
    • GSM 1800 downlink – (gaining popularity in Europe)

    other Bands:

    • cordless phones – (900-930 mhz frequency)
      blue tooth – (2400-2483 mhz frequency)
    • 802.11b/g wifi - (2400-2483 mhz frequency)
      zigbee – 868 (Europe) 915 (usa) & 2400-2483 mhz
    • GPS – 1575.42 (civilian) and 1227.6 (military)

    WOW!
    this thing can block just about anything you can come up with!
    for more info, including circuit diagrams, schematics, building instructions, parts lists, and firmware available from the inventers website http://www.ladyada.net/make/wavebubble

    Hʱnumbers (P + Q) that are used in the algorithm to define the knot. in general, given P + Q mutually prime, the line wraps meridionally around the torus P times and wraps the longitudinally around it Q times. i was having some trouble grasping exactly how this was going to be achieved, until i read this article on blackpawn’s website. he really breaks down the algo to a very simplistic level...

    papervision3D PQ torus knot

    here we go again, another papervision3D demo featuring math permeated lines. this time im working with a classic piece of code known as the PQ torus. the vague idea is that you have 2 numbers (P + Q) that are used in the algorithm to define the knot. in general, given P + Q mutually prime, the line wraps meridionally around the torus P times and wraps the longitudinally around it Q times. i was having some trouble grasping exactly how this was going to be achieved, until i read this article on blackpawn’s website. he really breaks down the algo to a very simplistic level...

    calculus

    r = .5 * (2 + sin(Q * Φ))
    x = r * cos(P * Φ)
    y = r * cos(Q * Φ)
    z = r * sin(P * Φ)

    simple right? lol.
    so Φ (or phi in my code) is basically a variable that is definded by change. in this case, im simply incrementing phi + .02 every frame. this seeds the math and gives you the cool visual effect.

    anyway, after getting a handle on the math, writing the demo code was a snap. i took the existing code i wrote from the 3D object tracer and the lorenz attractor and combined them. (i also found + fixed an error for computing the line gradient color) i started out by allowing the users to only select values for PQ and that actually made sense.

     

    papervision3D PQ torus knot

    papervision3D PQ torus knot

    but after some experimentation i found that using some unorthodox values for P+Q could net some very interesting results. take a look at some of these...

    papervision3D PQ torus knot

    papervision3D PQ torus knot

    papervision3D PQ torus knot

    papervision3D PQ torus knot

    click here to check out the demo
    and click here to view the source

    HT  w5n 79;gw pinline_sql_statementsinline SQL statements nested queries in MSSQL

    the world of database programming can be a dark and treacherous journey. when you first set out, your quest seems manageable. but as time progresses your start to realize you need more queries, more tables, etc, etc, to achieve your goal. well today i’m going teach you a little trick that might help you need one less stored procedure then you thought...

    sometimes it’s true, you actually do need two queries to get the job done. but other times you can circumvent this by using something like a "join" or "inner join" query to merge two tables together and pull your results from both.

    but the optimizer in you says that still isn’t enough...

    the world of database programming can be a dark and treacherous journey. when you first set out, your quest seems manageable. but as time progresses your start to realize you need more queries, more tables, etc, etc, to achieve your goal. well today i’m going teach you a little trick that might help you need one less stored procedure then you thought...

    sometimes it’s true, you actually do need two queries to get the job done. but other times you can circumvent this by using something like a "join" or "inner join" query to merge two tables together and pull your results from both.

    but the optimizer in you says that still isn’t enough...

    so let’s say you need to first get an automatically generated ID number from a table and you need two parameters to get this data. then you need a subsequent query to update that record.

    historically, i probably would have said that you need to run two separate SQL procedures to achieve this goal. but if i would say that now, i’d be a liar...

    take a look at this:

    CREATE PROCEDURE [dbo].[TESTING-UPDATE]
       (@who            [nvarchar](50),
        @which          [nvarchar](50)) 
     
    AS UPDATE [dbo].[table-name]
    SET someValue = 'new value'
    FROM (
            SELECT TOP 1 (autoid) as nuID 
            FROM [dbo].[table-name]
            WHERE name = @user AND num = @which
            ORDER BY autoid DESC
          ) as tested
    WHERE autoid = tested.nuID
    GO

    as you can see, i’m actually running two queries in one! the traditional FROM [table-name] statement has been replaced by an "inline SQL query". what happens is the database will see the FROM () parenthetical notation, and immediately execute the syntax between them. that statement then returns its result set into a named object (in this case its called "tested"). then the rest of the procedure will execute as normal, but with the additional data we got from our inline query.

    this technique can be extremely powerful! i just learned about it this week and i have already removed 10 now unnecessary SQL queries from the database for a project at work. so keep that one in you SQL lexicon for later ;D

    ILm G=1?7 o3sdm_abstract_render_tutorialabstract render tutorialwith 3D studio max

    this is a "long image" tutorial i did under my alias 0x000000 for igraphixz.com

    3DSM abstract render tutorial teaser

    this is a "long image" tutorial i did under my alias 0x000000 for igraphixz.com

    3DSM abstract render tutorial

    HCtebay for like $2.00, but you can get them other places if you look.

    exposed gameboy guts - gameboy prosound mod

    step one is to remove the screws. like i said before, there are six triwings on the back of the DMG. four are visible, and two are hidden under the batter compartment. make sure you don't loose the screws, or you will have to replace them with regular minis. but philips that small can be difficult to find.

    pull the ribbon cable - gameboy prosound mod

    now you need to disconnect the display cable. BE VERY CAREFUL! the ribbon cable that connects the dot matrix display to the gamboy's motherboard is very thin. the cable has minimal metal on the leads at the end. so if you scrape any of it off by pulling it out too hard or at a strange angle you can expect some dead pixels. just pull it straight down.

    two halves - gameboy prosound mod

    now take a moment to check out the guts of the gameboy. pretty cool. in the image above you can see the 3 points on the board we're going to be soldering two. check out the wiring diagram.

    clean everything - gameboy prosound mod

    the next step is optional. but its normally necessary. clean everything up. all you need is the highest percent alcohol you can get (i use 98%) and some cue-tips. get into those little recessed areas and clean out any dust or grime that may be in there. make sure you do the batter terminals too, especially if they have any corrosion on them. that process may require paper towels and some extra elbow grease.

    disconnect the audio daughterboard - gameboy prosound mod

    to fix the jack into the case you'll need to made a little more room. use a mini-philips head screw-driver to remove the audio daughter board with the headphone jack on it. 

    bend the capacitor leads - gameboy prosound mod

    now take your screw driver an place it between the board and the capacitors. very carefully bend the leads so the capacitors lay flat against the board as opposed to pointing outwards from it.

    reattach the board - gameboy prosound mod

    now screw the board back into place. make sure it still lays flush inside the case. don't force it to fit, just carefully rebend the capacitor leads until it fits correctly. if you accidently break one of the leads from bending them too much you'll have to resolder them.

    position the jack - gameboy prosound mod

    now that we got the space in the case decide where you're going to mount the 1/8" jack. you don't have a lot of room to work with, so get the jack as far on the edge of the case as you can.

    mark drilling point with an awl - gameboy prosound mod

    now use an awl to mark where you are going to drill your hole. press the awl in the center of the jack, about where the cord will be inserted, until you have a visible dent in the plastic.

    awl mark - gameboy prosound mod

    you don't have to actually break the plastic, but make a groove in it. this will help you a lot when drilling. the grove gives the drill or dremel a place to start at so all you need to do is press.

    safety to humans - gameboy prosound mod

    safety to humans! when drilling the hole in the gameboy lots of plastic chips will go flying. so make sure you wear goggles. unless you like hard, hot plastic in your eyes. i also like to wear a mask or a bandanna over my face when soldering. the hot flux and solder emit a nasty smell, and kill brain cells.

    gameboy vice - gameboy prosound mod

    to keep the gameboy steady when dremeling i put it into a table mounted vice. it was a hard decision weather long or short way was the best position. but i decided long way was more stable, and gave me a bit more visibility to see what i was doing. but do what seems best for your situation.

    dremel XLR - gameboy prosound mod

     used the dremel XLR with the sand grit cone bit. you can use a standard hand drill with a stepping bit, but i feel more comfortable with my dremel. use a medium speed and a little bit of force and you will go right through.

    case hole - gameboy prosound mod

    after your first pass you should have a small hole in the case of the DMG. the edges will be rough and uneven. but that's ok for now.

    jack mount - gameboy prosound mod

    now stop the dremel. and unscrew the end of the 1/8" jack. try and fit it into the hole you just made. if it's a little small, turn the dremel on a low setting and go over the edges again, and keep checking until the jack fits tightly in the hole. by going over the edges repeatedly you will also get a nice smooth finish and a tight fit.

    fire up the soldering iron - gameboy prosound mod

    now is a good time to plug in your soldering iron. it will start getting hot while your doing the prep work for the next stage.

    wire stripping - gameboy prosound mod

    get your three wires ready, and strip both ends of each wire. i left one end of the wire a little longer for the jack, and the other end very short for attaching to the board.

    pre-tin the wires - gameboy prosound mod

    after that i suggest you tin the wires. dip you iron in a little flux to clean it off, then get a tiny drop of solder on the ends of each wire. this will make attaching them a lot easier.

    hook the wires - gameboy prosound mod

    now take the longer stripped ends of the wire and wrap them around the end of a flat head mini screw-driver. this will make a little "hook" at the end of the wire (that's why we made them a bit longer). then take the wires and hook one on the end of each of the prongs of the 1/8" jack.

    wire the jack - gameboy prosound mod

    now that the wires are hooked on the jack, take your screw-driver and flatten the hooks so they don't move as much. now just take a tiny dab of solder and attach the wires to the jack.

    protect the solder points - gameboy prosound mod

    to avoid any cross talk that might possibly occur between the wires (however unlikely) wrap them up. either use some heat shrink tubing or some electrical tape around the edges.

    jack installed - gameboy prosound mod

    now mount the jack in the gameboy case. put the end of jack into the hole you drilled from inside the case. then screw the end piece back on from the outside. to optimize space, put the ground wire on the open side so the jack lays flush against the case sidewall.

    tighten the jack - gameboy prosound mod

    now take a pair of pliers and tighten the end of the jack as much as possible. just be careful not to scratch the exterior of the gameboy's case when doing so.

    wire routing - gameboy prosound mod

    the next step is very important. getting the wires ready to solder onto the board. lameboy suggested pushing the wires down into the crevasse under the main board, then pull it over to the three point we're soldering to. make sure that wires are not touching the contrast dial.

    ready to solder - gameboy prosound mod

    after a few tries of routing the wires and test closing the case, i actually made the wires a lot shorter. this made the process of closing the case at the end a lot easier. once you get the wires in the right place tape them down. just remember the old saying, measure twice solder once. i like to double that, just in case.

    wiring schema - gameboy prosound mod

    the wiring is pretty simple. there's 5 solder points that connect the potentiometer to the gameboys board. the top 2 we are going to ignore. they are volume into the pot. the next 2 are the left and right audio out of the pot and finally the ground.

    wiring complete - gameboy prosound mod

    when it comes to solder, less is more. this is true for both heat and actual metal. the amount of solder to use varies from gameboy unit to unit. some have a moderate amount, so you can just heat up whats already there and use your pre-tinned wires. but some have a huge blob there already. in those cases i suggest you remove the existing solder with some desoldering braid then use a tiny amount to connect your wires.

    wiring complete - gameboy prosound mod

    when doing this take your time. make sure you are connecting the correct prongs of the jack to the right pins on the board. the wiring pinout diagram should be on the packaging of the jack, and varies from model to model.

    reconnect the display cable - gameboy prosound mod

    now carefully reconnect the display cable. put your fingers under the edge on the ribbon cable and push it up into place. don't try and rock the cable back and forth to get it into place. this could rub off some of the metal on the leads. the photo is the cable fully inserted. notice how much metal is still showing.

    close the case - gameboy prosound mod

    the final step is closing the case. this can be tricky. take your time. make sure none of the prosound jack's wires are sticking out or stuck between the edges of the case when closing it. also keep the wires clear of the contrast dial. 

    the finished prosound jack - gameboy prosound mod

    now your gameboy is prosound modified! the added 1/8" jack will reduce background noise when recording and actually increase volume and give you added bass because it's a line level output. now pop in your favorite 8bit music application and make some chip tunes! 

    gameboy prosound mod

    I __o 55k= qgameboy_prosound_modgameboy prosound modconsole modification for better sound recording

    nintendo gameboy prosound mod

    today’s mod is for the original nintendo gameboy. if you want to get serious about chip tunes, whether your using lsdj or nanoloop, the sound quality of your instrument is a priority. the stock nintendo gameboy is equipped with a single headphone jack. and if you have ever tried recording anything from that, it sounds pretty bad. thus the prosound modification was invented to add a line out jack to the gameboy.

    nintendo gameboy prosound mod

    today’s mod is for the original nintendo gameboy. if you want to get serious about chip tunes, whether your using lsdj or nanoloop, the sound quality of your instrument is a priority. the stock nintendo gameboy is equipped with a single headphone jack. and if you have ever tried recording anything from that, it sounds pretty bad. thus the prosound modification was invented to add a line out jack to the gameboy. trash80 was first credited with this technique, but i will be using a mix of tutorial's published by both lameboy and animalstyle. this mod adds a new line-level-out jack to the device, while keeping the headphone functionality intact.

    tools - gameboy prosound mod

    things we'll need for the mod:

    • DMG-01 gameboy
    • 1/8" (3.5mm) stereo phone jack
    • soldering iron
    • solder
    • flux
    • thin gauge wire
    • wire stripper
    • jewelers screw driver
    • triwing screw driver
    • awl
    • dremel or drill
    • pliers

    triwing screwdriver - gameboy prosound mod

    the triwing screw-driver is an integral part of this mod. nintendo uses a nonstandard screw on the 6 found on the outside of the case. but all the screws on the inside of the gameboy are a normal mini-philips head. i got my triwing on  7p 33U7 rtk_and_the_penguinsTK and the penguinspittsburgh penguins hockey practice

    pittsburgh penguins #48 tyler kennedy and xero

    so the other day nina, will, and i went to a pittsburgh penguins hockey practice. i got to meet TK! (aka #48 tyler kennedy) i couldn’t believe that he was only a little bit taller than me, but he's carved out of solid rock! GO PENS! this is the last season for mellon arena so it was nice to get to visit the igloo one last time. 

    pittsburgh penguins #48 tyler kennedy and xero

    so the other day nina, will, and i went to a pittsburgh penguins hockey practice. i got to meet TK! (aka #48 tyler kennedy) i couldn’t believe that he was only a little bit taller than me, but he's carved out of solid rock! GO PENS! this is the last season for mellon arena so it was nice to get to visit the igloo one last time. 

    i took a whole bunch of pictures. check 'em out

    pittsburgh penguins igloo - mellon arena

    Icq dq QAOs smetroid_and_ghosts_n_goblins_fontstwo free video game fonts!metroid and ghosts n' goblins

    metroid font - NARPASSWORD00000 - fontvir.us

    i have been wanting to make a metroid font for a long time now.NARPASSWORD00000 is made from the classic nintendo NES game metroid's password screen. the font also includes some dingbatz made from the games sprites. but i decided to go the extra mile and create the rest of the full international character set. the fonts name is a reference to a special backdoor password hidden in the game. click here to download.

    metroid font - NARPASSWORD00000 - fontvir.us

    i have been wanting to make a metroid font for a long time now.NARPASSWORD00000 is made from the classic nintendo NES game metroid's password screen. the font also includes some dingbatz made from the games sprites. but i decided to go the extra mile and create the rest of the full international character set. the fonts name is a reference to a special backdoor password hidden in the game. click here to download

    namco font - ghouls, ghosts and goblins - fontvir.us

    my next new font is a capcom classic. ghouls ghosts and goblins made from sprites ripped directly from the NES rom chip. the game has had many incarnations over the years, like ghosts 'n goblins and ghouls 'n ghosts. so i named the font a combination of the two. this font contains the full set of A-Z, digits, special characters, and some 8bit dingbatz. click here to download.

    Ii xr QE3uQ tvegan_chocolate_chip_cookie_recipevegan chocolate chip cookiesmy delicious recipe

    vegan chocolate chip cookie recipe

    start with a small container of margarine
    (like 7.5oz of promise or smart balance)

    blend in some sugar.
    i use about 1/3 brown sugar, 1/3 white sugar, and 1/2 a cup of confection [powdered] sugar.

    *optional*
    you can also use 1 table spoon of honey and/or agave nectar.

    stir until creamy.

    add 1 tea spoon vanilla and stir.
    add flour.
    (i like to mix 1/2 cup of whole wheat flour and 1+1/2 cup of white flour.)

    *NOTE*
    if you used honey / agave nectar you'll need and extra 1/2 cup of flour.

    add 1 tea spoon of salt.
    add 1 tea spoon of baking soda.
    add 1 tea spoon of baking powder.

    you want the dough to be stiff not sticky. if necessary, add more flour...

    vegan chocolate chip cookie recipe

    start with a small container of margarine
    (like 7.5oz of promise or smart balance)

    blend in some sugar.
    i use about 1/3 brown sugar, 1/3 white sugar, and 1/2 a cup of confection [powdered] sugar.

    *optional*
    you can also use 1 table spoon of honey and/or agave nectar.

    stir until creamy.

    add 1 tea spoon vanilla and stir.
    add flour.
    (i like to mix 1/2 cup of whole wheat flour and 1+1/2 cup of white flour.)

    *NOTE*
    if you used honey / agave nectar you'll need and extra 1/2 cup of flour.

    add 1 tea spoon of salt.
    add 1 tea spoon of baking soda.
    add 1 tea spoon of baking powder.

    you want the dough to be stiff not sticky. if necessary, add more flour.

    then stir in a small bag of semi-sweet chips.
    (i use the dark chocolate minis.)

    shape the dough into walnut sized balls.
    put on a cookie sheet and flatten slightly.
    bake at 350 degrees for 12-14 minutes.

    getting the dough the right consistency is crucial. if your first batch is coming out too thin or flat, you need to add more flour. the dough shouldn't stick to your hands when rolling then into balls. just keep adding a small amount of flour at a time until they don't feel so sticky.

    let cool.
    enjoy!

    I_ 99Ds CCo uchiptune_albums_to_rock_outchiptune albums to rock outreleases by phlogiston, nonfinite, and starscream
    phlogiston - nectar

    nectar by phlogiston - nectar is 2 EPs in one. part one, Croquel Adventure, continues in the chip-tune tradition of short, fun, pure NES songs. while part two, HEAT, transports you to an 80's vision of the distant future. the album is a tour through a vast dystopian cityscape where high-tech low-life roam the streets. and the lines between man and machine have been washed out.

     
     

    phlogiston - nectar
    nectar by phlogiston - nectar is 2 EPs in one. part one, Croquel Adventure, continues in the chip-tune tradition of short, fun, pure NES songs. while part two, HEAT, transports you to an 80's vision of the distant future. the album is a tour through a vast dystopian cityscape where high-tech low-life roam the streets. and the lines between man and machine have been washed out.

     
     

    nonfinite - southbridge
    southbridge by nonfinite - southbridge combines triumphant melodies with though provoking harmony and infection head-rocking beats. like northbridge, each track has a unique feel to it. and will peak your interest to the last bleep! you can listen to the entire album online but it's not free. 25% of all proceeds will benefit "chip-in" a group of 8-bit people trying to help out.

     
     

    starscream - future, and it doesnt work
    future, and it doesn't work by starscream - in the not so distant future awaits the election of the first third party candidate to the white house- they will hail from the space party, a political coalition founded by astrophysicists, former democrats and ex-NASA employees. starscream tells a tale of victory, science, and potentially catastrophic foreign policy.

     
     

    J70lit screens, pretty sweet integrated speakers, the classic nintendo plus d-pad, four front buttons, and two shoulder buttons. the bottom screen is touch sensitive, which makes for some awesome gameplay. the touch screen is sick, but a lot of people can be put off by it. so tons of games let your switch between the touch motion and d-pad motion.

    the nintendo DS

    R4-DS the homebrew revolution

    the nintendo ds is an awesome portable gaming system. i have the ds lite, its thin, weights under a pound, has two super bright backlit screens, pretty sweet integrated speakers, the classic nintendo plus d-pad, four front buttons, and two shoulder buttons. the bottom screen is touch sensitive, which makes for some awesome gameplay. the touch screen is sick, but a lot of people can be put off by it. so tons of games let your switch between the touch motion and d-pad motion. another thing i love about the ds lite is it's backwards compatible with gameboy advance. the new nintendo ds-i however is NOT backwards compatible, which i think is ridiculous.

    the nintendo DS

    so the R4-DS is a revolution in homebrew/emulation/mod chip technology. the cart is what i like to call a "hack loader". basically during the normal boot sequence the data being read executes an exploit that allows the user to run any custom code they want. this affords many interesting possibilities. for instance custom operating system and interface graphics, running homebrew applications, or running roms/archival copies of games. the official site is here. but i bought mine on amazon.

    chrono trigger cart vs R4 cart - identical size

    as you can see, the r4-ds is the same size as a regular ds cartridge. the game shown is chrono trigger, which is a revamp of a classic super nintendo rpg, it's one of my favorite games of all time. but the r4 has a tiny sd-micro slot on the back. the size of the sd card supported varies depending on which model of the r4 you have. i have the r4-ds sd-hc version, which supports the maximum of 32 gigabytes. i suggest you get the sd-hc version, the R4-III only supports up to 2gb sd cards, which is a huge difference.

    R4-DS interface

    the main interface can be customized to look however you want. the developers of the r4 don’t provide you with a tool to customize it with themselves, but someone else has created a program called alice. its a freeware gui application that tells your all the necessary file sizes and resolutions for each of the images, as well as help you create layover, transparency, and rollover effects for menus.&nbsp;

    R4-DS circuit board skin by xero

    here's the circuit board theme i made for my r4-ds. download it here. the three buttons on the bottom left screen are the three main options of the r4. the first is ds emulations, this allows you to play archival copies of games. the center icon is the media player moonshell. it can play mp3s and a custom ds video codec. the final option is to boot to slot-2 (gameboy advance slot). this however will not play regular gba games (you have to remove the r4 to do that) this option is for booting legacy gba hackloaders.

    R4-DS metroid prime pinball playback

    playback of emulated games is flawless! the speed, the sounds, the graphics, everything looks exactly the same. even games with multiplayer functionality work perfectly. what's great about the r4 is yew can grab an 0-day rom of a new game and check it out. if it sux, you just delete the rom and forget about it. and if you find out it's awesome, then you can buy the game and feel assured what its gonna be all about. i think if nintendo allowed you to download demo roms directly to an sd card on the hardware to "try before you buy" people would go crazy, and the ds scene would explode.

    samus glimmer in DS reflection

    so now, you might be asking...

    so xero, what can you play on this? and where can i get it?

    public site is the devil's shadow. but if you google it, there are tons more. the other main application type is homebrew. and this is a very broad area. so, homebrew apps can be anything from data organizers, media players, emulators or homemade games. some of my favorites are:
    Lameboy - gameboy/color emulator. (LSDJ anyone?)
    jEnesisDS - sega genesis emulator)
    DS Organize - calendar, address book, todo list, graphics app, file browser, calculator, irc client, webbrowser, rss feed reader.
    MoonShell - do it all media player
    SvSIP -VoIP/SIP client
    glitchDS/cellsDS - a fun suite of graphical music composing tools
    and there are tons of other retro game consoles emulated for the DS.
    zophar's domain has a great list.

    JWD 8t =SI vr4ds_homebrew_revolutionR4-DSthe nintendo DS homebrew revolution

    R4-DS the homebrew revolution

    the nintendo ds is an awesome portable gaming system. i have the ds lite, its thin, weights under a pound, has two super bright back   ]u ??Ye wsql_select_into_statementSQL select into statementcopy and swap database tables in MSSQL

    have you ever had a database table that you needed to clone? you can use any number of convoluted methods such as: manually coping and pasting rows in the database manager, running lots of queries/stored procedures, or writing a script to cycle though each row copying data from one table to the next. all of these methods are inferior and far more complex then the method i'm going to show you.

    introducing the select into query...
    this method should be used if the table you want to clone exists, but the new table douse not. the select into query will create the new table for you, copying all the column names, properties, and data. if you want to make an exact clone of the table you can select * into the new table. but if you only want a few specific columns, you can declare only the ones you want. the syntax is elegantly simple...

    SELECT *
    INTO [new-table]
    FROM [old-table]

    have you ever had a database table that you needed to clone? you can use any number of convoluted methods such as: manually coping and pasting rows in the database manager, running lots of queries/stored procedures, or writing a script to cycle though each row copying data from one table to the next. all of these methods are inferior and far more complex then the method i'm going to show you.

    introducing the select into query...
    this method should be used if the table you want to clone exists, but the new table douse not. the select into query will create the new table for you, copying all the column names, properties, and data. if you want to make an exact clone of the table you can select * into the new table. but if you only want a few specific columns, you can declare only the ones you want. the syntax is elegantly simple...

    SELECT *
    INTO [new-table]
    FROM [old-table]
    

    this is a great solution for cloning a table. it's fast and lightweight since it's all executed on the database end, not straddled between middleware.

    now here's another situation...
    let's say we have a simple web-form that is submitting 4 pieces of data: username, date, value1, and value2. this form has been collecting data for a long time, and all of a sudden you realize that somehow your save procedure has swapped the data for value1 and value2! some people might just dive into the table and start modifying rows. but i'm paranoid. i like to validate my SQL procedures before i destroy an entire table's worth of data. we can use the same clone table technique above to make a copy of the table, but we can go a step further and also swap the data in value1 and value2 in the same procedure.

    SELECT *
    INTO [new-table]
    FROM [old-table]
       
    DECLARE @temp AS decimal
    UPDATE [new-table]
    SET @temp=value1, value1=value2, value2=@temp
    

    basically we have 2 SQL statements in one here. the first will clone old-table into new-table. the second declares a temporary variable and uses the temp var to switch the data in value1 and value2 in the new-table.

    if you only need to switch values for a smaller portion of the dataset, say all rows with an id value less than a certain number, you can simply add a where clause to the end of your statement.

    SELECT *
    INTO [new-table]
    FROM [old-table]
       
    DECLARE @temp AS decimal
    UPDATE [new-table]
    SET @temp=value1, value1=value2, value2=@temp
    WHERE id < 806
    

    this will copy the entire table into the new one, but only swap the values for ids less than 806. all other values will be cloned exactly.

    J8" target="_blank">powered link cables and 4 player adapters at his shop nonelectronics.com.

    classic HP keyboard

    the first thing you need is an old keyboard. for this mod you need a mini-din, aka a ps2 (not playstation 2), keyboard. i used an old hp ibm keyboard i pulled out of a dumpster at work. step one is testing it. plug it into a computer, open a text editor, and press all the keys. try tapping them very fast and see how often they actually fire. the responsiveness of the keys in this setting will be relative to their sensitivity in LSDJ.

    pop off the keys

    step two is popping off all the keys. use a flat head screw driver and stick it in the ridge beside the key then push the screw driver up like a lever. the key should just pop right off. repeat this process for all the normal keys. when you get to the spacebar and some of the other odd shaped keys, like enter, you might find springs or metal wires pressing two points on the keyboard. try and take note of their positioning, because you will need to put them back that way.

    piles of keys

    now you should have a piles of keys and a bare keyboard. throw all the keys in a bag, so you don't lose any, and flip the keyboard over. step three is unscrewing the keyboard, prying open and removing it's plastic covering.

    unscrew the daughter board

    carefully keep taking the keyboard apart. every model is slightly different, so pay attention so you can reassemble it. eventually you will see a small silicon daughter board with the cable attached. step four is removing the daughter board. unscrew the board from the innards of the keyboard and set it somewhere safe, like in an anti-static bag.

    a keyboard in pieces

    now that you have all the plastic removed, separate all the different parts and note how they were oriented in the casing.

    clean everything out

    step five is cleaning everything up. i just used air duster and some glass cleaner on a paper towel. clean out all the little dirty recesses between and in the keys. if your keyboard is old like mine was, this step can take a while ;D

    soft circuits

    some of the soft plastic circuits can get a little dirty or folded, clean them as well and make sure they will align correctly when you put everything back. if you have never taken apart a keyboard before, it's very interesting...

    wire labeling

    now take a look at the daughter board from the keyboard. if you’re lucky, like i was, each of the wires leading to the cables from the board will be labeled. if they are not labeled, you’re going to have to cut the end of the mini-din connector off and look at what color wire attaches to which pin number.

    painting

    step six is painting they keyboard. this step is optional. i used regular spray paint on the exterior plastic casings. i painted it all one coat of green, then splattered it slightly with a darker green. for the keys i wanted to make sure they had a less tacky feel, so i painted them with paint-markers. you can get them at an art/craft store or at some office supply stores, i like the "painters" brand. i painted the piano keys white and black and the LSDj interface keys i painted green.

    prep for soldering

    step seven is prepping your tools for soldering. clean your soldering iron with some steel wool and set it to medium/low heat. you'll need flux, wire strippers, and something to wrap your wiring with. you can use heat-shrink tubing, electrical, or duct-tape. step eight is cutting the wires from both your gameboy link cable and the keyboard. then peel apart each of the wires and strip about 1/8" off each wire. use an x-acto knife to peel back the cable shielding.

    LSDj keyboard wiring diagram

    step nine is reviewing the wiring diagram. click here to download it. you will be connecting data, clock, power, and ground wires from both the keyboard and the gameboy link cable.

    LSDj wires spliced and wrapped

    step ten is soldering the wires. wrap the wires from each cable together and dip them in flux. then add a tiny dab of solder from your iron to connect them. after all your wires are attached, wrap each of them individually, then wrap the entire bundle of wires.

    gameboy keyboard cable complete

    using the keyboard
    step one is actually syncing the keyboard to LSDj. insert the link cable you hacked onto the keyboard into the gameboy and load LSDj. press SELECT+UP and go to the PROJECT screen. move the cursor down to the SYNC dialog, and press A+RIGHT until you selection is KEYBD. notice just to the right of PURGE SEQUENCER an integer prefixed by an "I" appears. if nothing is synced to LSDJ/the gameboy this will display I00. once a device is successfully synced, this will be a larger integer (e.g. I01, I02). my keyboard oddly enought syncs as I06. 

    LSDj project screen

    making some noise
    to get some sounds to play when pressing keys on the keyboard, the sequencer must already be running. (press START) the notes you play will be played back on the next step in the phrase sequencer. if you need to get faster response timings, use a faster groove for the phrase you are playing.

    LSDj phrase screen

    an important feature of LSDj, that is easily overlooked, is when the sequencer is running the notes and instruments playing for each channel are displayed on the top right of the SONG screen. this can help a lot when you’re playing around and press the octave or instrument buttons up and down a bunch of times looking for something, and you get lost in the menus. this brings me to the one negative about the LSDj keyboard interface. every once in a while the instrument your playing will jump up or down like ten positions. i think the problem is related to pressing multiple keys too rapidly. i am not the only person to report this problem. technically the gameboy's z80i sound chip is playing each channel one note at a time in such a rapid succession it "tricks" the ear into thinking it's hearing them simultaneously. that's just how gameboy music works. and i think smashing keys on the keyboard can sometimes send multiple input messages per cycle in LSDj and glitches it, but that diagnosis is purely conjecture. and that random issue happens so rarely it's not a big deal. the interface is not perfect, but it's an easy mod, hacky, fun, and adds a new twist to LSDj.

    LSDj keyboard key chart

    key mapping
    SPACE play using custom table
    F1/F2 octave down/up
    F3/F4 instrument down/up
    F5/F6 select custom table to assign to SPACE
    F8 change pulse instrument playback channels (PU1, PU2, PU1+2)
    F9-F12 toggle channel mute (switches on key press)
    CTRL + (F9-F12) tap channel mute (switches on key press and release)

    demo video

    KU4 EE(v 99C1 xlsdj_keyboard_tutorialLSDj keyboard tutorialDIY gameboy piano interface

    LSDj keyboard

    so, making music for LSDj is fun. but after a while you start to wish you could “play" the gameboy software as a musical instrument as opposed to composing music in its tracker style interface. that's where the LSDj keyboard comes in. the idea is, the keyboard sends messages though the gameboy linkport to LSDj. the commands that can be sent vary from playing/stopping notes or chains or tables, un/muting channels, in/decreasing octaves, switching instruments, navigating screens, and more. 
    here's what the LSDj wiki says about the keyboard...

    LSDj keyboard

    so, making music for LSDj is fun. but after a while you start to wish you could “play" the gameboy software as a musical instrument as opposed to composing music in its tracker style interface. that's where the LSDj keyboard comes in. the idea is, the keyboard sends messages though the gameboy linkport to LSDJ. the commands that can be sent vary from playing/stopping notes or chains or tables, un/muting channels, in/decreasing octaves, switching instruments, navigating screens, and more. 
    here's what the LSDj wiki says about the keyboard.

    things we'll need for the mod:
    mini-din / ps2 keyboard
    gameboy link cable
    soldering iron
    solder
    flux
    wire stripper
    screw drivers
    heat-shrink tubing / electrical tape
    x-acto knife

    finding the right gameboy link cable:
    there are a few different types of gameboy link cables, in the most general of senses there are "classic" gameboy cables and gameboy "advance" cables. obviously we will need a classic cable. for this mod to work we will need to power the keyboard, so you'll need a powered gameboy link cable. you can cut off the cable end from a gameboy 4-player link adapter (model# DMG-07), like i did, or you can use the correct powered cable. otherwise you will need to add a +5v external power source. nonfinite sells both 

    xero.nu metroid logo spoof ascii.
    view this post to see the full thing. it's double the size of the teaser image.

     .___.
    /  @  \
    \ @ @ /
     {'^'}
    
    
    
                                                 .                                            
                                               .*                                            
                                                                                                  
                                                                                                  
               .                                                               ,'                 
             :                                                                 .                  
                                                                                                  
                          .                                                   .___.               
                         .'            [ http://xero.nu + Metroid Style ]    /  @  \              
                            .                                                \ @ @ /              
                            .                                                 {'^'}               
                                                                  .                               
                                                     ,'                                           
                                                                                                  
             ant to get paint everywhere i taped up old newspaper on the wall and floor. find some trash and recycle it. i also suggest you wear a breathing mask and gloves. 

    stencil graffiti - ready to paint

    so here's *most* of what i did this year. im not going to post the 85 unique prints i did of each design, just the canvas's.

    clockwork orange

    stencil graffiti - clockwork orange red canvas

    stencil graffiti - clockwork orange tag style canvas

    cowboy bebop spike

    stencil graffiti - cowboy bebop spike in black

    stencil graffiti - cowboy bebop spike in blue

    diabeetus

    stencil graffiti - diabeetus print

    stencil graffiti - diabeetus random paint test

    fight club

    stencil graffiti - fight club

    stencil graffiti - 3D fight club print

    jay and silent bob

    stencil graffiti - jay and silent bob

    OL @x --=;M zstencil_graffitistencil graffitipaintings for my friends

    stencil graffiti - fight club

    this year i decided to make xmas gifts for all my friends. part of me wanted to make something special for everyone, part of me just wanted to paint. i chose stencils as the medium for a few reasons. one, i have little experience with them. most of my graffiti has been hand drawn on the fly. some people in the 'graff scene' seem to think that stencils are cheating. but i don't see it that way. it's just another method in the same medium...

    stencil graffiti - fight club

    this year i decided to make xmas gifts for all my friends. part of me wanted to make something special for everyone, part of me just wanted to paint. i chose stencils as the medium for a few reasons. one, i have little experience with them. most of my graffiti has been hand drawn on the fly. some people in the 'graff scene' seem to think that stencils are cheating. but i don't see it that way. it's just another method in the same medium.

    after preparing you artwork (i did everything in photoshop) you will need to find the correct type of cardboard. stiff enough to not warp when wet with paint, but thin enough to be easy to cut. try and avoid the cardboard with the air bubbles in them. they are the most difficult to cut, and it's almost impossible to get very high detail with them. i like using the 'gift boxes' from retail stores. for these stencils i used boxes form dick's sporting goods, because they are a perfect thickness, and they are free. find yourself a good cutting surface. a desk you don't care about, a thin piece of wood, or one of those plastic drafting wheels. buy a new xacto knife or new blades for your existing one. this is one of the most important parts.

    the sharper the knife, the sharper the image.

    tape down your design to the cardboard and start cutting. take your time. and remember to follow the one rule of stencils: do not leave islands. by that i mean none of your design elements can be floating in the middle of the image. remember your entire design is cut in negative space on the cardboard. it's a hole or a series of them. so if there needs to be some detail within ones of these holes, the detail part must be bridged to the rest of the stencil.

    stencil graffiti - clockwork orange cut

    stencil graffiti - scraps

    after your stencils are ready to go it's time to prep your painting area. i prefer to paint outside, but since it's winter i had to use the garage with the door part way open. where ever you choose to paint make sure it's well lit and well ventilated. since i didn't w e idea of double cooked tofu was born. it’s a simple recipe for anyone new to cooking tofu. this article is meant to teach you how to cook tofu, not flavor it. tofu is known for taking on the tastes of whatever it’s cooked with. after cooking the tofu in this method you can coat or sauté it in a sauce of your choice, or eat it plain. 

    things needed:
    1 block of tofu (i prefer firm or extra firm)
    steamer
    vegetable oil
    frying pan
    paper towels
    tongs (or metal slotted spoon)
    oven mitt

    pressing

    tofu comes packages in ‘water’. but it’s gross bean flavored water. the first step in preparing tofu is pressing this water out of your block of tofu. this step is necessary in *any method* of preparing tofu. and it can be easily overlooked by a first timer.

    tofu - block

    start by laying out 5 or 6 pieces of paper towel on a cutting board. position the tofu in a corner.

    tofu - wrapped

    wrap the tofu in the paper towels. try and have the thickest part of the paper towels on the bottom to collect maximum moisture.

    tofu - press

    put a stack of heavy books on top of the wrapped tofu. leave them there for 3-5 minutes. repeat this process 2 or 3 times until the paper towels are dry after pressing.

    cutting

    the method in which you cut your tofu is really up to you. but try and keep the pieces thin and a bit large. tofu shrinks when it's fried. here's my method:

    tofu - cut

    start by cutting the entire block in half.

    tofu - filet

    evenly filet each half of the block into 3 pieces, then stack them back on top of each other.

    tofu - triangles

    cut your rectangle in half short-ways. then cut and 'X' into each half.

    steaming

    this step is the real secret to double cooked tofu. we just removed the liquid from the tofu by pressing it. now we're going to add some back and cook the center of the tofu in the process. this makes for fuller, spongyer tofu.

    tofu - steamer

    place your tofu pieces in the steamer. make sure they're not touching.

    tofu - steaming

    steam your tofu using distilled water for 15-30 minutes. (i personally only cook it for 15)

    tofu - steamed

    when the timer is up, open the lid and let your tofu cool for a few minutes.

    frying

    now we're going to add a crispy exterior to our already steamed tofu. this will also alter the flavor of the tofu slightly depending on the type of oil you choose (e.g. vegetable, peanut, or olive oil, etc).

    tofu - utensils

    get a plate and cover it with 2 or 3 sheets of paper towel. this will be using the remove the oil from the tofu during the drying process.

    tofu - oil

    get a non-stick frying pan and fill it with vegetable oil (i enjoy the smart balance brand) deep enough to submerge the tofu in. set the heat to medium/medium-low. add 1/3 of your tofu pieces to the oil using tongs or a metal (frying safe) slotted spoon.

    tofu - frying

    the actual frying can be quite violent because of the water we introduced into the center of the tofu. if the bubbling is too fierce, turn down the heat.

    tofu - stuck

    tofu is notorious for getting suck back together when cooking. make sure your moving the pieces around while frying. they will naturally be attracted to one and other. this process with also inadvertently flip and rotate the tofu under the oil, cooking it more thoroughly.

    tofu - half-done

    this piece of tofu is about half done. notice the white marks.

    tofu - finished

    this piece of tofu is almost finished. notice the even golden color. but you can leave this in for another minute or two for increased crispness.

    tofu - double-cooked

    as you take the tofu out of the oil place them on the paper towels. after a minute or so flip them to remove the oil from the opposite side.

    you're done!

    that's it! now you can add this tofu to stir-fry, a noodle bowl, a salad, or anything else you desire. enjoy!

    N1  yz 55K)O |git_with_the_programgit with the programsource code management with git

    git is a distributed revision control and source code management (SCM) system with an emphasis on speed. git was designed by linus torvalds, of linux fame, for managing the development of the kernel. every git working directory is a fully fledged repository, complete with revision tracking abilities independent of a network or centralized server. git is 100% open-source, freeware, and distributed under the GNU general public license v2.


    git is a distributed revision control and source code management (SCM) system with an emphasis on speed. git was designed by linus torvalds, of linux fame, for managing the development of the kernel. every git working directory is a fully fledged repository, complete with revision tracking abilities independent of a network or centralized server. git is 100% open-source, freeware, and distributed under the GNU general public license v2.

    why use git?

    speed and performance.
    git is very fast. nearly all operations are preformed locally, giving it a huge speed advantage over other centralized systems which constantly have to communicate with an external server. git handles large repositories very well with is simple, yet very effective, design. and it's programmed in C, which reduces the run-time overhead of other higher level programming languages.

    complete history.
    every git repository, whether created locally or cloned from a remote location, contains its entire history. once you have a copy of the repository you can move forward and backward in time from the bleeding edge to the initial commit. if you make a few mistakes, introduce some new bug, or just want to reset to a previous state, your just on xy 11AI! {double_cooked_tofudouble cooked tofusteamed and fried goodness

    tofu - double-cooked

    one day i walked into an unfamiliar chinese restaurant and ordered szechuan tofu. the nice lady behind the counter asked me if i wanted it steamed, fried... or both. at that moment my mind was blown. and the idea of double cooked tofu was born. it’s a simple recipe for anyone new to cooking tofu. this article is meant to teach you how to cook tofu, not flavor it. tofu is known for taking on the tastes of whatever it’s cooked with. after cooking the tofu in this method you can coat or sauté it in a sauce of your choice, or eat it plain.

    one day i walked into an unfamiliar chinese restaurant and ordered szechuan tofu. the nice lady behind the counter asked me if i wanted it steamed, fried… or both. at that moment my mind was blown. and th e command away.

    git is distributed.
    managing your project with git can be either completely offline or a combination of on and offline. git can do almost everything offline: adding, committing, branching, merging, etc. many SCMs think this is a bad thing, but i couldn't disagree more. you can use git with a centralized server or not. it has all the powers of subversion and more.

    cheap branching.
    with git, it takes less than a second to create a branch. everything happens in your local repository so there's no need to connect to a central server. you can create a branch to test a new feature, try new techniques, etc, without affecting your "master" branch. you can switch between branches on the fly and watch the contents of your working directory change immediately after executing the command. and, if you want, you can branch out from another branch, or merge it back into another branch.

    git is clean.
    there is only one .git folder for your entire project. other source code management systems, like subversion, create SCM folders in every directory. with git you can easily remove or rename directories in your repository without the worry of messing up things up. and if you want to remove SCM from your project is it's a snap with git, just delete the single .git directory and you're done.

    data assurance.
    the data model that git employs ensures the cryptographic integrity of every bit of/in your project. every object in your repository is checksummed via SHA-1 hash. this hash both identifies objects and is used to check them in and out of the repository. it's impossible to retrieve something from a git repository other than exactly what you put in. it's also impossible to change anything in the repository (filenames, content, timestamps, commit messages, or any other tracked data) without changing all the hash ids of everything after it. a real world example of this is when the linux kernel site was hacked.

    nomenclature

    the git community uses many terms and abbreviations, let's start by demystifying some of them

    SCM = source code manager/management
    an application used to manage your code. some examples would be:

    • git
    • subversion (svn)
    • mercurial
    • bitkeeper
    • cvs

    each of these work differently. they have similar goals, managing your code, but do it in very different ways. wikipedia has a good article on comparing and contrasting them. this article will (obviously) be focused on git, but i will mention SVN from time to time.

    metadata
    where all the git magic occurs. these are the "behind the scenes" files that git creates and uses, these files all live in the .git directory.

    commit
    a commit is a full snapshot of your repository at a given time. git identifies commits by a 40 character SHA-1 hash. but 99% of the time people use the "human hash" version, which is just the first 7 characters of the hash identifier (git will complain if a shortened id is ambiguous and give you suggestions). if you're worried about hash collisions in git, read linus' retort from the mailing list.

    repo = repository
    a git repo is a repository of code that's being managed by git.

    working directory
    the area where your checked out files reside. files in the working directory are ready to be viewed, modified, or added or removed from the index.

    index
    the staging area where files are added/removed prior to committing them to the repository. this index is also sometimes referred to  as the staging area or the directory cache.

    tracking
    we like to say that git tracks your changes. any file you choose to add to your repository index is tracked by git. it will notice any change, no matter how subtle.

    HEAD
    a pointer referring to the most recent commit on the current branch. when you checkout a previous commit your HEAD will move to whatever point you have checked out.

    branch
    the given context of your repository. git enables you to have multiple branches that have their own commits. a branch can be based upon other commits or work autonomously from others. (e.g. the master being the stable code branch, while the others are for new features, bug fixes, etc. or a repo with three branches -bin: compiled application, -src: source code, -docs: documentation.)

    stash
    a special list of commits used to hold temporary changes, like an internal git clipboard.

    config
    this is git configuration data that's specific to a repo. this information is found under .git/config, in plain text. it holds information about remote repos, the correlation between local and remote branches, and more. there is also a global git config which hold default configurations for all repos. the global config lives in your home directory in a file named .gitconfig

    hooks
    these are special event-based scripts to enforce policy. hooks are local only files that also live in the .git directory. they are user specific and are not cloned/pushed/pulled from remote repos.

    data structures

    in general, git only has two data structures: the mutable index that caches information about the working directory and the next revision to be committed; and an immutable, append only object database. the index is used as a correlation between the object db and the working tree.

    there are four types of objects in the database:

    • blob: the raw content of a file. No filename, timestamp, or other metadata.
    • tree: a list of filenames, complete with metadata , and a symbolic link to the blob or other tree that it's describing.
    • commit: this object links tree objects together into a history. it contains the name of the root level tree, timestamp, user supplied commit message, and the names of zero or more parent commits.
    • tag: this is a simple user defined reference to another object (usually a commit id) that can hold more metadata about an object. frequently these are used as the equivalent of bookmarks for release versions (e.g. v1, v1.5, v2, etc)... but since they are user defined use them as you like :D

    the object database is located under .git/objects/
    each object is identified by a SHA-1 hash of its contents. for optimal speed and indexing, the object is lives in a directory that's named with the first two characters of the hash, then the object file itself is named with the remaining 38 characters of the hash. this creates a fixed 256-way partitioning of all objects. this even distribution will optimize file systems which have restrictions on the total number of files per directory. with each revision of a file, its contents change. thus git recognizes the file as a new hash, and stores it as a new blob. and in the opposite situation, files that do not change or just change name or location will not be rewritten to git's object database. examining the trees in each commit object will reveal this correlation. when the contents of a file is saved to a blob, it is done using zlib compression. note, you can create packs of objects to save disk space which alternatively uses the delta compression method. this is usually only necessary in huge repositories with large commit histories.

    download & install

    git is available in two flavors: CLI (command line interface) and GUI (graphical user interface) for the big three operating systems: windows, linux and mac. the source code is also available.

    personally i use, and suggest first learning, the command line version. this article will focus on git from that perspective. if you first understand the commands, using a GUI will make a lot more sense.

    additional front-end tweaks

    **this section is completely optional, and has no effect on using git.**

    i primarily use windows (i dabble in linux), and have a few more notes about git for windows. windows doesn't have a native "terminal", only a lame "command prompt". so git is shipped/powered by a terminal emulator called minGW. this application by itself is amazing. it adds many linux bash commands (and shell scripts!) to windows that you can use with or without git (e.g. grep and ssh). but alas, the minGW terminal window is pretty lack-luster. that's why i use a terminal front-end called console2. console2 adds lots of great features, some functional others aesthetic. it supports multiple terminals, i personally use the windows command prompt, git/minGW, and shortcuts to the python interpreter and mysql console. it features tabs for multiple open terminals, copy/paste functionality, customizable hotkeys, resizable windows, transparency, background images, personalized colors, and more.

    after installing console2 you need to set it up. run the application and right click anywhere on the screen and select: edit >> settings. then choose "tabs" from the accordion menu on the left. the default tab for the windows command prompt should already exist, notice the "shell" value is set to cmd.exe create a new tab and name it git bash (or whatever). set the shell value to your install location of git with the \bin\sh.exe application suffexed with --login - i
    mine looks like this:
    C:\Program Files (x86)\Git\bin\sh.exe --login -i

    you might also want to make this your default tab for console2. while you're here, check out the other options like the cursor style and color, window title and icon. also, go under the "behavior" options and enable copy/paste (you'll thank me later). you can paste by pressing the insert key or right clicking the window and selecting: edit >> paste. to copy text from the terminal hold the SHIFT key and highlight your text with the mouse (yeah i know, it sux using the mouse as opposed to the keyboard arrow keys, but it's better than nothing).

    custom welcome screen.
    it's possible to setup git to run a number of tasks when it first loads via a shell script. tn your user's home directory (windows: C:\users\your_user_name\   linux: ~/) there's a hidden file called .bashrc (if it's not there just create it. enter: touch .bashrc in the terminal). you can do two things in this file, create aliases and set default files to run on startup. the last line on my .bashrc is ~/ascii.sh — this a script that displays some ascii art i made. since it's listed (on its own line) in the file, it will be called after application startup. the contents of that file are as follows:

    #!/bin/sh
    clear
    echo -e "                             "
    echo -e "  \e[00;32m      xxx         "
    echo -e "  \e[00;32m      xxx        \e[01;33m welcome to GIT"
    echo -e "  \e[00;32m xxxxxxxxxxxxx   \e[01;33m the information manager from hell"
    echo -e "  \e[00;32m xxxxxxxxxxxxx    "
    echo -e "  \e[00;32m      xxx         "
    echo -e "  \e[00;32m      xxx         "
    echo -e "  \e[00;32m                 \e[01;37m " $(git --version)
    echo -e "  \e[00;31m xxxxxxxxxxxxx   \e[01;37m powered by console 2.00.148"
    echo -e "  \e[00;31m xxxxxxxxxxxxx    "
    echo -e "                             "
    echo -e "  \e[01;30m   xx   xxxxxx    "
    echo -e "  \e[01;30m  xx    xx xx    \e[01;37m run \e[00;32m'git help git'"
    echo -e "  \e[01;30m xx     xx  xx   \e[01;37m to display the help index."
    echo -e "  \e[01;30m xx         xx    "
    echo -e "  \e[01;30m  xx       xx    \e[01;37m run \e[00;32m'git help '"
    echo -e "  \e[01;30m   xxxxxxxxx     \e[01;37m to display help for specific commands."
    echo -e "  \e[01;30m     xxxxx        "
    echo -e "\e[00m                       "
    

    if you save that file as ascii.sh in your home directory, add it to the .bashrc, and restart console2... BOOM! some awesome looking ascii art appears every time git runs :D
    ok, enough of that, let's take about git.

    configuration

    you should start by globally telling git who you are. your name and email are used in all commit messages. the global values will be used by default for all your git repositories.

    git config --global user.name "xero harrison"
    git config --global user.email "x@xero.nu"

    this information is saved in the .gitconfig file in your home directory
    (windows: C:/user/your_username/   linux: ~/)
    to view this information use:

    git config user.name
    git config user.email

    if for some reason you'd like to override your default config settings in a specific repo issue the commands:

    git config user.name "xero harrison"
    git config user.email "x@xero.nu"

    notice we dropped the --global flag, this tells git to apply these only to the repo we're working in.

    terminal navigation

    it's easy to reenter previous commands.
    you can scroll through your terminal history by pressing up and down.

    most commands can be auto-completed by pressing the tab key, even branch and tag names.
    gi <tab> chec <tab> ma <tab>
    will autocomplete to:
    git checkout master

    creating aliases will speed up your workflow by making you type less. you can manually add them to the .gitconfig file but there's a simple command to create them automatically. if you want to add a global alias to call the git checkout command simply as git co enter:
    git config --global alias.co=checkout
    if you wanted to add an alias for just the current repo drop the --global flag.

    a good, all be it very dangerous, alias git undo will remove any changes in the current branch. since these changes have not yet been committed to SCM this action is irrevocable.
    git config alias.undo=reset --hard

    one of my favorite aliases is a custom version of git log. it adds cool ascii art branch graphs, and IMHO just the right amount of commit info is git graph:
    git config alias.graph=log --graph --color --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"

    this brings me to paging. when your repo has a long enough history, like 6 or more commits, not all of that data can be displayed on the screen at once, so the terminal will page it. for those of you unfamiliar with the linux terminal, paging describes when only one page of data is displayed at a time. this feature is a holdover from the days before you could just scroll backwards, but it makes viewing a large amount of data more pleasant. when information in the terminal is being paged the command prompt at the bottom of the screen will be replaced by a colon and the blinking cursor. if you want to move up or down a single line press the up or down keys. to move down an entire page at one press the space bar or to move up or down a page press the page up or page down keys. when you reach the end of your paged data the colon at the bottom of the screen will be replaced with the word END in an inverted color pallet. to quit paging, at any time, just press the Q key.

    terminal primer

    first off, every command in both git and the terminal have help documentation built in. for general terminal commands, call the command with the --help flag to view the man pages for the command
    cd --help
    ls --help
    grep --help

    git has its own command called help, that you pass the command you want to know more about to it
    git help branch
    git help commit
    git help stash

    working with the file system.
    you change directories with the cd command:
    move to a subfolder
    cd (name)
    move up a directory
    cd ..
    move up a directory and into a subfolder called docs
    cd ../docs
    change to your home directory
    cd ~/

    You can view files in your current directory with ls command:
    ls

    create a directory
    mkdir (name)

    delete a file or directory
    rm (name)

    delete a directory and all its files and sub directories
    rm -rf (name)

    rename/move a file
    mv (old) (new)
    mv README.txt README.md
    mv dev/file.txt release/file.txt

    basic concepts

    tracking
    unlike other SCMs, git tracks the states of files, not necessarily the files themselves.

    if you want to see a list of the git commands just open the terminal and enter
    git

    this will display a list of the so-called "porcelain" commands. these are the high level commands that you will normally use. but if you want to see the full list of "plumbing" commands that the higher level commands and git itself uses internally enter
    git help --all

    if you want to see the current version of git that your using enter
    git --version

    starting out
    to initialize a git repo in your current directory
    git init
    git will display a message that the repo was initialized successfully, similar to:
    Initialized empty Git repository in c:/repos/test/.git/

    you will also notice that the directory name in the terminal will now say (master) after it. this tells you the current branch you're working on with git (master is the default).

    when git creates a new repository it's empty by default. to manage a file's content you'll have to explicitly add it to the repo to be tracked.

    ignoring files
    create a file called .gitignore in the root of your project (actually you can put this file anywhere, or put multiple ones in multiple directories). then list all the files or expressions for files git should ignore. e.g.
    *.log
    /db/schema.sql
    #this is a comment
    thumbs.db
    but just creating the .gitignore isn't enough... you'll need to add it the repository for git to track.

    adding and staging files to be tracked by git
    once you have created or edited a file in your repo, stage it
    git add (filename)
    once the file is staged, git is ready to add it to the next commit.
    you can add files individually by using git add with a filename
    git add index.php
    or multiple files
    git add index.php login.php /somedir/somefile.php
    or you can add all the files in the current directory by using
    git add .
    (fyi: the argument . [period or dot] in linux parlance, is shorthand for the current directory)

    moving, renaming, and deleting tracked files
    once you have added a file to git you can move or rename it the same way as you do in the terminal, just prefix the command with git
    git mv (old file) (new file)
    similarly, you remove files in the same manner
    git rm (filename)
    moving and renaming files this way will keep your git workflow simple. in the end, calling git mv is the same as if you'd delete the file with git from a location then add it back in a new location. since the content of the file has not changed, only its location, the file will still have the same SHA-1 hash and a new blob object will not be added to the database. only a new tree and new commit will be created.

    viewing the current status of your working directory
    to see what's ready to be added or removed in your next commit
    git status

    or use the --short or -s flag to view the shortened output
    git status -s
    git status --short

    calling status will show you a list of the files to be added, modified, or deleted from the repo in the next commit. this gives you a general overview of the differences between your index and HEAD commit as well as untracked files in your working directory. but you can dig deeper than that...

    to view the exact changes made to a particular file you can diff it
    git diff (filename)

    the diff output will show you all the changes made to the file on a line by line basis. additions are marked by a plus and deletions are marked by a minus (optionally they are colored in green or red, respectively, if you have colored output enabled).

    if that's too much data for you to digest you can use the --stat flag to show only the number of insertions and deletions in the file.

    git diff (filename) --stat

    you can also diff branches
    git diff (branch name) (other branch)

    saving a moment in time
    once you have made some modifications, and added all the files you want to track, you're ready to commit it to the repo and save a snapshot of that moment.
    git commit

    the commit command has a few arguments that you might want to use.
    git commit -m 'your commit message'
    use the -m flag to append a message to your commit inline, otherwise git will open your text editor for you to enter a message in.
    git commit -a
    using the -a flag will automatically add all the files already staged that have been modified since the last commit. that means any files you've already added, not new ones.
    or you can combine those two into one!
    git commit -am 'a commit message goes here!'

    viewing the state of files in your index and working directory
    to view files that have been added to the index and working tree use ls-files.
    git ls-files
    to show detailed information about staged files
    git ls-files --stage
    to show other untracked files in the working directory
    git ls-files --other
    to view ignored files
    git ls-files --ignored

    viewing history
    git has a tool to help visualize the commit history of your repo called git log. the log aggregates the data from your commits including: the manifest of files, commit message, committer name and email, date and time, and the parent commit(s). the log command has a variety of options so you can configure it however you like. or use it in different ways for different scenarios.

    running git log with no options will give you a chronological list of commits from newest to oldest.
    git log
    for a more compact view add the --oneline flag
    git log --oneline
    but so far these are linear views of history. if you're interested in seeing branches use the --graph flag. this will add cool ascii art branch diagrams to the log results.
    git log --graph

    you could also combine the --graph and --oneline flags for a more compact graph
    git log --oneline --graph
    another command I find useful coupled with --graph is --color. this will colorize the output of the log command. in my opinion, this makes viewing the branch topology much easier.
    git log --color
    another interesting command is --reverse, this will display git's history in reverse order
    git log --reverse
    so far we've been looking at the logs of our entire repo. but if you want to view the history of a single branch just append the branch name to the command. these results will show you all commits that are "reachable" from that branch. this will include parent commits from the branch you diverged from.
    git log (branch name)
    it's also possible to have git log show you commits that are present in one branch, but not in another. this is achieved by using two branch names with the second being prefixed with an up carrot (^)
    git log (branch name) ^(branch name)
    e.g. show a log of the commits in the topic branch that are not in the master branch:
    git log topic ^master
    log will also allow you to limit your results. the simplest method is to use the -n flag, where n is the number of commits you want to show.
    show the previous commit
    git log -1
    show the previous 5 commits
    git log -5
    you can also specify a range of commit in since..until format (this is called symmetric difference)
    git log (commit id 1)..(commit id 2)
    e.g.
    git log dd342da..f9c0201
    notice in your results commit dd342da63c is not displayed. git log's formatting will always give you everything beyond your first supplied revision. the command above is the same as calling:
    git log ^dd342da f9c0201
    your basically saying: show a log of commits that are reachable from f9c020193e excluding those reachable from dd342da63c.
    you can also customize the output formatting if the log results by using the --pretty flag.
    pretty-print has a few "simple" options: oneline, short, medium (default), full, fuller, email, and raw.
    but you can define your own custom style with format. format has *A LOT* of options.
    i have overviewed them in this gist on github.
    personally, this is the pretty-print that i prefer:
    pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"
    but how you prefer your output is complete up to you. now that you have your "perfect" log created, i suggest making it an alias. then displaying your log, formatted the way you like it, is just one command.

    log as lots more options, take a look at the git help (git help log) for a complete list.

    navigating commits
    if the main point of git is tracking the state of files in your repo, what's the point if you cannot view them again later? git allows you to "travel through time" and revert your working directory to any previous state. to do this you use the checkout command.
    git checkout (reference) (filename)
    the reference can be a commit id (SHA-1 hash), branch name, tag name, or HEAD reference. optionally, you can supply a filename with your reference. if a filename is used, only that file will be reverted, otherwise the entire working directory will be changed.

    a note about HEAD references...
    at any given time a particular commit is labeled as the HEAD revision. this is the active point of development in your repo. whenever you add a new commit the HEAD will reference the newly created commit id. but if you checkout a previous commit, the HEAD will be moved to that particular commit id. when the HEAD is not pointing to the current tip of a branch this is called a detached HEAD. please note that you cannot intrinsically commit from a detached head. but it is possible to branch off from it and add commits to the new branch. moving around in history you will eventually want to put the HEAD back to bleeding edge and continue work as normal. the easiest way is to just checkout that branch again.

    but calling checkout with just HEAD makes no sense.
    git checkout HEAD
    since the HEAD is always where you currently are. instead checkout a previous HEAD.
    to checkout the previous commit before the current HEAD
    git checkout HEAD^
    or
    git checkout HEAD~1
    to check out 3 commits before the current HEAD
    git checkout HEAD^^^
    or
    get checkout HEAD~3
    notice a pattern here? there are 2 types of notations related to the HEAD reference. the up carrot (^) means one before, while the tilde (~) means the suffixing number before. as you can guess, no one wants to type 15 carrots to move back 15 commits ;D

    branching

    why? sometimes you need to experiment with your project, but don't want to mess up your current work. perhaps your working on two very similar, yet independent tracks of development. using a branch for each can help you keep your work parallel, yet separate. another reason could be working in a team environment; other people are working on the master branch while you're adding/testing new features in your own branch. later on you can merge your changes back into the main branch along with the work other people have done in the meantime. (more on merging later)

    when you create a new branch it forks off from your current commit. any new commits added will be viewed as an independent track of development. other commits can be added to the parent branch without affecting your new, or any other, branch.

    to view all the branches in your repo
    git branch

    notice the asterisk next to your current branch (default is master)? that denotes the branch you're currently working on.

    to create a new branch
    git branch (branch name)
    switch to a new branch (or commit)
    git checkout (branch name/commit id)
    create a new branch and immediately switch to it
    git checkout -b (branch name)
    git ships with a branch viewer called gitk. this application shows you a diagram of your repositories history. using the --all flag will show you all the branches in your repo, not just your current one.
    gitk --all
    you can also view your branches with the log command with the --graph flag
    git log --graph
    deleing a merged branch
    git branch -d (branch name)
    deleing an unmerged branch
    git branch -D (branch name)

    merging

    the flip side of branching is merging. once you have completed your work on a branch you can merge those changes into another branch. these changes include file additions, deletions, and modifications. note that the syntax of the merge command takes the supplied branch name and merges it into your current, checked out, branch.
    git merge (branch name)
    e.g. merge the changes from a branch named topic into your master branch.
    git checkout master
    git merge topic

    for simple merges git will automatically figure out what's different between the branches and combine them (using git diff command internally). but sometimes the differences between branches are too complex or too ambiguous for git to decide on its own. in these cases git will issue a merge conflict. when a conflict occurs, git changes the code in the effected file(s) with conflict markers. these markers make it easy for you to see the differences between branches. all you need to do is delete the markers and leave the correct lines in the file. here's an example of what merge conflict markers look like:

    >>>>>>> HEAD
    This is the line in the master branch
    =======
    This is the line in another branch
    <<<<<<< branch_name
    

    once a conflict occurs, i find it simple to just grep the files in your repo looking for the conflict markers to find the files that need fixed before the merge can complete.
    git status --short | grep "^U[UAD]"
    i have this setup as an alias call git conflicts.

    once you have fixed all the merge conflicts stage the changes with git add then git commit them to the repository. i almost always mention fixing merge conflicts in the commit message after doing this.

    but sometimes after doing a merge things don't work, and you want to revert your repo back to its previous state. to undo a merge you will use the reset command with the --hard flag and set it back to its original head state
    git reset --hard ORIG_HEAD

    rebasing

    there are two main ways to integrate changes from one branch to another. the simple method previously discussed is the merge. but the alternative is called a rebase. here's the difference, a merge will perform a "three-way" merge between the two newest commits for two given branches and the most recent common ancestor of the two, creating a new commit. the rebase command takes a patch of the changes introduced in one branch and applies it to another branch. the rebase command takes the changes committed to one branch and "replays" them onto another one at a time. bebasing is used to create a cleaner git history. after doing a rebase, run git log and notice that your commit history has been altered. one of your branches will be missing and it's commits will now appear on your other branch, creating a more linear track of development. rebasing replays commits in their original order, as opposed to merging which takes the endpoints and merges them together.

    git rebase (branch name)
    to rebase the changes from a dev branch onto the master branch
    git checkout master
    git rebase dev
    it's also possible to rebase commits from multiple branches at once. just specify two branch names
    git rebase (branch name 1) (branch name 2)
    git rebase dev bugfix
    you can also specify where to apply the rebase with the --onto flag
    git rebase --onto (target branch) (branch to rebase)
    git rebase --onto master bugfix
    rebasing can get confusing, so git a an interactive rebase tool. use the -i flag to use interactive mode
    git rebase -i dev

    rebasing changes history!
    when rebasing you abandon existing commits and create new ones. although the new commits a very similar they are still viewed differently by git. so, a rule of thumb in the git community is to never rebase commits that you have already pushed to a public repo. the other people working on the project will be very annoyed, when pushing any changes they might have introduced to the branch you rebased will now be unavailable, they will have to rebase their repositories to match then apply their own changes.

    stashing

    git stash will save your uncommitted changes and remove them from the repo. this works almost like a clipboard. if you're working on something and a huge problem pops up. you can stash you changes, fix the crucal bug, commit your fix, then unstash and get back to what you were working on.
    git stash "message"
    git stash apply (stash id)
    cleaning up the stash (removes everything)
    git stash clear

    remote repositories

    so far all of the commands i've talked about are available offline. but let's talk about working with git over the internet. git can work over a few protocols: HTTP, HTTPS, and SSH.

    cloning
    to copying a git repository from an external site use clone
    git clone (repo url)
    git clone http://git.xero.nu:open_qoob

    by default the name of the server you have cloned from is called origin.
    if you use the branch command again with the -a flag (all) you can see remote branches as well
    git branch -a

    so if you make some changes to your local clone of the repo, you can send it back to the server with the push command. you can optionally use a branch name to push a different branch, not just master. by default git push will only push your master branch.
    git push (remote name) (branch name)
    git push origin master
    git push qoob docs

    a note about security. git is the so-called: "stupid content tracker". it's primary function is to manage your code. while git has the ability to sync (both to and from) remote locations, security is not an integrated part of git. it's the burden of the server hosting the remote repo to control who has access to it. any remote repo that is "viewable" can be cloned. but unless access has been setup to accept changes it cannot be pushed to by default. i could talk about this all day, but i want to focus on using git more than setting up a server to host it. you can read more about this in the pro-git book.

    software evolves over time. and if your remote repo is in active development, there's a good chance your version will eventually fall behind. if you want to get the latest changes from a remote repo, use the pull command
    git pull
    This also works with branches as well.
    git pull (remote name) (branch name)
    git pull origin master
    git pull qoob docs

    FYI,
    once you have done this you can use the git push/pull command on its own and git will add the remote and branch name for you. but personally i like to be specific and tell git exactly what i want it to do.

    another way to get remote changes from a repo is the fetch command. fetch is a more atomic version of the pull command. fetch will both pull the new changes from the remote repo but also merge your local changes. note this only applies to your local clone, the merge that takes place after the pull will only be applied to your copy of the repo, but there's nothing stopping you from pushing it back to the server later.
    git fetch (remote name) (branch name)

    pulling from a new repository
    just because you cloned from one repo doesn't mean you're tied to only one. you can add as many remotes as you want so you can pull/push from any/all of them.
    git remote show
    will list all the remotes for your working repository.
    use the -v (verbose) flag for additional information
    git remote -v show

    adding a new remote
    git remote add (name) (url)
    to view info about a remote
    git remote show (name)

    a note about subversion

    lots of people love svn and refuse to stop using it. most versions of git come packaged with the git-svn command (if it's not you can download it separately with the same package manager you used to get git. make sure you also have all the required curl bindings.) this will allow you to use git on a subversion repo. and the best part is, the svn users have no idea you're doing it! the git-svn command will convert all your git commands to svn commands when working with the remote repository. for all your local work, use git as normal. let them live in there "little subversion world", and you can live in the future with us using git ;D

    when cloning an svn repository use clone
    git-svn clone (url)
    then use git as normal, add commit, branch, etc. then when you're done, use the dcommit command. this will take all your git commits and package them as svn commits.
    git-svn dcommit
    if you want to pull from the svn repo use the rebase command
    git-svn rebase
    this will take all the changes from the remote svn and apply them one at a time into your local git-svn repo. by using the rebase command this will create a cleaner git history in your repo and allow for a simpler svn syncing.

    public git hosting

    there are many free/pay sites online to host git repos. most of the free plans focus on open-source projects, and thus are public. if you want a private repo you're more than likely going to have to pay.
    here's a list of some of the most popular git hosting sites:

    sources (giving credit where credit is due)

    everything in this post i learned from using git and reading about it. the following resources are both my citations for this article and a great wealth of knowledge for learning more about git (this article only scratches the surface).

    P~  k k{ 11;SS }bliss_sim_for_ipadBLiSS Sim for ipadmy first itunes release

    BLiSS Sim

    the Bioregenerative Life Support System Simulator, BLiSS Sim, is an ipad app, built with titanium studio, based on investigations conducted by NASA scientists and engineers to explore how plants can be grown to provide air, water, and food for astronauts at a lunar base.

    BLiSS uses a game format to engage youth and adults in the challenges of supporting humans in space or extreme environments on earth.

    The app is free and available for download from the iTunes Store.
    Visit the promotional website at: http://bliss-sim.cet.edu/

    BLiSS Sim

    the Bioregenerative Life Support System Simulator, BLiSS Sim, is an ipad app, built with titanium studio, based on investigations conducted by NASA scientists and engineers to explore how plants can be grown to provide air, water, and food for astronauts at a lunar base.

    BLiSS uses a game format to engage youth and adults in the challenges of supporting humans in space or extreme environments on earth.

    The app is free and available for download from the iTunes Store.
    Visit the promotional website at: http://bliss-sim.cet.edu/

    ORlrminal.

    sound advice

    one evening i had a lengthy conversion with my friend matt burdine, a long time linux user. he convinced me that there was nothing to loose and give it a try. if i dual booted, i could have the best of both worlds, and he was right.

    my first step what to decide which distro to choose. in my research, i discovered there were a few main "flavors" of linux and a many distributions based on them. each having their own goals and opinions on how an OS should operate. i decided on debian, one of the main players, with a modern/active development community, lots of FLOSS/FOSS software packages, and many distros to choose from. this lead me to distrowatch, a great site that gives you all kinds of information about the most popular linux distros. based on many reviews i selected linux mint with the cinnamon desktop. at the time, a new version had just been released. mint was a real eye opener. i realized how much of a fully fledged operating system linux was. after a month or so, i was rarely booting into my windows partition anymore. mint helped me learn, from a very high level, how linux worked. and to be honest, it was extremely similar to windows in many respects. which was one of my biggest issues with mint. i was switching to linux to leave the windows world, not to just find a free clone of it.

    distrohoppers anonymous

    this lead me to the heaven/hell that is distrohopping, switching between various linux distributions like an addiction. this practice has it's pros an cons. test driving multiple systems gives you a great overview of the terrain. quickly helping you to decide which you like, and which you don't. setting up a separate home partition, allows you to use your personal files on any of the distros you install. but this rapidly consumes all the space on your hard drive(s) by having to install (some of) the same software on each. for the next few months i had a new version on linux on my testing partitions ever week. i experimented with a number of ubuntu variants like kubuntu, xubuntu, lubuntu, etc. i used centos, elementary, puppy, fedora (redhat), netrunner, manjaro, backtrack (kali), and finally crunchbang.

    *note*
    there are two notable distros missing from the aforementioned list. ubuntu proper and archlinux. when first learning about linux i was obviously, digitally, acquainted with richard stallman, the founder of the free software foundation and GNU. i read an article he wrote about ubuntu's problems being backed by a corporation, and basically install spyware on everyone's machines. it made a lot of sense. and i figured if they were putting stuff like that into the source, what else is in there/will they add? it dissuaded me from using it. arch linux, on the other hand, is a DIY linux distro targeting proficient *nix users, offering tons of great software, build scripts, user repos, etc, but little in the way of help or support. archers are expected to maintain their own systems, work through and solve their own problems when issues occur. at this point in time, i do not feel that i am ready for that. but hopefully some day :D

    crunchbang

    crunchbang

    i had seen the write up about #! (pronounced crunch bang) on distrowatch when waldorf was first released, and was immediately intrigued. it's based on debian stable, which i still feel is one of the strongest linux flavors, and featured the lightweight openbox window manager. after installing i was taken back by how minimal it's GUI was. no desktop environment, just a WM (window manager) and a rock-solid toolkit. many of the components of #! are from the XFCE project, which i was familiar with from some other distros i tired. after a few days i realized how unnecessary a DE (desktop environment) was for my purposes. my goal was to live in the command line, and i was doing just that. but when the moment arises that you need a file manager, thunar is there to help you out. thunar is a beautiful, bare minimum, file manager. you can visually explore the file system, move files around, have it suggest which applications you should use to open files with, etc. some other notable applications that come with #! are nm-applet, a network manager which makes connecting to wired/wifi/vpn networks a breeze. gparted, a GUI disk partitioning tool, and a/xrandr a dead simple screen resolution configuration tool.

    but one of #!'s strongest points are the forums. it's a great community of friendly, insightful, intelligent individuals helping new users solve problems. the vast majority of my questions were solved by simply searching. most n00b questions have already been answered, many with multiple suggestions and updates as things change. the forums are also a "direct" link with other users and developers. they have posts asking the community for suggestions for new releases, posts about new software, and other topics related to the linux world. but this community is not only made up of #! users, there are many who use debian proper, or other debian variants, archers, even a few ubuntu users.

    dot files

    like many other linux users i keep a git repo of my dotfiles, the ui configuration files that make my personal linux system look and act the way it does. you can check them out on my git server or on github.

    the voyage continues

    it's now been a year since i embarked on my linux journey and it's far from over. i have long since deleted my windows partition, and have never looked back. that's partially thanx to wine, a tool that allows you to run windows software in linux. and partially due to the great free software available to linux users. linux gives you, the user, the freedom to use your machine the way you want it. it's open nature allows you to tweak ever minute detail of your system. yes allows, unlike windows which i was constantly hacking part to change things, which inevitably leads to system instability and/or lack of security.

    i highly suggest giving linux a chance. it does have a learning curve, but how steep is based on which distro you select. mint and ubuntu are very windows-esque, and thus have a low barrier to entry. but "power-users", like myself, can choose to dive a deeply as you desire. linux is what you make it.

    S=? E| 11;IA ~switching_to_linuxswitching to linuxdistrohoppers anonymous

    linux screen shot

    switching to from windows to linux is one of the best choices i have made in years. the freedom it provides is unparalleled. the fact that it's 100% free, the open nature of it's development, the community focus, and the abundance of free software was enough to convince me to give it a try.

    linux screen shot

    switching to from windows to linux is one of the best choices i have made in years. the freedom it provides is unparalleled. the fact that it's 100% free, the open nature of it's development, the community focus, and the abundance of free software was enough to convince me to give it a try.

    farewell windows

    i have been a long time windows user, it's served me well over the years. but recently i have become overwhelmingly sick of all the issues related to running it. every month (patch tuesday, inevitably followed by exploit wednesday) there's a plethora of updates, none of which ever seem to be related to security or stability. the so called windows "command line" is the saddest excuse for a terminal i have ever had the displeasure of using. and the "new" version, windows 8, has taken 10 steps back in terms of usability. the metro ui looks like AOL in the 90's, everything is hidden away from the user, it takes all your previous knowledge about your OS and tosses it in the trash.

    to be fair, i've had some linux experience before. in college we learned how to install it and connect to it via samba. i was given numerous live CDs featuring distributions like ubuntu, kororaa, and knoppix. i don't know why, but at the time i just wasn't interested in learning an entirely new OS. maybe my reluctance was based on the fact that i was still satisfied with my windows experience, maybe i was "too busy" learning new programming techniques, maybe it was fear of change. but whatever the reason, i just sort-of wrote linux off as a server OS.

    the terminal

    recently i have been using the terminal more and more. with the advent of GIT, i had started using MinGW. this added *nix like commands to windows. the more i used it the more i realized i was trying to force windows to be linux. i would research how to do something in linux then have to decide how to pull that off in windows. i learned to love the simplicity to move files with a single command versus dragging and dropping between two windows. the more i use the terminal the more i hate the mouse. have you ever tried to manually rename more than 100 files in windows? it's a painfully long process. with one command and some regex (regular expressions) you can do it in a few seconds from the te* your active jobs!

    once the crontab file has been edited the cron daemon will automatically read it and update it's job que to match the file. you should see the message:
    crontab: installing new crontab

    crontab file syntax

    the file can be separated into two parts:

    • the interval to run the job
    • the command to be executed

    here's a cheatsheet for the interval syntax

      .---------------- Minute (0 - 59)
      |  .------------- Hour (0 - 23)
      |  |  .---------- Day of the Month (1 - 31)
      |  |  |  .------- Month (1 - 12)
      |  |  |  |  .---- Day of the Week (0 - 6) (Sunday=0 or 7)
      |  |  |  |  |
      *  *  *  *  *  example-script.sh
    

    here's an example entry:
    this job would run every half an hour on monday through friday.

    30 * * * 1-5    echo "cron job executed"
    

    valid time values

    Minute          0-59 (* every minute at the start of each minute)
    Hour            0-23 (* every hour at the start of every hour)
    Day of Month    0-31 (* every day)
    Month           1-12 (* every month, you can use month names if you prefer)
    Day of Week     0-7  (0 and 7 both mean sunday, again you can use names - see below)
    

    an alternative to the six field crontab syntax would be the two field option which consists of two fields the date / time and the actual command.

    here's a list of the most common @ options for cron:

    @reboot     -   runs when the machine is started up or if the cron daemon is restarted
    @midnight   -   runs once a day at midnight (the equivalent of 0 0 * * *)
    @daily      -   alias of @midnight
    @weekly     -   runs once a week on sunday (the equivalent of 0 0 * * 0)
    @monthly    -   runs once a month on the first day of every month at midnight (the equivalent of 0 0 1 * *)
    @annually   -   runs once a year at midnight on the first day of the first month and (the equivalent of 0 0  1 1 *)
    @yearly     -   alias of @annually
    

    email results

    on the very first line of the crontab file you can specify an email address to send the results of the job to. using the following syntax: MAILTO=cron@xero.nu

    the raw output of your job is will be emailed to the supplied address. the results could be echo statements, html, xml, json, whatever.

    examples

    on march 12th at 7:45pm load the http://xero.nu/cron/job page

    45 19 12 3 * curl --silent --compressed http://xero.nu/cron/job

    chaining multiple commands is exactly like regular shell commands. link them with &&, ||, or ;

    @midnight cd /var/www/xero.nu/ && php cron.php

    every night at midnight load the http://xero.nu/cron/job/2 with the supplied username/password

    @daily curl -u username:password --silent --compressed http://xero.nu/cron/job/2

    a note about passwords in cron jobs

    if your password contains a special character (it should!) that might interfere with your bash script's execution, simply escape the character with a prepending backslash. so if your password was `P4s$w0rd!` use:

    @daily curl -u xero:P4s\$w0rd\! --silent --compressed http://xero.nu/cron/job/3

    timezone pitfalls

    an important note about cronjobs is the fact that the execution time is tied directly to the server's time. make sure the server's time is in the timezone that you expect before setting up your jobs. execute the `date` command on the server and look at the time code on the end of the results.

    Thu Apr 18 11:52:19 EDT 2013

    the EDT suffix indicates the server is running on Eastern Daylight Time so it would execute in our local east coast time taking daylight savings into account.

    Thu Apr 18 11:52:19 UTC 2013

    the UTC suffix indicates the server is running on Coordinated Universal Time so the server's time is four hours *ahead* of our local east coast time.

    SMdo  } +?ek linux_cron_jobscron jobsautomating tasks in linux

    cron jobs are automated scripts that run at a specified date/time, or on a specified interval.

    anything that can be executed in the terminal on the server can be run as a cron job (this includes commands, applications, scripts, etc).

    crontab is the command used to create/view/modify/remove cron jobs.

    • crontab -l lists all scheduled jobs
    • crontab -e allows you to edit jobs
    • crontab -r will delete *all* your active jobs!

    once the crontab file has been edited the cron daemon will automatically read it and update it's job que to match the file. you should see the message:
    crontab: installing new crontab

    cron jobs are automated scripts that run at a specified date/time, or on a specified interval.

    anything that can be executed in the terminal on the server can be run as a cron job (this includes commands, applications, scripts, etc).

    crontab is the command used to create/view/modify/remove cron jobs.

    • crontab -l lists all scheduled jobs
    • crontab -e allows you to edit jobs
    • crontab -r will delete *all>npm v1.4.x (packaged with node)
    • git
    • gnome keyring dev

    install the dependencies:

    sudo apt-get install libgnome-keyring-dev python2.7 git git-core

    you can also install nodejs via apt-get, but as of right now it's not the most recent version. see the nodejs wiki for install instructions.

    setup python:
    to ensure that gyp uses python 2
    * personally i did not do this. since i don't have python 3 installed *

    npm config set python /usr/bin/python2 -g

    clone the repo & enter the directory:

    git clone https://github.com/atom/atom 
    cd atom

    now, there are three ways to actually build atom:

    #1. create the application at /tmp/atom-build/Atom

    script/build

    #2. installs command to /usr/local/bin/atom

    sudo script/grunt install

    #3. generate a .deb package at /tmp/atom-build

    script/grunt mkdeb

    i personally opted for the first one, just to see if it would work (but if i was going to do this again i'd chose option #2). after building (there were a number of warning in the build script) i moved the files from /tmp/atom-build/Atom to /opt/atom/ and symlinked it into my path.

    installing on ubuntu via ppa

    to install on ubuntu 14.04, 13.10 or 12.04, make sure the dependencies are met and run:

    sudo add-apt-repository ppa:webupd8team/atom 
    sudo apt-get update 
    sudo apt-get install atom

    installing on arch via the AUR

    archers should use their usual work-flow for the AUR: atom latest release | atom git

    installing on mac osx

    just download and run the official installer.

    installing on windows

    checkout the windows build instructions in the atom docs.

    initial impressions

    atom is quite fast (although load time is a bit slower sublime, but it's still beta). the ui is quite nice, and should be very familiar to sublime users. it seems like github's plan is to create a clone of sublime's features then build upon them, and it seems like they have almost all the bases covered already. the plugin system is quite nice. i actually think i like it a little better than sublime's package manager. but we'll see what happens when they have the vast number of packages sublime has. i like the very tight git integration into the gui (though i have already achieved this in sublime with plugins). they have a great number of supported syntaxes already. code completion has great coverage, although it seems a bit slow. themes are broken into two classes: ui and syntax. there are not many themes available yet, but they all seems pretty nice. my biggest gripe with atom themes is they chose LESS over SASS. but that's more of a personal preference thing for me than anything.

    i'm very excited to see where this application goes. since it's os / community backed i expect big things. but i'm not ready to uninstall sublime quite yet.


    sources

    Sk --H~ ??e/ atom_editor_linux_installatom editor linux installrunning github's open source text editor

    atom text editor linux screenshot

    atom is a "hackable text editor for the 21st century" created by the team at github. it's designed to be customizable, but also usable without needing to edit a config file.

    this quote really sums it up perfectly:

    because we spend most of our day in a text editor, the single most important feature we wanted in an editor was extensibility. atom is built with the same open source technologies used by modern web browsers. at the core of atom is chromium, the open source project behind google chrome. with that comes all the power and innovation being developed for the web. but more importantly, extending atom is as simple as writing javascript and css, two languages used by millions of developers each day.

    atom.io

    atom text editor linux screenshot

    atom is a "hackable text editor for the 21st century" created by the team at github. it's designed to be customizable, but also usable without needing to edit a config file.

    this quote really sums it up perfectly:

    because we spend most of our day in a text editor, the single most important feature we wanted in an editor was extensibility. atom is built with the same open source technologies used by modern web browsers. at the core of atom is chromium, the open source project behind google chrome. with that comes all the power and innovation being developed for the web. but more importantly, extending atom is as simple as writing javascript and css, two languages used by millions of developers each day.

    atom.io

    the project is open source under the MIT license. you can checkout the repo's here.

    let me start off by saying i use the sublime text editor all-day, everyday. it's the editor of my dreams. it's super fast, has great syntax highlighting, spell checking, code completion, support for tons of languages and build systems, an awesome package control system, theme support... i can keep going. i can also say the sublime is the first application i have PAID for in many years. so when i read that github was building an open source alternative i was immediately intrigued.

    until now atom has only been available for beta testing on mac osx. but today they released the source code! which means that developers for the big three (mac, windows, & linux) can now build and install the app themselves.

    installing on #! / debian

    for installation on debian based systems you will need to compile it yourself. it's simpler than it sounds.

    requirements:

    • os with 64-bit architecture
    • python 2.x
    • node.js v0.10.x
    • my dotfiles

      i keep a git repo at http://code.xero.nu/dotfiles and a mirror on github http://git.io/.files, just in case. as of writing my dotfiles contain configs for awesomewm, compton, figlet, git, herbstluftwm, midnight commander, ncmpcpp, pacman, sublime text, vim, urxvt, zsh and more.

      how it works

      by default the stow command will create symlinks for files in the parent directory of where you execute the command. so my dotfiles setup assumes this repo is located in the root of your home directory ~/dotfiles. and all stow commands should be executed in that directory. otherwise you'll need to use the -d flag with the repo directory location.

      to install most of my configs you execute the stow command with the folder name as the only argument.

      to install my herbstluftwm theme use the command:

      stow herbstluftwm

      this will symlink files to ~/.config/herbstluftwm and various other places. if you clone or browse my dotfiles repo and look in the herbstluftwm folder, you'll find a .config/herbstluftwm directory structure identical to what the stow command just symlinked into your home directory. if you edit the autostart file in the dotfiles herbstluftwm folder it will automatically be updated in the file symlinked in your home directory.

      this command effected your home directory because that's where the repo is located, but you can override the default behavior and symlink files to another location with the -t (target) argument flag.

      to install the ryu-login you need to execute the command:

      stow -t / ryu-login

      this will symlink the file to /etc/issue. if your user does not have access to edit /etc simple execute the command again with sudo.

      sudo !!

      ** note: **

      stow can only create a symlink if a config file does not already exist. if a default file was created upon program installation you must delete it first before you can install a new one with stow. this does not apply to directories, only files.

      tl;dr

      navigate to your home directory

      cd ~

      clone the repo:

      git clone http://git.xero.nu/dotfiles.git

      enter the dotfiles directory

      cd dotfiles

      install the zsh settings

      stow zsh

      install the root zsh settings

      sudo stow zsh-root -t /root

      install awesomewm theme

      stow awesome

      uninstall awesome theme

      stow -D awesome

      install herbstluftwm

      stow herbstluftwm

      previews

      coils awesome ghosts coverge night city U5r V K9'-q managing_dotfiles_with_gnu_stowmanaging your dotfileswith gnu stow

      preview of xero's shell

      in the *nix world programs are configured in two different ways, via arguments in the terminal or text based configuration files. programs which have many options like your shell, window managers, or even text editors are configured on a per-user basis with files in your home directory ~. in unix like operating systems any file or directory that starts with a period or full stop character is considered hidden, and in a default view will not be displayed. thus the name dotfiles. it's been said of every console user:

      you are your dotfiles

      i manage mine with gnu stow, a free, portable, lightweight symlink farm manager. it allows me to keep a versioned directory of all my config files that are virtually linked into place.

      preview of xero's shell

      in the *nix world programs are configured in two different ways, via arguments in the terminal or text based configuration files. programs which have many options like your shell, window managers, or even text editors are configured on a per-user basis with files in your home directory ~. in unix like operating systems any file or directory that starts with a period or full stop character is considered hidden, and in a default view will not be displayed. thus the name dotfiles. it's been said of every console user:

      you are your dotfiles

      since they dictate how your system will look and function. to many users (see ricers and beaners) these files are very important, and need to be backed up and shared. people who create custom themes have the added challenge of managing multiple versions of them. i have tried many organization techniques. and just take my word for it when i say, keeping a git repo in the root of your home directory is a bad idea. i've written custom shell scripts for moving or symlinking files into place. there are even a few dotfile managers, but they all seem to have lots of dependencies. i knew there had to be a simple tool to help me.

      i now manage my dotfiles with gnu stow, a free, portable, lightweight symlink farm manager. it allows me to keep a versioned directory of all my config files that are virtually linked into place via a single command. this makes sharing these files among multiple users (mine, root, xmbx, etc) and computers (desktop, laptop, webserver, htpc) super simple. and does not clutter your home directory with version control files.

      installing

      stow is available f!Interface" target="_blank">UEFI bios and will be using gummiboot as my boot manager.

      start by downloading the arch linux install medium and burning it to a usb stick or cd. boot to the install medium (check your bios boot order) and you will be greeted by the prompt:

      root@archiso ~ #

      quick note about sudo

      in an attempt to keep this post cleaner, i will only mention the commands needed. if permissions errors arise, preface commands with sudo as necessary.

      internet

      the first test is getting your internet working. out of the box there is a good chance your wifi will not work. so i start the install process via ethernet. start dhcp and try pinging a site to test your connection

      • dhcpd
      • ping www.google.com -c 3

      if ethernet is not an option you can try android/iphone tethering.

      view drives

      next you'll need to take a look at your drives and decide on a partitioning scheme.

      • lsblk
      • lsblk -f

      partitioning SSD

      • gdisk /dev/sdb
      • o (delete all)
      • n (new)

        efi boot

        • choose 1 to select 1st partition.
        • Leave start sector at default by pressing Enter
        • change end sector to +512M (it is important to keep it at this size).
        • For the type enter the code ef00 (EFI).

        root

        • use all the defaults!
        • choose 2
        • leave start
        • leave end
        • type 8300
      • p (check tables)

        Number    Start         End         Size    Code   Name
        1          2048     1050623    512.0 MiB    EF00   EFI System
        2       1050624    62533262     29.3 GiB    8300   Linux Filesystem
      • w (write the changes)

      partitioning HDD

      • gdisk /dev/sda
      • o (delete all)
      • n (new)
      • home

      • use all the defaults!
      • choose 2
      • leave start
      • leave end
      • type 8300
      • w (write the changes)

      check your work

      • lsblk

      create file systems

      • mkfs.fat -F32 /dev/sdb1
      • mkfs.ext4 /dev/sdb2
      • mkfs.ext4 /dev/sda1
        • if you made a swap:
        • mkswap /dev/sdaX
        • swapon /dev/sdaX

      check your work

      • lsblk -f

      mount the file systems

      • mount /dev/sdb2 /mnt
      • mkdir /mnt/boot
      • mkdir /mnt/home
      • mount /dev/sdb1 /mnt/boot
      • mount /dev/sda1 /mnt/home

      install the base system

      • pacstrap /mnt base base-devel

      setup fstab

      • genfstab -U -p /mnt >> /mnt/etc/fstab

      configuring the system

      • arch-chroot /mnt

      you will be greeted with the prompt:

      sh-4.3#

      create locale file

      • remove the "#" in front of the locale(s) you need, en_US.UTF-8 in my case
      • vim /etc/locale.gen

      save the file and generate the locales

        "
      • locale-gen

      locale.conf

      • echo LANG=en_US.UTF-8 > /etc/locale.conf
      • export LANG=en_US.UTF-8

      setup the hostname, envy in my case

      • echo envy > /etc/hostname

      install the bootloader

      the mount command will most likely result in an error/warning due to it being loaded already.

      • mount -t efivarfs efivarfs /sys/firmware/efi/efivars
      • pacman -S gummiboot
      • gummiboot install

      create a configuration file to add an entry for Arch Linux to the gummiboot manager

      • vim /boot/loader/entries/arch.conf

      the contents of arch.conf file should be:

      title Arch Linux
      linux /vmlinuz-linux
      initrd /initramfs-linux.img
      options root=/dev/sdb2 rw

      ^ note the value of root should be your root partition (not boot).

      make sure we have a network connection after we reboot

      • systemctl enable dhcpcd.service

      set root password

      • passwd

      create a user, xero in my case

      • useradd -m -g users -G wheel -s /bin/bash xero

      create a password for user

      • passwd xero

      add user to the sudoers group

      • echo 'xero ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

      exit out of the chroot, unmount and reboot

      • exit
      • umount -R /mnt
      • remove the install medium
      • reboot

      if the system boots:

      • victory dance!

      post install

      enable the multilib repository

      • vim /etc/pacman.conf

      find the following lines and remove the "#" in front of them and save.

      • [multilib]
      • Include = /etc/pacman.d/mirrorlist

      using pacman

      pacman is the arch linux package manager. since arch is a rolling release distribution you will be using it a lot to install, remove, and update binary packages on your machine. here's a quick rundown of the most common commands:

      • search for a package

        pacman -Ss name
      • install a package

        pacman -S name
      • remove a package

        pacman -R name
      • update a package

        pacman -U name
      • update all packages

        pacman -Syu
      • count installed packages

        pacman -Qu | wc -l

      sync the package databases

      • pacman -Sy

      install xorg

      • pacman -S xorg-server xorg-server-utils xorg-xinit mesa

      video card drivers

      it's intel in my case, but might be different for you! check out the arch wiki for more information.

      • pacman -S xf86-video-intel

      trackpad drivers

      • pacman -S xf86-input-synaptics

      what to do when things break

      when updating with pacman -Syu sometimes things will break. if you update often, less new packages are introduced to your system at a time. this makes debugging and/or reverting offending packages easier. but here's the steps for recovery from say, a kernel panic.

      • boot the arch install iso (some suggest to install it as a recovery partition)
      • mount your partitions (run lsblk and df -h to view current drive labels, because the arch iso sometimes gets mount name precedence and will change their normal labels.)
        • mount /dev/sdb2 /mnt
        • mount /dev/sdb1 /mnt/boot
        • mount /dev/sda1 /mnt/home
      • chroot

        • arch-chroot /mnt /bin/zsh or arch-chroot /mnt /bin/bash depending on your shell preferences
        • downgrade packages. make sure you chose the old package name. remember you're not uninstalling, you're "updating" to an older version.
        • cd /var/cache/pacman/pkg
        • pacman -U old_package_name.pkg.tar.xz
          • in the case of a kernel issue revert both the linux kernel package as well as linux-headers.
      • exit chroot
      • systemclt reboot reboot

      time

      • timedatectl status
      • timedatectl list-timezones
      • timedatectl set-timezone America/New_York
      • timedatectl set-time "2014-05-31 04:20:09"
      • ^ obviously use the correct localtime!

      internet setup

      check the configuration of your /etc/hosts file, a valid configuration looks something like this:

      #<ip-address>  <hostname.domain.org>    <hostname>
      127.0.0.1      localhost.localdomain    yourHostname
      ::1            localhost.localdomain    yourHostname

      install the network tools

      this will install both the necessary system packages as well as the gui network manager applet, because i'm lazy and it doesn't load all the gnome dependencies.

      • pacman -S wpa_supplicant wireless_tools networkmanager network-manager-applet gnome-keyring

      make the networkmanager start on boot:

      • systemctl enable NetworkManager.service

      disable dhcpcd

      since networkmanager wants to be the one who handles the dhcpcd related stuff, you have to disable and stop dhcpcd:

      • systemctl disable dhcpcd.service
      • systemctl disable dhcpcd@.service
      • systemctl stop dhcpcd.service
      • systemctl stop dhcpcd@.service

      enable wifi

      enable the wpa_supplicant to use your wireless connection:

    • systemctl enable wpa_supplicant.service

    permissions

    add your user to the network group:

    • gpasswd -a xero network

    turn off network interface controllers

    use your own device names from the result of the ip link command if not eth0 and wlan0

    • ip link set down eth0
    • ip link set down wlan0

    start the networking services

    • systemctl start wpa_supplicant.service
    • systemctl start NetworkManager.service

    reboot and your networking should be ready.

    if the hardware switch is still disabled:

    • systemctl enable rfkill-unblock@all.service
    • and if that *still* doesn't work, perhaps try booting into another os, enable your wifi then hard power off the device.

    at this point you should have a working system ready to build. from this point you can install your dotfiles and the desktop environment or window manager of your choice and start crafting (ricing) your personal system. i will be talking about this more in a upcoming post.

    UM q 9q< S5e vimvimwhy i use an editor from the 1990's

    contents

    vim

    contents

    • editor vs ide
    • simple
    • everywhere
    • vim
    • help
    • configurable
    • extensible
    • multiple files
    • interface
    • sometimes you find the need to do mass string replacements in your mysql/maria databases. here's how i do it:

      UPDATE your_table
      SET your_field = REPLACE(your_field, 'old_value', 'new_value')
      WHERE your_field LIKE '%old_value%'

      sometimes you find the need to do mass string replacements in your mysql/maria databases. here's how i do it:

      UPDATE your_table
      SET your_field = REPLACE(your_field, 'old_value', 'new_value')
      WHERE your_field LIKE '%old_value%'
      P3 !!'[= arch_linuxarch linuxinstall guide

      this is my arch linux install guide. it's not meant to replace the beginners guide or the install guide, but act as a quick overview of exactly what the install process entails. hopefully this will encourage those intimidated by the terminal only install process.

      this setup is for my HP Envy 6t-1000 laptop. it has a 32gb ssd drive with two partitions for boot and / and the other 500gb hdd is my home. my laptop has plenty of ram so i do not use a swap. my laptop also has UEFI bios and will cover it's install procedure.

      boot to the install medium and you will be greeted by the prompt:

      root@archiso ~ #

      this is my arch linux install guide. it's not meant to replace the beginners guide or the install guide, but act as a quick overview of exactly what the install process entails. hopefully this will encourage those intimidated by the terminal only install process.

      this setup is for my HP Envy 6t-1000 laptop. it has a 32gb ssd drive with two partitions for boot and / and the other 500gb hdd is my home. my laptop has plenty of ram so i do not use a swap. my laptop also has shell commands

    • file searching
    • random vim tips
    • learning & tutorials
    • wrap up

    editor vs ide

    a text editor is a tool for editing plain text files. they have features like file and file system navigation, file io, modification, undo, search and replace, spelling and grammar checking, and more. but in this article we're talking about a type of editor referred to as source code editor. beyond the aforementioned functions their features include code detection, syntax highlighting, indentation and formatting, brace matching, code completion, etc.

    IDE is an acronym for integrated development environment, it's a suite of programs that work together in a "portable environment" that assists you in writing software. an editor is just one component of an IDE's toolchain. main features include things like code completion, code navigation, error checking, debugging, build automation, versioning, etc. most IDEs are designed for a specific language or related subset of them.

    being a long time programmer of a variety of languages i have used both at different times in my career. some "corporate" languages (cough microsoft! cough) like visual basic force you to use their IDE designed for their proprietary suite of tools. but many non-compiled and scripting languages let you write their code however you like. some editors like sublime text can be used for a multitude of languages while others like racket are designed to work with only one.

    if you sit around coding java all day, i'm sorry, then maybe using and full blown IDE like Eclipse, Android Studio, or IntelliJ is for you. but on any given day at my current job i will edit files in php, javascript/json, css/sass/stylus, shell scripts, markdown, config files, and a variety of others. i want an editor flexible enough to handle a wide variety of programming languages.

    simple

    if you adhere to the unix philosophy "dotadiw" or "Do One Thing and Do It Well", many IDE features break this separation of concerns. don't get me wrong, i understand that one of the most alluring attributes of an IDE is that you have your entire toolchain all in one place sharing the same user interface. but i subscribe to the unix as my ide mentality. as a shell user, your tools already work in the same common ui paradigm of text streams and files as persistent objects. i don't need my editor to understand the intricacies of any language, it just needs to know how to query and interpret or simply display the responses of external tools.

    everywhere

    another important factor for me is remote editing. even though we live in the future where your production website code is automatically deployed via post commit hooks in version control software, you still find yourself poking around and tweaking the code on remote machines. most *nix based/like operating systems come with ed, vi/vim, emacs, nano, and sometimes a few other editors. ed the standard editor is too terse and nano is too simple for me. i already feel like i have &carpal tunnel syndrome, so emacs is out. it also seems bloated to me, being that it's an editor as well as a client for mail, irc, news, web, etc. while vim is often available, sometimes only vi or micro-versions are available like nvi, the busybox tiny-vi clone, or the ATARI/UNIX/MS-DOS/OS2/QNX xvi implementation.

    vim

    i choose vi/vim the shell based, fast, extensible, multi-language editor focused just on editing code that's available on any *nix based operating system as well as other platforms. vi is a modal editor, meaning it works differently depending on the current mode. it operates in either insert mode where typing text appends it to the document or normal mode where keystrokes are interpreted as commands used to navigate and edit the document.

    your first challenge when using vim is learning the motions: h, j, k, l are used to move the cursor position up, down, left, and right. you can still use the arrow keys but vim masters will flame you saying things like: "you loose precious seconds (of your life) moving your hands from the home row to reach down for the arrows." like the motions, normal mode commands can be simple like w to jump forward a word. or more complex combinations of operators, counts and motions, for instance 2d3w deletes six words.

    vi style editors promote a keyboard focused workflow that doesn't rely on multiple simultaneous key presses or the mouse. which for shell users just makes sense. vim (Vi IMproved) is an extended version of the vi editor adding new modes like visual for highlighting and replace also known as overtype mode, among others. it also adds features like syntax highlighting, file completion and comparison (vimdiff), regular expressions, folding, compressed file editing, horizontal and vertical split or tabbed windows, multi-level branched undo/repo history, mouse support (for heretics) and a lot more.

    in normal mode ex commands are prefaced with a colon. depending on your settings, when you press : and start typing then press the tab key to activate the completion and suggestion engines. entering :w and pressing tab will give your suggestions like :wincmd, :write, :wq, and more. user defined functions must begin with a capital letter, and also will be available for completion. if you want to exit command input mode with out running anything press ^c (in this notation ^ is ctrl). when entering commands in a .vimrc file the colon notation is implied. for the rest of this article i will omit them from commands in that style. to get the master list of all ex commands enter help holy-grail.

    i think it's important to say: "vim is an editor, not an IDE". you can go wild extending vim with plugins and make vim into an IDE, but at it's core it's just an editor. use it how you like, but it's main goal is to edit text.

    help

    the mark of intelligence is not knowing everything, but knowing how to find the answers for yourself. my shell command history is littered with requests for man pages. i just ran vim .zhistory and %s/;man//gn, it yielded 15 results. so 1.5% of all my commands were asking for help. vim also has amazing documentation. enter the help command to view the help overview in a new buffer. the pages are just text so you navigate and search them as usual. you can search help with h pattern, if you set wildmenu tab completions will display a selectable list of suggestions.

    configurable

    for the most part, vi just works the way it's designed, while vim is highly configurable. many distributions include a basic config file, but user defined configurations are loaded from the .vimrc file in the home directory ~ of the user running the program. keep that in mind when running sudo vim or the more appropriate sudoedit (symlinks ftw). user configurations range from very simple vanilla ones to files hunderes of lines long brimming with comments, settings, custom key mappings, functions, plugins and the like. my vim guru taught me that when learning how to use vim you should start with a minimal configuration to learn how the editor itself works. then, when you gain a deeper understand, slowly begin to tweak it to your liking.

    it is common to first set nocompatible and enable vim's extended features, though in newer versions this is set automatically upon loading a user defined .vimrc file. other common settings include custom indentation sizes with shiftwidth, tabstop, and expandtab.

    you can also define your own commands to automate common tasks or quickly perform complex ones. one i use pretty often mapped to J is command J :%!python -mjson.tool this takes the contents of the current buffer and passes it to the python utility to pretty print a json file then reads back in it's results and replaces the current buffer with it's output.

    you can also remap commands and completely configure it to work exactly the way you like. i try not to use these because you tend to rely on them then get frustrated if they are not set or available in your current instance. early in my vim pilgrimage i was setting nnoremap ; : this allows you to prefix your ex commands with ; as opposed to the default :, i call it lazy shifting. but this would trip me up every time i was in vi. but since vim uses both ; and : things can get crazy quick. still, some swear by things like nnoremap <C-j> <C-w>j for faster and more semantic window movements. and vim gives you the freedom to do so.

    and this is just scratching the surface of what's possible. while i suggest looking at other peoples dotfiles and learning new things, i don't advise using someone else's exact .vimrc. you should understand, and want, every line in that file since it dictates exactly how your editor will function.

    since vim is configured by a simple text file, when it comes to editing on remote machines you can just use the default settings but it's trivial to add your own config file. you can copy+paste the contents manually, use a tool like curl or rsync to retrieve it and write it to a file curl -sL http://git.io/.vimrc-min-curl > ~/.vimrc, or if you are like me and keep your dotfiles under version control you can just do a git clone (and a sparse checkout if you only want one program's configs) and stow or symlink the files into place.

    extensible

    vim is endowed with a plugin system written in it's own language vimscript. it has a long history of working in different ways, but as of this writing vundle is the current standard. it allows you to install, remove, and configure plugins from your .vimrc file. the BundleInstall command will even clone all the necessary files from github or vim.org for you. plugins can be simple or very complex. the number of plugins and their complexity will effect load time, so keep it light. i often disable plugins when editing o(n remote machines.

    some of my favorite plugins include:

    gitgutter which shows a git diff in the 'gutter' (sign column). it shows whether each line has been added, modified, and where lines have been removed. you can also stage and revert individual hunks.

    in normal mode when selecting an opening brace or bracket { pressing the % key will move to it's matching closing character. the plugin matchit extends this base functionality adding support for matching by whole words, regular expressions, and other language specific items for html, latex and others.

    YouCompleteMe is a fast, as-you-type, fuzzy-search code completion engine. it's results hook into the omnicomplete system to provide semantic completions for many languages with the ability to configure to your needs.

    syntastic is a syntax checking plugin that runs files through user configured external linters and displays any resulting errors to the user. this can be done on demand, or automatically as files are saved.

    interface

    i personally like syntax highlighting. so setting syntax on is a must for me. depending on your terminal emulator vim can display from 16 to 256 colors. there are a lot of color schemes out there, i made my own called sourcerer. you add the files to ~/.vim/colors/ or put their contents directly in your .vimrc then set them with colorscheme sourcerer.

    line numbering can be another important tool when debugging. to display them use set number, or add a exclamation point as a negation set number! to disable them. another new option is set relativenumber which numbers the lines relative to the cursor rather than absolutely. you can jump to any line by entering it's number as a command. jump to line 10 with :10.

    another visual configuration is your statusbar. while the default is "satisfactory" to get the job done. most ricers configure a nicer one. you can write your own, but there is a lot to take into account. meta data about the file like name, type and encoding, vim's current mode, file modifiability, and other very complex things like placement if multiple buffer windows are visible. so most people use a plugin. powerline and airline are very popular but i prefer to use lightline to create a custom one. like others i use the background color of the filename section of the bar to represent the current mode. i also use fugitive to add git branch and status information to the bar.

    multiple files

    a buffer is the in-memory text of a file. you can have numerous buffers open at once. use ls to list the available ones. bn buffer next and bp buffer previous allow you to switch between them. bd buffer destroy will remove the current one.

    a window is a viewport of a buffer. use sp and vs to horizontally or vertically split the screen to display multiple buffers. pressing winc and a motion hjkl to move your focus. you can also use ^w and the arrow keys to move around. or press ^ww to cycle through them. you can resize windows with winc or ^w and <>-+= for left, right, up, down, and equally respectively. but since this is a single increment it's better to prefix it with a count like 30winc> or 30^w>.

    a tab is a collection of windows. tabe )will open a new tab. tabn tab next and tabp tab previous will let you navigate between them. as you can see the concept builds from buffers (files) to windows (groups of buffers) to tabs (groups of windows).

    shell commands

    you can execute shell commands within vim by prefixing the command with an exclamation point. to display the contents of your home directory enter !ls -lah ~/. when you are done press enter and you will return to your previous view. if you combine this with the read command you write the results to the current buffer. to input the current epoch time use r !date +%s.

    file searching

    to open a new file you can use the edit command. set wildmode=longest,list,full, wildmenu and wildignorecase vim will give you case insensitive tab completion for filenames. entering e ~/.vimr and pressing tab will almost definitely complete to e ~/.vimrc and if it can't it will show you suggestions for things like e ~/.vimrc.bak and allow you to cycle and select the approprate one.

    for finding files there is a built in directory viewer called Explore. you can use Sex, Vex, or Hex to open the explorer in a vertical or horizontal split or Tex to open in a new tab. but sometimes nothing beats using your normal tools. remember the shell is always just a ^z away. when you're ready to bring vim back to the foreground use the fg command. tools like ls and find can help you find what you're looking for quicker than just scrolling through a directory tree. the ls -R flag lists files recursively for quickly viewing larger directory trees. use a pager like less for multi-screen output. the find command allows to pass a name flag for filename pattern matching and iname for case insensitive matching. to find all markdown formatted readme files find -iname 'read*me.md'.

    to search the current buffer prefix your pattern with a slash /. your pattern can be a string or regex. some examples /find, /end.$ and /[0-9][0-9]. if you set hlsearch your search results will be highlighted. if you set incsearch highlighting will occur live as you type. pressing n for next and N for previous lets you navigate through matches. use nohl to clear current highlighting (you will use that one a lot).

    once again, when it comes to searching for text across multiple files there are better tools available in the shell than in your editor. grep is the classic for string and regex searching. use it's -R flag to search recursively and add the i flag to remove case sensitivity. you can also use the l flag to display the filename as opposed to the matching text. to find all files containing the phrase console.log in the www directory use grep -ilR console.log /var/www.

    understanding how to search with the standard utilities that will be available on any machine is important. but when it comes to local searching i have been using the silver searcher's ag command, which boasts being an order of magnitude faster than tools like grep, awk, and ack, it automatically ignores version control files, and patterns defined in .gitignore files. it's syntax is simple ag pattern location so to search for class notation in php files in a given folder ag '\$this->' ~/code/php -G php. the -G flag is pattern matching for file name and/or extension. the -c flag will display the file location and count of matches, i often pipe this into word count by line to get a count of the matching files ag -c something ~/some/where | wc -l.

    ag has it's own plugin adding the Ag command to vim. it's results are displayed in a quickfix window. set let g:ag_highlight=1 your search results will be highlighted in the buffers as you open them. thoughtbot gave me the idea of mapping backslash \ to ag with nnoremap \ :Ag<SPACE>. so / searches the current buffer and \ searches another location.

    random vim tips

    fix indentation

    gg=G

    in normal mode, typing gg=G will reindent the entire file. this is a special case where = is an operator. just like d or y, it will act on any text that you move over with a cursor motion command. in this case, gg positions the cursor on the first line, then =G re-indents from the current cursor position to the end of the buffer.

    remove trailing white space

    remove all trailing white space (replace with nothing)

    :%s/\s\+$//

    remove blank lines

    remove duplicate blank lines

    :g/^\s*$/d

    spellcheck

    toggle the spell checker

    :setlocal spell! spell?

    learning & tutorials

    musings from my vim guru z3bra

    interactive:

    videos:

    books:

    wrap up

    no editor or IDE will make you a better programmer. no plugins, linters, or refactoring tools will make you write better code. they're all just tools to assit your brain. learning vim's motions and modal editing style might increase your overall coding speed, or it might be too complex and just annoy you.

    inb4...

    something something evil mode

    emacs users

    your toolchain is a very personal thing, and you should use what works best for you. everything in this article is my opinion, and should be taken as such. others might agree or fervently dissagree with me. and that's fine. i just wanted to get my feelings out there about, what i consider, to be the best editor for programming.

    V4<table being topaz. most amiga ansi was created to accompany warez scene releases, so they were often not seen outside the underground. so members of the amiga crews would release "collys", which are a collection of works usually by a single artist. over time, the amiga scene has continued on using modern versions of their classic fonts and adding PC style colors to their work. while the PC scene still had heavy ties to the warez scene, many of the groups focused on BBS art and advertisements. because of the standard terminal size of 80 characters and a weird bug that corrupted the buffer if the last column was used, all ANSI art from this time period adhered to a strict 79col rule.

    acid underworld bulletins screen

    around this time, the modern internet was born. people began connecting to dial-up isp's to reach larger networks as apposed to dialing up individual computers. this pushed the BBS scene further underground than before. eventually, a new BBS standard was adopted allowing for these legacy systems to be reborn and reached once again via telnet (and eventually ssh). and that's where we are today.

    acid underworld ansi gallery

    while it's technically possible to use a standard unix {,like} terminal to connect to a modern bbs, it's better to use a tool specifically designed for BBS'ing. my personal tool of choice is syncterm. it runs on linux, {open,free,net}bsd, osx, and windows. it supports all connection methods including telnet, rlogin, ssh, RAW, zmodem, shell, and direct serial connections. it boasts copy/paste features along with username/password saving and auto-completion. and it's biggest feature, is support for automatically setting and switching between multiple SCENE FONTS!

    ansi art uses a meta data format called "SAUCE", developed by the legends of ACiD productions. the sauce file, among other things, contains info about what font the art should be rendered in. this allows the sysops to use both PC and AMiGA style artwork on their boards and let's your client decided how to correctly render it.

    bitsunrise games menu

    while there are not nearly as many active boards today as there were back then, most of the ones that are still around are super high quality. containing custom artwork, door games, live chat, and cross-board communications.

    my friend grisk of impure released this list of awesome active bbs' as of 2016. but i'll highlight some of my personal favorites:

    • "under the black flag" - blackflag.acid.org
    • "alcoholiday" - alco.bbs.io
    • "blood island" - bloodisland.ph4.se
    • "bit sunrise/bit sunset" - bitsunrise.com / bitsunset.com
    • "1984" - 1984.ws
    • "the yard" - theyard.dyndns.org

    since this is by and large and underground scene, it's historically been quite exclusive and difficult for people to "see". but with the thankless help of internet hoarders, there are now multiple textmode preservation networks. some simply offer direct download links, while others offer interactive galleries to view these works of art. i'd like to take a moment and thank maze for all his hard work on textmod.es. it's an amazing site hosting the artwork of multiple generations of scenesters.

    acid underworld logoff screen

    V $$P C- bbs_scenebbs scenethe roots of ansi/ascii artacid underword bbs circa 2018

    i've been a long time fan of text mode art. i got my first glimpse into that world back in the nineteen hundred and nineties, with groups like ACiD and remorse. back in pre-modern internet days we had to dial up a BBS (bulletin board system) to chat or download files. over time, these systems became either mail/chat hubs or w4r3z distros. because of the questionable legality of some of these releases a login system was added to all BBS' (though many supported a "guest" login"). some had open registration while others were invite only.

    acid underword bbs circa 2018

    i've been a long time fan of text mode art. i got my first glimpse into that world back in the nineteen hundred and nineties, with groups like ACiD and remorse. back in pre-modern internet days we had to dial up a BBS (bulletin board system) to chat or download files. over time, these systems became either mail/chat hubs or w4r3z distros. because of the questionable legality of some of these releases a login system was added to all BBS' (though many supported a "guest" login"). some had open registration while others were invite only.

    alcoholiday new files menu

    the warez scene lead the way with .NFO files and FILE_ID.DIZ, these where text files accompanying the release describing them as well as the group (and often board) providing them. these files will adorned with the early scene ASCII art. but in this age, the terminal programs you used to call the boards utilized the ANSI character set. a larger set of 256 character inherited from IMB's CP437, it also contained special ANSI escape sequences that allowed for color text with the 16 foreground and 8 background colors provided by your shell. forward thinking ASCII artists used this power to create colorful works of art to adorn the BBS.

    the scene pushed forward, and the people creating this art banded together and formed art collectives (or "crews") where they released their work in "artpacks". eventually these groups moved beyond BBS ad/screens/art and starting creating "art for art's sake". the height of this scene (strictly according to the number of packs released at that time) was 1997, with over 800 packs being released that year alone.

    under the black flag bbs circa 2018

    when it comes to the textmode scene, there were generally two groups based around hardware: the pc scene and the amiga scene. the amiga scene revolved around the commodore amiga. their releases are often seen more as "ascii art" since they were without color, and featured a number of different ANSI fonts. the most no*  B? %%5 impure_asciiimpure asciiamiga style text art

    i've joined up with yet another ansi/ascii art group, this time it's some amiga scenesters called iMPURE!aSCii 1940 aka iMP. i have a few pieces in their new artpack #63.

    x0 - impure / xero graffiti logo

    i've joined up with yet another ansi/ascii art group, this time it's some amiga scenesters called iMPURE!aSCii 1940 aka iMP. i have a few pieces in their new artpack #63.

    x0 - impure / xero graffiti logo

    impure / xero graffiti logo
    view full size: png / txt / ans

    x0 - fsociety mask

    mr.robot / fsociety mask
    view full size: png / txt / ans

    WY: +ICQ  zelda_ascii_artlegend of zelda ascii/ansi artas a member of blocktronics

    my love of ansi/ascii art has been growing lately. i've joined up with the prolific group blocktronics aka 67. my first scene release is in artpack #16 "block n' roll".

    x0 - legend of zelda, link ascii/ansi portrait

    my love of ansi/ascii art has been growing lately. i've joined up with the prolific group blocktronics aka 67. my first scene release is in artpack #16 "block n' roll".

    x0 - legend of zelda, link ascii/ansi portrait

    my piece is a greyscale portrait of link, from the legend of zelda games.
    view full size: png / txt / ans

    W+ W FWk 7!!S' black_flag_bbs_bannerblack flagbbs banner

    just a quick banner for my new friend hawk hubbard aka captain hood of under the black flag bbs!

    x0 - black flag

    just a quick banner for my new friend hawk hubbard aka captain hood of under the black flag bbs!

    x0 - black flag

    black flag
    view full size: png / txt / ans

    XN !!YkS blocktoberblocktoberblocktronics' halloween themed artpack

    blocktronics' new halloween themed artpack #17 "blocktober" has been released! and i have a few new color pieces in this pack!

    x0 - toxic skull

    blocktronics' new halloween themed artpack #17 "blocktober" has been released! and i have a few new color pieces in this pack!

    x0 - toxic skull

    toxic skull
    view full size: png / txt / ans

    XCi -!3? night_city_asciinight citytextmode pittsburgh

    here's a new piece of ansi/ascii art that's near and dear to my heart. it's a textmode art view of my town, pittsburgh! it's drawn with the classic AMiGA font topaz and released this with impure!

    x0 - night city ascii

    here's a new piece of ansi/ascii art that's near and dear to my heart. it's a textmode art view of my town, pittsburgh! it's drawn with the classic AMiGA font topaz and released this with impure!

    x0 - night city ascii

    night city
    view full size: png / txt / ans

    Wi  f ''G1# impure_bannerimpure bannergraffiti style ansi/ascii art

    here's a new banner for iMPURE!aSCii 1940 released in artpack #64

    x0 - impure banner

    here's a new banner for iMPURE!aSCii 1940 released in artpack #64

    x0 - impure banner

    impure banner
    view full size: png / txt / ans

    X~ /+-#o defcon25_ansi_artdefcon ansi art25th anniversary

    happy 25th anniversary to defcon!!1!#@~ i cant join you at the party, but my ansi art can!

    and if you're brave enough, i made a shell script banger version!
    curl -L http://git.io/defcon

    x0 - defcon25 banner

    happy 25th anniversary to defcon!!1!#@~ i cant join you at the party, but my ansi art can!

    and if you're brave enough, i made a shell script banger version!
    curl -L http://git.io/defcon

    x0 - defcon25 banner

    defcon
    view full size: png / ans

    X S !!A]c amish_ansiA.M.i.S.H.ansi masters in straw hats
    A.M.i.S.H or Ansi Masters In Straw Hats (pennsylvania german: amisch, german: amische) a group of traditionalist ansi artists with pennsylvania dutch origins. they are closely related to, but distinct from, blocktronics, impure and other "english" art groups. the AMiSH are known for simple living, dope ansi skills, and reluctance to adopt many conveniences of modern technology.

    tl;dr - amish is a joke acronym that misfit and filth came up with in the 90s. but once i met up w/ them we decided that with all three of us representing the western pa area, we should make their dreams a reality!

    here's a few of my subs to our inaugural artpack:

    x0 - amish banner

    misfit, filth, and xeR0 proudly introduce the ansi/ascii scene's new group AMi5H!

    according to textmod.es:
    A.M.i.S.H or Ansi Masters In Straw Hats (pennsylvania german: amisch, german: amische) a group of traditionalist ansi artists with pennsylvania dutch origins. they are closely related to, but distinct from, blocktronics, impure and other "english" art groups. the AMiSH are known for simple living, dope ansi skills, and reluctance to adopt many conveniences of modern technology.

    tl;dr - amish is a joke acronym that misfit and filth came up with in the 90s. but once i met up w/ them we decided that with all three of us representing the western pa area, we should make their dreams a reality! 717 represent!

    here's a few of my subs to our inaugural artpack:

    x0 - amish banner

    amish banner
    view full size: png / ans

    x0 - amish barn bomber

    barn bomber
    view full size: png / ans

    Yld}  pQ %-9{9 cthulhu_ansicthulhu ansi arth.p. lovecraft textart

    this cthulhu piece was a request from my friend dcat.
    i released it with blocktronics in their "darker image" artpack.

    x0 - cthulhu

    this cthulhu piece was a request from my friend dcat.
    i released it with blocktronics in their "darker image" artpack.

    x0 - cthulhu

    cthulhu
    view full size: png / ans

    Z* %ECo impure_trainall aboard the impure train!the widest ascii/ansi colly

    the newest impure artpack #67 has the incarnation of a conversion we had on irc. historically amiga collys are all vertical and lack color. since impure is already viewed as a "modern" crew for releasing in color and files wider than 80 columns... we decided why not make a modern colly?! and what's the perfect subject for a really really wide ansi? a train covered in graffiti of course!

    x0 - impure train preview

    the newest impure artpack #67 has the incarnation of a conversion we had on irc. historically amiga collys are all vertical and lack color. since impure is already viewed as a "modern" crew for releasing in color and files wider than 80 columns... we decided why not make a modern colly?! and what's the perfect subject for a really really wide ansi? a train covered in graffiti of course!

    x0 - impure train preview

    we actually first released this file as a demo at pittsburgh's demosplash 2017, winning 2nd place in the modern demo category! watch / download the demo.

    Z:`  l #%3== gutter_emaggutter e-magansi art zine piece

    i was honored to be requested to do a piece for filth^67^AMiSH's e-mag GUTTER.

    x0 - gutter e-mag

    i guess i went a bit literal with it...

    i was honored to be requested to do a piece for filth^67^AMiSH's e-mag GUTTER.

    x0 - gutter e-mag

    i guess i went a bit literal with it...

    Zm /#3m grandpa_dan_asciigrandpa danansi/ascii portrait

    recently my grandfather died. he meant the world to me. i have so many great memories of him growing up. i consider myself quite lucky to have had him in my life as long as i did. to honor his memory/grieve i decided to do an ascii/ansi art portrait of his younger self. this was released in the impure artpack #67 and was my first time using the microknight AMiGA font.

    x0 - grandpa dan portrait

    recently my grandfather died. he meant the world to me. i have so many great memories of him growing up. i consider myself quite lucky to have had him in my life as long as i did. to honor his memory/grieve i decided to do an ascii/ansi art portrait of his younger self. this was released in the impure artpack #67 and was my first time using the microknight AMiGA font.

    x0 - grandpa dan portrait

    grandpa dan portrait
    view full size: png / ans

    ZG  , G77_a blocktronics_starwars_artpackblocktronics starwarsdetention block AA-23

    blocktronics is back! this time with a new starwars themed artpack called "detention block AA-23"

    x0 - join the empire

    blocktronics is back! this time with a new starwars themed artpack called "detention block AA-23"

    here's a few of my subs

    x0 - join the empire

    join the empire
    view full size: png / ans

    x0 - deathstar

    deathstar
    view full size: png / ans

    Y  _ ++EQo demosplash_2016demosplash 2016pittsburgh's demoscene event

    x0 - demosplash

    since joining the textmode art scene, i've made lots of new friends. blocktronics and impure have both been more art collectives than a release groups. seeing the art other members are working on is very inspiring and, for the most part, the criticism is constructive. over time i've become friends with misfit and filth, all members of blocktronics who live in pretty close proximity to each other. this year we decided to meet up at pittsburgh's local demoscene event demosplash, and had a blast!

    x0 - demosplash

    since joining the textmode art scene, i've made lots of new friends. blocktronics and impure have both been more art collectives than a release groups. seeing the art other members are working on is very inspiring and, for the most part, the criticism is constructive. over time i've become friends with misfit and filth, all members of blocktronics who live in pretty close proximity to each other. this year we decided to meet up at pittsburgh's local demoscene event demosplash, and had a blast!

    a demoscene event of demoparty is an event that gathers demosceners and other {retro,} computer enthusiasts to view and compete in competitions calls "compos". the compos a party hosts very from event to event, but always include categories for demos, text art, and audio. depending on the entries ansi/ascii might be split into pc and amiga or combined. similarly smaller parties sometimes combine non-text graphics and music into an audio/video compo. but generally speaking the compos are usually:

    • retro demo
    • moden demo
    • freestyle graphics
    • freestyle ansi/ascii
    • fresstyle audio

    this was the first time i met misfit and filth irl. filth was gracious enough to host us at his house before and after the party. we all seems to instantly hit it off, like we were old time friends. we talked about the scene, how we got introduced to it, what made us get involved, our art motivations, opinions on other artists/groups/art styles/etc, and lots more. and the whole time we were drawing. both passing around a notebook/markers and a laptop equipped with pablodraw. we spent so much time chatting and drawing we were almost late for the compo! (update: this was the real formation of the A.M.i.S.H.)

    x0 - demosplash

    this was also my first time attending a demoparty, competing in a compo, or even really showing off my art to someone not on the other end of the internet. we strolled into the party just in time, acting like we owned the place. and we did! our crew blocktronics took the top 8 spots in the compo, and i personally took third place!

    they handed the new friends a pile of trophies and we headed back to filth's place to celebrate with the spoils of victory!

    x0 - demosplash

    X L ++9WO demosplash_2017demosplash 2017pittsburgh's demoparty

    x0 - demosplash pretzels are traditional

    last year we had such a good time at demosplash that misfit, filth, and myself decided to do it again!

    x0 - demosplash pretzels are traditional

    last year we had such a good time at demosplash that misfit, filth, and myself decided to do it again! this time i decided to compete in both the ansi/ascii compo but in modern demo as well! hellbeard, the leader of impure, and i created a modern amiga colly that scrolls horizontally. so we decided to write a program to animate it. read/watch/download our demo: "all aboard the impure train".

    x0 - demosplash impure train live

    we won 2nd place. modern demo is a hard category for an animated ansi/ascii to compete in. congrats to the winners :D

    i was a little bit disapointed by the lack of ascii art flavor in last year's results file. so year year i made them a new one. (they changed my header font, but that's ok i guess, it's there party afterall)

    x0 - demosplash misfit w/ the 2nd place trophy

    like last year, we partied, chatted, drew, and had an awesome time! american demoscene is still a small affair compared to it's european counterparts. i invite everyone to join us next year and help make the event ever better!

    x0 - demosplash misfit w/ the 2nd place trophy

    Zconnection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler); connection.connect(null); } private function netStatusHandler(evt:NetStatusEvent):void { switch (evt.info.code) { case "NetConnection.Connect.Success": stream = new NetStream(connection); stream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncErrorHandler); video = new Video(); video.attachNetStream(stream); stream.play("lupinIII-s2e002-buns.guns.and.fun.in.the.sun.flv"); label.htmlText ="x-e.ro presents... \n lupin the 3d\n buns guns and fun in the sun"; break; case "NetStream.Play.StreamNotFound": label.text="flv not found..."; break; case "NetStream.Play.Stop": //loop video stream.seek(0); break; } } // _______________________________________________________________________ // event handlers private function asyncErrorHandler(evt:AsyncErrorEvent):void { } private function securityErrorHandler(evt:SecurityErrorEvent):void { label.text="security error..."; } // _______________________________________________________________________ // init3D private function init3D():void { this.container = new Sprite(); addChild(this.container); this.container.x = this.stage.stageWidth / 2; this.container.y = this.stage.stageHeight / 2; scene = new MovieScene3D( container ); camera = new Camera3D(); camera.z = -planeSize; camera.focus = 1000; camera.zoom = 1; bmpData = new BitmapData(TEXTURE_W,TEXTURE_H,false,0xff0000); material = new BitmapMaterial(bmpData); material.oneSide = true; planeObj = scene.addChild( new Cube( material, planeSize, planeSize, planeSize, segment, segment, segment) ); } // _______________________________________________________________________ // loop3d private function loop3D( event:Event ):void { valx -= 0.2; valy -= 0.5; planeObj.rotationY = valx; planeObj.rotationX = 35; video.attachNetStream(null); bmpData.draw(video); video.attachNetStream(stream); var filters:Array = new Array; filters.push(new GlowFilter(0xFFFFFF, 1, 10, 10, 10, 1)); filters.push(new DropShadowFilter(70, 55, 0x000000, 0.5, 9, 9, 1, BitmapFilterQuality.HIGH)); /* var blur:Number = 10*Math.sin( (++count/25) ); if(blur > 0){ filters.push(new BlurFilter(blur,blur,BitmapFilterQuality.HIGH)); } */ planeObj.container.filters = filters; this.scene.renderCamera( camera ); } // _______________________________________________________________________ // onStageResize private function onStageResize(event:Event):void { this.container.x = this.stage.stageWidth / 2; this.container.y = this.stage.stageHeight / 2; } }

    p.s. happy birthday to me!

    Fdu understand how connection strings are built, write your own other wise will can use the visual studio database tool to do that for us.

    configure database

    visual studio 2005 has a tool for connecting to a database called a "sqlDataSource". while this tool works, i find myself wanting to create the connection and build or execute stored procedures within my own C# code. this tutorial will show you how to connect to a sql database 3 different ways in asp.net

    the first thing is creating a connection with your database. if you understand how connection strings are built, write your own other wise will can use the visual studio database tool to do that for us.

    configure database

    drag a new sqlDataSource onto the canvas, highlight it, then click the little arrow that appears to reveal configure datasource. in the windows that follow you can create a new database connection or use an existing one. refresh the server list and select your database server or use localhost. then choose if you want to use windows integrated security (where the server is the database user) or sql server security (where you supply the sql username and password). then select the database you want to connect to on the server, and test your connection.

    select database

    press ok, and you will return to the previous window, click the little plus sign to expand and show the connection string that visual studio generated for you. copy it, and click cancel. now you can delete the sqlDataSource and switch to code view.

    database connection

    now the first thing we need to do is create a database connection in our code:

    SqlConnection con = new SqlConnection("Data Source=DEVELOPMENT;Initial Catalog=rss;Integrated Security=True");
    


    hardcoded procedure:

    int id = 13;
    con.Open();
    //---create procedure
    string select = "SELECT * FROM 'table' WHERE 'id' = @ID"; 
    SqlCommand command = new SqlCommand(select, Con); 
    //---paramerter adding
    command.Parameters.Add("@ID", SqlDbType.Int).Value = id;
    //---make a data reader
    SqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) { 
       String data = reader["thing"].ToString();
    }
    //---close connection
    con.Close();
    


    using a stored procedure with one parameter
    (e.g. "DELETE 'tabelname' WHERE 'id' = @ID; ")

    int id = 42;
    con.Open();
    //---setup query
    SqlCommand commando = new SqlCommand("deleteUser", con);
    commando.CommandType = CommandType.StoredProcedure;
    //---paramerter adding
    commando.Parameters.Add("@ID", SqlDbType.Int).Value = id;
    //---execute the query
    commando.ExecuteNonQuery();
    //---close connection
    con.Close();
    


    using a stored procedure without any parameters
    (e.g. "SELECT * FROM 'tabelname'; ")

    con.Open();
    //---select a stored procedure
    SqlCommand commander = new SqlCommand("getFilename", con);
    commander.CommandType = CommandType.StoredProcedure;
    //---make a data reader
    SqlDataReader SQLreader;
    SQLreader = commander.ExecuteReader();
    while (SQLreader.Read()) {
       //---select data by array index
       String data  = SQLreader[0].ToString();
       //---select data by sql collumn name
       String data2 = SQLreader["name"].ToString();
    }
    //---close connections
    SQLreader.Close();
    con.Close();
    
    F9hP + Q) that are used in the algorithm to define the knot. in general, given P + Q mutually prime, the line wraps meridionally around the torus P times and wraps the longitudinally around it Q times. i was having some trouble grasping exactly how this was going to be achieved, until i read this article on blackpawn’s website. he really breaks down the algo to a very simplistic level...

    papervision3D PQ torus knot

    here we go again, another papervision3D demo featuring math permeated lines. this time im working with a classic piece of code known as the PQ torus. the vague idea is that you have 2 numbers (P + Q) that are used in the algorithm to define the knot. in general, given P + Q mutually prime, the line wraps meridionally around the torus P times and wraps the longitudinally around it Q times. i was having some trouble grasping exactly how this was going to be achieved, until i read this article on blackpawn’s website. he really breaks down the algo to a very simplistic level...

    calculus

    r = .5 * (2 + sin(Q * Φ))
    x = r * cos(P * Φ)
    y = r * cos(Q * Φ)
    z = r * sin(P * Φ)

    simple right? lol.
    so Φ (or phi in my code) is basically a variable that is definded by change. in this case, im simply incrementing phi + .02 every frame. this seeds the math and gives you the cool visual effect.

    anyway, after getting a handle on the math, writing the demo code was a snap. i took the existing code i wrote from the 3D object tracer and the lorenz attractor and combined them. (i also found + fixed an error for computing the line gradient color) i started out by allowing the users to only select values for PQ and that actually made sense.

     

    papervision3D PQ torus knot

    papervision3D PQ torus knot

    but after some experimentation i found that using some unorthodox values for P+Q could net some very interesting results. take a look at some of these...

    papervision3D PQ torus knot

    papervision3D PQ torus knot

    papervision3D PQ torus knot

    papervision3D PQ torus knot

    click here to check out the demo
    and click here to view the source

    HTDwill open a new tab. tabn tab next and tabp tab previous will let you navigate between them. as you can see the concept builds from buffers (files) to windows (groups of buffers) to tabs (groups of windows).

    shell commands

    you can execute shell commands within vim by prefixing the command with an exclamation point. to display the contents of your home directory enter !ls -lah ~/. when you are done press enter and you will return to your previous view. if you combine this with the read command you write the results to the current buffer. to input the current epoch time use r !date +%s.

    file searching

    to open a new file you can use the edit command. set wildmode=longest,list,full, wildmenu and wildignorecase vim will give you case insensitive tab completion for filenames. entering e ~/.vimr and pressing tab will almost definitely complete to e ~/.vimrc and if it can't it will show you suggestions for things like e ~/.vimrc.bak and allow you to cycle and select the approprate one.

    for finding files there is a built in directory viewer called Explore. you can use Sex, Vex, or Hex to open the explorer in a vertical or horizontal split or Tex to open in a new tab. but sometimes nothing beats using your normal tools. remember the shell is always just a ^z away. when you're ready to bring vim back to the foreground use the fg command. tools like ls and find can help you find what you're looking for quicker than just scrolling through a directory tree. the ls -R flag lists files recursively for quickly viewing larger directory trees. use a pager like less for multi-screen output. the find command allows to pass a name flag for filename pattern matching and iname for case insensitive matching. to find all markdown formatted readme files find -iname 'read*me.md'.

    to search the current buffer prefix your pattern with a slash /. your pattern can be a string or regex. some examples /find, /end.$ and /[0-9][0-9]. if you set hlsearch your search results will be highlighted. if you set incsearch highlighting will occur live as you type. pressing n for next and N for previous lets you navigate through matches. use nohl to clear current highlighting (you will use that one a lot).

    once again, when it comes to searching for text across multiple files there are better tools available in the shell than in your editor. grep is the classic for string and regex searching. use it's -R flag to search recursively and add the i flag to remove case sensitivity. you can also use the l flag to display the filename as opposed to the matching text. to find all files containing the phrase console.log in the www directory use grep -ilR console.log /var/www.

    understanding how to search with the standard utilities that will be available on any machine is important. but when it comes to local searching i have been using the silver searcher's ag command, which boasts being an order of magnitude faster than tools like grep, awk, and ack, it automatically ignores version control files, and patterns defined in .gitignore files. it's syntax is simple ag pattern location so to search for class notation in php files in a given folder ag '\$this->' ~/code/php -G php. the -G flag is pattern matching for file name and/or extension. the -c flag will display the file location and count of matches, i o  /1-K /1-mG xerostyle_youtubexero style youtubemy personal vlog

    xero style brutal logo i s  11-MG xero_style_youtua 11-gm xero_style_youtubexero style youtubemy personal vlog

    i started my youtube channel in 2006. my 1st uploads are vintage metroid commercials, some lsdj music, circuit bending and some random code art.

    but on dec 5th 2020, i uploaded my first vlog and i just kept uploading. talking about stuff i like and was working on. eventually, i made a pocket dump video. talking about my EDC, or every day carry. pouches, patches, knives, flashlights, and other "pocket trash". and i found my voice and community... https://youtube.com/xerostyle

    xero style brutal logo i started my youtube channel in 2006. my 1st uploads are vintage metroid commercials, some lsdj music, circuit bending and some random code art.

    but on dec 5th 2020, i uploaded my first vlog. i talked about my struggles with whipple's dieases and my recovery process. so many people had asked about my sickness, that i made the vid to just send to people and not have to say it all over again.

    but we were in the midst of lockdowns, and i missed just chatting with people. so i just kept uploading. talking about stuff i like and was working on. eventually, i made a pocket dump video. talking about my EDC, or every day carry. pouches, patches, knives, flashlights, and other "pocket trash". and i found my voice and community.

    as of writing i have over 150 vlogs, 2700+ subscribers, and counting! i try to post a new vid weekly. come check it out at youtube.com/xerostyle or https://xero.style


    fn+ . pbTE6'whYA2# j [ L = .  3category42.0082category42.007 1tag54 0tag49 /tag40 .tag23-category45.005 ,tag9 +tag13 *tag11 )tag57(category45 'tag60 &tag9%category45.005 $tag58 #tag38 "tag13 !tag59 category44.002 tag59 tag58 tag26category46.002category45.004 tag22 tag28 tag5 tag56 tag35 tag55category45.004 tag56 tag35 tag55 tag9 tag3 tag20 !tag57 .tag57 0tag57 4tag57 8tag57category45category46.002 tag57t demo here
    view the demo source

    so that wasn't enough.
    i decide that i wanted to trace the actual papervision3D logo. and since i have already made it in a font, it wasn't hard at all. working with the optimized version of the font on my site worked fine, but since there were so few verticies, the script would draw the logo in a matter of seconds. so instead of trying to devise a method of tweening from vertice to vertice i just went into font lab and added more points! 

    (the font used in this demo is available here)

    pv3d logo font

    now, i went into 3D studio max, clicked the "splines" button, and created a new text object. i used the new PV3D.Flex.Font i just made, set the size to 100 (larger/smaller is fine) and typed in the letter "A" (the only character in the font).

    3D text object

    after that i used the rotation tools to stand the letter upright, and moved it forward some. the next step is to do a mesh select, by clicking the modifiers tab and selecting "mesh select" from the dropdown menu. then in the mesh select parameters panel select vertices. now click back into your main perspective and select all the vertices (ctrl+a).

    mesh select

    the next step is an important one ((and the one i always forget)) we need to give our 3D object a uvw mapping. still under the modifiers tab, select "UVW Mapping" from the dropdown list. and under the parameters panel make sure its mapping mode is set to "Planar". i was having all kinds of trouble exporting 3D objects that were based on points only. seraf explained to me that w/o a uvw mapping on your object the as3geomClassExporter cant map the u and v points onto the triangle mesh, which are needed for texturing purposes.

    UVW wrap

    now its time to export our 3D logo, click on the tools tab and select max script, then run the as3geomClassExporter. set your package folder and the actual class name, then select papervision3D 2.0 from the dropdown list. for this particular object i left the scale set to 1. then click export class and save it in the same folder as you set in your package. 

    export

    then its onto flex.
    i decided i wanted to use the math-based color fade from my last demo again, so i couldn't use the standard color picker. this demo uses 2 states, normal and the color picker. which is just a 2nd state with a panel object w/ blank flex buttons on them. using the flex buttons worked out well because i was able to just set the color gradient to the same colors in the fade, or just solid ones for the normal sets. i tried to make is one a simple as possible so you can understand the core concepts of what's going on more than the over-all "flashy-ness" of the thing. so enjoy!

    click here to view the demo
    and its source of course!

    G. .,, ',' ,,,,,,,,,,, ,,,,,,,,,,,' ,,,,,,,, _ __ _ _ 7CC=, '|CC$ ,$CCCCCCCCC%.%CCCCCCCCCCC7|' ,(CCCCCCCCCC|, | '_ \| | | | 77=77|. ,77==3 ,3=========$.$===========777.*C7==========7J' | | | | | | | C7===77* '(C====$.,3===777777%.$===7777777===J!J====777777====C _| | | | |_| | C7====77|. *77=====$.,3===$77777C $===3C7777$===J(3===C37777$====C(_)_| |_|\__,_| ', C7======77!=C=======3.,3===%****** $===3|****$===J7$===CC****3====C *77======777======77|.,3===$!!!!!! $===3(!!!!$===J!J===C7,,,,J====C ,*(C7============7(!*.,3===JCCCCC3.$===CCCCCCJ==7J'J===C(.' C====C ,**!7C=========77|***.,3=========$.$============J* J===C( . C====C .,*|77=========77(*,' ,3=========$.$============7= J===C( C====C '(C=============7=, ,3===3CCCCC3 $===JJCCCC3===J!J===C( C====C ' ,=7=======J7========! ,3===%****** $===3|****$===J!J===C( C====C 77======77!=77======3 ,3===%|||||| $===3!,,,,$===J!J===C7****J====C C7====7C(***|77=====3 ,3===C77777$.$===3' 3===J!J===7C7777C====C C7===7=!******(77===$.,3=========$.$===3' 3===J!7C============J( , C777C|***,.'***!7777$.,$777777777%.%777$' 3777J!*7J7777777777J7' (77=***,' .,***(777.'C777777777J C777C' 7777C,,*!=77777777=**' ,*****'. '******..*********** *****. ,****..************** ,***,. .,****..*********** *****. ,****. .',********,'. : . .... .... ........... ..... .... ........ . P R E S S S T A R T B U T T O N . ' . ,. . , ' .' ' ' .' .**. ., ,' .**. . . . . . ,!**.. . . . . . . .', . . .!,.. . . . . . ,!**.. **,*,*,***,**,,*,*****,*,**,*,,*,**,*,,*,**,*,**,**,*,*****,*,*,***,*,*,***,**,,*,*****,*,**, !***!*!!!***!**!!***!**!!***!**!!***!**!!******!!!*****!!!***!*!!!***!*!!!***!**!!***!**!!*** !!!!**!!*!!!**!!*!!!**!!*!!!***!*!*!***!*!*!***!*!!!***!!!!!***!!!!!!**!!*!!!**!!*!!!**!!*!!! |!!!!!!|||!!!!!|||!!!|!|||!!!|!|||!!!|!|||!!!|!|||!!!|!!||!!!!!!||!!!!!!|||!!!!!|||!!!|!|||!! (|(|(!||||(|(|||||(|(|||||((((!|||(|((!|||||((!|!||||(!|!(|||=!|!(|(|(!||||(((|||||(|(|||||(| =(((=!((=(((=|(((=((=||((=((=||(|7((=||((7((((|((=((((!((=((((!((=(((=!((=(((=|(((=((=||((=(( |=|7(=!(|=(=(=|(!=(===|(!=((==|=!==(==|(!(=(=((||(=|7((||(=|7((!(|=|7(=!(|=(=(=|(!=(===|(!=(( ===7|=||===C|=||(==C|=|(|==J|=!=|==J|(|(|==C((|(!==7=|((!==7=|=(!===7|=||===C|=||(==C|=|(|==J 7|C((C|!=|7(|J|!=(7=|3(|((==!J||((=7!J(||=(7|C=||=(C|77|!=|C|=C|!7|C((C|!=|7(|J|!=(7=|J||((== =7|||(||=7(||(||(=(||(||(==|!(|||==|!(|||=7||(|||=7||(|||=7||||!|=7|||(||=7(||(||(=(||(||(==| 377C$=|C3C7C$7|7JC7C37|=JJ7C3C|(JJ7CJJ|(JJ7CJ3(|J377J3(|C377C$(|C377C$=|C3C7C$7|7JC7C37|=JJ7C (7=||==!(7=(|=7!(7=(|(7!(77(||C!(=7(||C!|=7(||C||=7(||7||=7(||7(!(7=||==!(7=(|=7!(7=(|(7!(77( (=7!(=7|(=7|((7||=7|((=(!=7|((==*=7(|(==*=7(|(=7!===|(=7!===!(=7!(=7!(=7|(=7|((7||=7|((=(!=7| 377C$=|C3C7C$7|7JC7C37|=JJ7C3C|(JJ7CJJ|(JJ7CJ3(|J377J3(|C377C$(|C377C$=|C3C7C$7|7JC7C37|=JJ7C (7=||==!(7=(|=7!(7=(|(7!(77(||C!(=7(||C!|=7(||C||=7(||7||=7(||7(!(7=||==!(7=(|=7!(7=(|(7!(77( 9( tiny dab of solder from your iron to connect them. after all your wires are attached, wrap each of them individually, then wrap the entire bundle of wires.

    gameboy keyboard cable complete

    using the keyboard
    step one is actually syncing the keyboard to LSDj. insert the link cable you hacked onto the keyboard into the gameboy and load LSDj. press SELECT+UP and go to the PROJECT screen. move the cursor down to the SYNC dialog, and press A+RIGHT until you selection is KEYBD. notice just to the right of PURGE SEQUENCER an integer prefixed by an "I" appears. if nothing is synced to LSDJ/the gameboy this will display I00. once a device is successfully synced, this will be a larger integer (e.g. I01, I02). my keyboard oddly enought syncs as I06. 

    LSDj project screen

    making some noise
    to get some sounds to play when pressing keys on the keyboard, the sequencer must already be running. (press START) the notes you play will be played back on the next step in the phrase sequencer. if you need to get faster response timings, use a faster groove for the phrase you are playing.

    LSDj phrase screen

    an important feature of LSDj, that is easily overlooked, is when the sequencer is running the notes and instruments playing for each channel are displayed on the top right of the SONG screen. this can help a lot when you’re playing around and press the octave or instrument buttons up and down a bunch of times looking for something, and you get lost in the menus. this brings me to the one negative about the LSDj keyboard interface. every once in a while the instrument your playing will jump up or down like ten positions. i think the problem is related to pressing multiple keys too rapidly. i am not the only person to report this problem. technically the gameboy's z80i sound chip is playing each channel one note at a time in such a rapid succession it "tricks" the ear into thinking it's hearing them simultaneously. that's just how gameboy music works. and i think smashing keys on the keyboard can sometimes send multiple input messages per cycle in LSDj and glitches it, but that diagnosis is purely conjecture. and that random issue happens so rarely it's not a big deal. the interface is not perfect, but it's an easy mod, hacky, fun, and adds a new twist to LSDj.

    LSDj keyboard key chart

    key mapping
    SPACE play using custom table
    F1/F2 octave down/up
    F3/F4 instrument down/up
    F5/F6 select custom table to assign to SPACE
    F8 change pulse instrument playback channels (PU1, PU2, PU1+2)
    F9-F12 toggle channel mute (switches on key press)
    CTRL + (F9-F12) tap channel mute (switches on key press and release)

    demo video

    KU4@t starts with a period or full stop character is considered hidden, and in a default view will not be displayed. thus the name dotfiles.

    it's been said of every console user:

    you are your dotfiles

    ok, i said that ;P

    since they dictate how your system will look and function.

    i manage mine with gnu stow, a free, portable, lightweight symlink farm manager. this allows me to keep a versioned directory of all my config files that are virtually linked into place via a single command....

    preview of xero's shell

    table of contents

    in the unix world programs are commonly configured in two different ways, via shell arguments or text based configuration files. programs with many options like text editors are configured on a per-user basis with files in your home directory ~. in unix like operating systems any file or directory name that starts with a period or full stop character is considered hidden, and in a default view will not be displayed. thus the name dotfiles.

    it's been said of every console user:

    you are your dotfiles

    ok, i said that ;P

    since they dictate how your system will look and function. to many users (see ricers and beaners) these files are very important, and need to be backed up and shared. people who create custom themes have the added challenge of managing multiple versions of them. i have tried many organization techniques. and just take my word for it when i say, keeping a git repo in the root of your home directory is a bad idea. i've written custom shell scripts for moving or symlinking files into place. there are even a few dotfile managers, but they all seem to have lots of dependencies. i knew there had to be a simple tool to help me.

    managing

    i manage mine with gnu stow, a free, portable, lightweight symlink farm manager. this allows me to keep a versioned directory of all my config files that are virtually linked into place via a single command. this makes sharing these files among many users (root) and computers super simple. and does not clutter your home directory with version control files.

    installing

    stow is available for all linux and most other unix like distributions via your package manager.

    apt install stow
    brew install stow
    dnf install stow
    pacman -S stow
    yum install stow
    

    or clone it from source and build it yourself.

    how it works

    by default the stow command will create symlinks for files in the parent directory of where you execute the command. since i keep my dots in: ~/.local/src/dotfiles and all stow commands should be executed in that directory and suffixed with -t ~ to target the home directory. otherwise they will end up in ~/.local/. if you wanna make things easier on yourself you can clone the repo to ~/dotfiles then run commands with no flags. but who likes things easy in the unix world ;P

    to install configs execute the stow command with the folder name as the first argument, then target your home directory (or wherever you like).

    to install my zsh configs use the command:

    stow zsh -t ~

    this will symlink files like .zshrc to ~/.config/zsh

    to install the fun scripts to /usr/local/bin execute the command:

    stow fun -t /usr/local/

    this will symlink the fun scripts like food to /usr/local/bin.

    notice that the location of the scripts has appended a bin folder? that's b/c stow creates or uses the exact folder structure of the repo. and the food script is located at /fun/bin/food in this repo.

    note: stow can only create a symlink if a config file does not already exist. if a default file was created upon program installation you must delete it first before you can install a new one with stow. this does not apply to directories, only files.

    more notes on using/understanding stow in this github issue.

    my dotfiles setup

    to fully "install" and setup my dotfiles repo run the setup script or something like this:

    git clone git@github.com:xero/dotfiles.git ~/.local/src/dotfiles &&
    	cd ~/.local/src/dotfiles &&
    	stow bin fun git gpg ssh tmux neovim zsh -t ~
    
    # tmux
    mkdir ~/.config/tmux/plugins &&
    	git clone --depth=1 https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm &&
    	~/.config/tmux/plugins/tpm/scripts/install_plugins.sh &&
    	cd ~/.config/tmux/plugins/tmux-thumbs &&
    		expect -c "spawn ./tmux-thumbs-install.sh; send \"\r2\r\"; expect complete" 1>/dev/null
    
    # nvim
    mkdir ~/.local/nvim &&
      git clone --filter=blob:none --single-branch https://github.com/folke/lazy.nvim.git ~/.local/share/nvim/lazy
    nvim --headless "+Lazy! sync" +qa
    nvim --headless "+MasonUpdate" +qa
    
    # creating ~src and ~dotfiles aliases"
    sudo useradd -g src -d ~/.local/src src
    sudo useradd -d ~/.local/src/dotfiles dotfiles
    

    tl;dr

    navigate to your home directory

    cd ~

    clone the repo:

    git clone git@github.com:xero/dotfiles.git

    enter the dotfiles directory

    cd dotfiles

    install the zsh settings

    stow zsh

    install zsh settings for the root user

    sudo stow zsh -t /root

    uninstall zsh

    stow -D zsh

    etc, etc, etc...

    terminal emulator

    recently i've been using an 11" m1 ipad pro and a bluetooth 68% mechanical keyboard, usually on my lap, as my main computer. i use the community edition of the blink shell connected to a vps.

    when it comes to fonts i've been using hack (i use a mod w/ extra icons for extended unicode and emoji support.) it's included in base64 encoded css form, along with color schemes, in the blink directory.

    run blink config under appearance, set the screen mode set to cover then setup your server identity and keys. beyond that the only command i ever run in blink is mosh x. x being my server alias.

    vps & local clipboard

    idk why, but i chose debian 11 on aws for some r> duster and some glass cleaner on a paper towel. clean out all the little dirty recesses between and in the keys. if your keyboard is old like mine was, this step can take a while ;D

    soft circuits

    some of the soft plastic circuits can get a little dirty or folded, clean them as well and make sure they will align correctly when you put everything back. if you have never taken apart a keyboard before, it's very interesting...

    wire labeling

    now take a look at the daughter board from the keyboard. if you’re lucky, like i was, each of the wires leading to the cables from the board will be labeled. if they are not labeled, you’re going to have to cut the end of the mini-din connector off and look at what color wire attaches to which pin number.

    painting

    step six is painting they keyboard. this step is optional. i used regular spray paint on the exterior plastic casings. i painted it all one coat of green, then splattered it slightly with a darker green. for the keys i wanted to make sure they had a less tacky feel, so i painted them with paint-markers. you can get them at an art/craft store or at some office supply stores, i like the "painters" brand. i painted the piano keys white and black and the LSDj interface keys i painted green.

    prep for soldering

    step seven is prepping your tools for soldering. clean your soldering iron with some steel wool and set it to medium/low heat. you'll need flux, wire strippers, and something to wrap your wiring with. you can use heat-shrink tubing, electrical, or duct-tape. step eight is cutting the wires from both your gameboy link cable and the keyboard. then peel apart each of the wires and strip about 1/8" off each wire. use an x-acto knife to peel back the cable shielding.

    LSDj keyboard wiring diagram

    step nine is reviewing the wiring diagram. click here to download it. you will be connecting data, clock, power, and ground wires from both the keyboard and the gameboy link cable.

    LSDj wires spliced and wrapped

    step ten is soldering the wires. wrap the wires from each cable together and dip them in flux. then add aAtp://www.nonelectronics.com/catalog/index.php?main_page=product_info&cPath=8&products_id=10&zenid=1829a677d9d350c5bc6e8d5eae5846d3" target="_blank">powered link cables and 4 player adapters at his shop nonelectronics.com.

    classic HP keyboard

    the first thing you need is an old keyboard. for this mod you need a mini-din, aka a ps2 (not playstation 2), keyboard. i used an old hp ibm keyboard i pulled out of a dumpster at work. step one is testing it. plug it into a computer, open a text editor, and press all the keys. try tapping them very fast and see how often they actually fire. the responsiveness of the keys in this setting will be relative to their sensitivity in LSDJ.

    pop off the keys

    step two is popping off all the keys. use a flat head screw driver and stick it in the ridge beside the key then push the screw driver up like a lever. the key should just pop right off. repeat this process for all the normal keys. when you get to the spacebar and some of the other odd shaped keys, like enter, you might find springs or metal wires pressing two points on the keyboard. try and take note of their positioning, because you will need to put them back that way.

    piles of keys

    now you should have a piles of keys and a bare keyboard. throw all the keys in a bag, so you don't lose any, and flip the keyboard over. step three is unscrewing the keyboard, prying open and removing it's plastic covering.

    unscrew the daughter board

    carefully keep taking the keyboard apart. every model is slightly different, so pay attention so you can reassemble it. eventually you will see a small silicon daughter board with the cable attached. step four is removing the daughter board. unscrew the board from the innards of the keyboard and set it somewhere safe, like in an anti-static bag.

    a keyboard in pieces

    now that you have all the plastic removed, separate all the different parts and note how they were oriented in the casing.

    clean everything out

    step five is cleaning everything up. i just used air most, i wore a wedding ring. mine was made of black hematite. but typing for a living made it so uncomfortable to wear i had to stop. even though nina assured me it was fine, i always felt bad not publicly displaying our love and commitment to one another. so i struck out on a quest to find a symbol i felt represented it.

    unicursal hexagram wedding tattoo

    i've always wanted knuckle tattoos. in my youth i thought of being like OZZY and getting XERO. i considered CODE/HACK as a modern day spoof on the ago old classic GOOD/EVIL. but more than anything, i struggled over typography.

    when i first got married, like most, i wore a wedding ring. mine was made of black hematite. but typing for a living made it so uncomfortable to wear i had to stop. even though nina assured me it was fine, i always felt bad not publicly displaying our love and commitment to one another. so i struck out on a quest to find a symbol i felt represented it.

    the unicursal hexagram is a six-pointed star that can be traced or drawn unicursally, in one continuous line rather than by two overlaid triangles. in projective geometry, pascal's theorem (aka hexagrammum mysticum, latin for mystical hexagram) states that if six arbitrary points are chosen on a conic (which may be an ellipse, parabola or hyperbola in an appropriate affine plane) and joined by line segments in any order to form a hexagon, then the three pairs of opposite sides of the hexagon (extended if necessary) meet at three points which lie on a straight line, called the pascal line of the hexagon, named after blaise pascal. the theorem is also valid in the euclidean plane, but the statement needs to be adjusted to deal with the special cases when opposite sides are parallel. [more]

    wikipedia
    unicursal hexagram tutorial

    in mathematical knot theory, 74 is the name of a 7-crossing knot which can be visually depicted in a highly-symmetric form. the simplest interlaced version of the buddhist endless knot symbol is topologically equivalent to the interlaced version of the unicursal hexagram of occultism. however, the endless knot symbol has more complex forms not equivalent to 74, and both the endless knot and unicursal hexagram can appear in non-interlaced versions, in which case they are not knots at all.

    endless knot examples

    the 74 knot is a lissajous knot, representable by the parametric equation:

    x = cos(2t + 0.22)
    y = cos(3t + 1.1)
    z = cos(7t)
    

    sacred geometry texts describe the perfectly symmetrical, mirrored interlocking triangles as symbols of the union of masculine and feminine, earth and sky, joined together harmony. an infinite recursive star, the perfect mathematical representation of our love.

    so when my buddy josh "pimp hand" hayward was back in town, i sat down in the chair w/ him at jester's court tattoo in the southside to make it permanent.

    f-ften pipe this into word count by line to get a count of the matching files ag -c something ~/some/where | wc -l.

    ag has it's own plugin adding the Ag command to vim. it's results are displayed in a quickfix window. set let g:ag_highlight=1 your search results will be highlighted in the buffers as you open them. thoughtbot gave me the idea of mapping backslash \ to ag with nnoremap \ :Ag<SPACE>. so / searches the current buffer and \ searches another location.

    random vim tips

    fix indentation

    gg=G

    in normal mode, typing gg=G will reindent the entire file. this is a special case where = is an operator. just like d or y, it will act on any text that you move over with a cursor motion command. in this case, gg positions the cursor on the first line, then =G re-indents from the current cursor position to the end of the buffer.

    remove trailing white space

    remove all trailing white space (replace with nothing)

    :%s/\s\+$//

    remove blank lines

    remove duplicate blank lines

    :g/^\s*$/d

    spellcheck

    toggle the spell checker

    :setlocal spell! spell?

    learning & tutorials

    musings from my vim guru z3bra

    interactive:

    videos:

    books:

    wrap up

    no editor or IDE will make you a better programmer. no plugins, linters, or refactoring tools will make you write better code. they're all just tools to assit your brain. learning vim's motions and modal editing style might increase your overall coding speed, or it might be too complex and just annoy you.

    inb4...

    something something evil mode

    emacs users

    your toolchain is a very personal thing, and you should use what works best for you. everything in this article is my opinion, and should be taken as such. others might agree or fervently dissagree with me. and that's fine. i just wanted to get my feelings out there about, what i consider, to be the best editor for programming.

    V4<