Programming
Moderator: Aesthetics
- thedisavowed
- Happy Cycler
- Posts: 2971
- Joined: Sun Jul 03, 2005 6:35 pm
- Location: Texas
- Contact:
I am a php programmer.
I like programming b/c even though it is very logical and all that - there's so many possibilities and so many ways to do things. It lets me use my brain, and I like that.
A couple of thoughts about the profession:
1) IT is a very experience oriented profession. If you're seriously considering doing it, don't sleepwalk through school. Learn a language/solution broadly and deeply - and do as much development as you can. 3-5 years experience is the sweet spot for getting the jobs. You may as well start now.
2) You need to think a lot about your technology choices. It's tempting to go with something like PHP because it's open source and so ubiquitous (this very board runs on PHP). But if you want to work in an enterprise environment (the corporate world), jobs tend to demand languages like Java, and, more frequently, the .NET Framework (C# or VB.NET)
Open source languages tend to be more prevalent in the world of internet startups, though sites like Facebook are changing that I suppose.
PS - Javascript sucks man. It's ugly to write, read, and debug. If there's one thing in my work I wish would go away - it would be that. Do yourself a favor and skip conventional javascript once you get the basics down. Use a framework like JQUERY or Mootools. It'll save you a lot of cross-browser hassle.
Edit: Oh, one more thing. While you should get all the skills you can, remember that developer jobs are frequently outsourced to India and places like it. My boss doesn't use me on the design end much because she can pay a kid in Pakistan $200 to do it. I can't possibly compete with that. Your value add will be your managerial and communication skills. Develop something other than coding skills that you can present to your employer. It will help.
I like programming b/c even though it is very logical and all that - there's so many possibilities and so many ways to do things. It lets me use my brain, and I like that.
A couple of thoughts about the profession:
1) IT is a very experience oriented profession. If you're seriously considering doing it, don't sleepwalk through school. Learn a language/solution broadly and deeply - and do as much development as you can. 3-5 years experience is the sweet spot for getting the jobs. You may as well start now.
2) You need to think a lot about your technology choices. It's tempting to go with something like PHP because it's open source and so ubiquitous (this very board runs on PHP). But if you want to work in an enterprise environment (the corporate world), jobs tend to demand languages like Java, and, more frequently, the .NET Framework (C# or VB.NET)
Open source languages tend to be more prevalent in the world of internet startups, though sites like Facebook are changing that I suppose.
PS - Javascript sucks man. It's ugly to write, read, and debug. If there's one thing in my work I wish would go away - it would be that. Do yourself a favor and skip conventional javascript once you get the basics down. Use a framework like JQUERY or Mootools. It'll save you a lot of cross-browser hassle.
Edit: Oh, one more thing. While you should get all the skills you can, remember that developer jobs are frequently outsourced to India and places like it. My boss doesn't use me on the design end much because she can pay a kid in Pakistan $200 to do it. I can't possibly compete with that. Your value add will be your managerial and communication skills. Develop something other than coding skills that you can present to your employer. It will help.
- turquoise70
- Happy Cycler
- Posts: 4893
- Joined: Thu Jun 07, 2007 12:30 am
- Location: the system
- Contact:
Could you clarify the part about doing as much development as I can? What did you do towards that end before you had a job programming?thedisavowed wrote:1) IT is a very experience oriented profession. If you're seriously considering doing it, don't sleepwalk through school. Learn a language/solution broadly and deeply - and do as much development as you can. 3-5 years experience is the sweet spot for getting the jobs. You may as well start now.
"grand mistress of the grace note freedledeedee melodies" - Cupz, 2026
Don't do that.... If you want a slow(er) website use those frameworks, you end up loading a lot of javascript you don't use. If you use a lot of web 2.0 stuff it's okay, but most of the time it's just loaded for 1 or 2 functions of the vast possibilities of it. Many sites can be easily optimised, just by checking which scripts are loaded and deleting redundant stuff. A colleague does this for a living and loading of scripts is one of his key points. (Apperently, besides the effect on user experience, it's also good for you google ranking).thedisavowed wrote:PS - Javascript sucks man. It's ugly to write, read, and debug. If there's one thing in my work I wish would go away - it would be that. Do yourself a favor and skip conventional javascript once you get the basics down. Use a framework like JQUERY or Mootools. It'll save you a lot of cross-browser hassle.
I agree on learning a language broadly and deeply and that also goes for javascript. Cross-browser isn't that of a hassle anymore (also with IE7/IE8(/IE9) it's also getting easier).
Unexpect the expected
1.0 is a scripting language almost the same as javascript, while 3.0 is more like a programming language with things like object oriented programming. What I've seen of 2.0 it's an attempt to achieve the things that are completed in 3.0.sub-r wrote:I only ever used 2.0, 3.0 really blows when you're used to 2.0. Simple features were complicated dramaticallyrik0000 wrote:Why not 3.0? Isn't 2.0 something as not really 1.0 and not really 3.0, some intermediate....? In class we skipped 2.0 for that reason...
But I understand that if you're accustomed to 2.0, you're not comfortable with 3.0, isn't that with all things in life?
Unexpect the expected
Code: Select all
#!/usr/bin/perl
$_ = "&264SEL%4V8ZSVE^#8Zh\n";
tr/!1@^6V5*3N%4EZ#2L&8X7P0J9QhS/gixcshzdyfotarkunJebplvmqw. /s; print;
Scott
- (parenthesis)
- Sherbet Head
- Posts: 679
- Joined: Fri Jun 05, 2009 6:56 pm
- Contact:
I made a mod r/m opcode disassembler today, which is basically an essential part of a x86 disassembler.
http://kashmirboots.com/upload/modrm.txt
http://kashmirboots.com/upload/modrm.txt
Borné dans sa nature, infini dans ses vœux, l'homme est un dieu tombé qui se souvient des cieux.
Aha, cool. I've toyed around making x86 decoders and encoders too. I always got sidetracked and never finished one though, so its cool to see that you have writen one.Guido wrote:I made a mod r/m opcode disassembler today, which is basically an essential part of a x86 disassembler.
http://kashmirboots.com/upload/modrm.txt
I've tested the code in MSVC++, and it works nicely. It wasnt happy about using initaliser lists to fill your unsigned char arrays btw. Also I noticed you can get rid of that switch statement in decodeSIB() by replacing it with:
PS: twoism wont let me post what I wrote below, it keeps messing it up :S.
Code: Select all
realscale = 1 <<sib> scale; Out of interest I tried to do a real world test with it by adding this code also:
Code: Select all
extern int myFunc( int a )
{
printf( "Hello" );
return 0;
}Code: Select all
char* opcode = (char*)myFunc;
Code: Select all
bytes: E9 CA 01 00 00
instruction: jmp myFunc
address: (4113A0h)
Code: Select all
EDX, ECXI realy like this work guido, it realy makes me wish i'd finished one of mine.
Im heavy into writing self modifying code btw, there is something realy enchanting about it. Has anyone experimented with it?[/code]
Hey Pantheon, cool that you think this is interesting, I didn't really expect anyone to know what a mod r/m byte is
.
First of all, I'll admit the code is quite ugly and I didn't really put any effort in making it readable or compliant with any official C standard or guideline.
The reason it doesn't work for that JMP is that the code I posted only handles the disassembly of mod r/m bytes and the subsequent sib byte if present. This basically means that it can decode the format of certain instructions which employ this type of encoding into a human readable string. The actual reason it doesn't work for this JMP instruction is it isn't encoded that way. The format of it is just 0xE9 immediate word. Moreover the JMP instruction with the 0xE9 byte is a relative jump. Try entering something like E9 00 00 00 00 in a debugger and you'll see that the address it'll point to is relative to the EIP (instruction pointer). What the code I posted IS capable of is decoding instructions like ADD, OR, AND etc and decode it into formats like these (for example):
I just started writing this small disassembler for fun and I already have grand ideas what I want to do with it. I think it would be interesting to create program which can load Windows EXE (PE) files and reorder its contents completely. The program would have to make a list or database of all calls and jumps the program does, and rearrange random codeblocks and update the calls and jumps, moreover swap registers, and perhaps intelligently rearrange instructions within codeblocks (PUSH EAX / PUSH ECX could be swapped without affecting the effective execution).
This actually has been done before in the virus writing scene. Search for the ZMist virus. Still, I think it would be interesting to code something like this myself too.
First of all, I'll admit the code is quite ugly and I didn't really put any effort in making it readable or compliant with any official C standard or guideline.
The reason it doesn't work for that JMP is that the code I posted only handles the disassembly of mod r/m bytes and the subsequent sib byte if present. This basically means that it can decode the format of certain instructions which employ this type of encoding into a human readable string. The actual reason it doesn't work for this JMP instruction is it isn't encoded that way. The format of it is just 0xE9 immediate word. Moreover the JMP instruction with the 0xE9 byte is a relative jump. Try entering something like E9 00 00 00 00 in a debugger and you'll see that the address it'll point to is relative to the EIP (instruction pointer). What the code I posted IS capable of is decoding instructions like ADD, OR, AND etc and decode it into formats like these (for example):
I'm heavily interested in self-modfying code as well. As a matter of fact, I seem to have bursts of programming creativity every few months and I'm always inclined to program things involving assembly/machine language and other fairly low-level things. In my teens I used to dabble around with assembly language a lot and I did write various small .com files which heavily modified themselves.ADD EAX, [ECX + EDX*4 + 0xDEADBABE]
OR EBX, 0x12345678
I just started writing this small disassembler for fun and I already have grand ideas what I want to do with it. I think it would be interesting to create program which can load Windows EXE (PE) files and reorder its contents completely. The program would have to make a list or database of all calls and jumps the program does, and rearrange random codeblocks and update the calls and jumps, moreover swap registers, and perhaps intelligently rearrange instructions within codeblocks (PUSH EAX / PUSH ECX could be swapped without affecting the effective execution).
This actually has been done before in the virus writing scene. Search for the ZMist virus. Still, I think it would be interesting to code something like this myself too.
Borné dans sa nature, infini dans ses vœux, l'homme est un dieu tombé qui se souvient des cieux.
Thanks for clearing that up Guido, yes if I had thought a little harder I should have rememberd that Mod/RM is only used for certain opcodes. I realy like your idea for writing a polymorphic application. I would love to do the same, but I never ventured into Assembler much, I only learned what I could to help me do some dissasembly and writing self modifying code.
However, if you ever need someone to run an eye over your code or test it, just Pm me or something, I love low level programming. Keep us posted with and developments, plz.
I actualy wrote a small program recently that is somewhat relevent to this line of discussion.
My program can inject code into the boot loader on a usb pen, allowing any computer to boot into this code, bypassing the operating system entirely. The goal was to let me write a small computer game that would fit inside the boot loader, but I never got round to doing that yet, lol. My assembly is still too weak.
However, if you ever need someone to run an eye over your code or test it, just Pm me or something, I love low level programming. Keep us posted with and developments, plz.
I actualy wrote a small program recently that is somewhat relevent to this line of discussion.
My program can inject code into the boot loader on a usb pen, allowing any computer to boot into this code, bypassing the operating system entirely. The goal was to let me write a small computer game that would fit inside the boot loader, but I never got round to doing that yet, lol. My assembly is still too weak.
Just along these lines...
I have been working a little bit on kernel programming. Got some boot code working, and a small unix-like kernel going. It's a lot of work though. I have been flipping between that and programming a MUD game framework for fun. First just locally, then when i get most of the framework down, I think i'll get some sockets going and try and expand it to a fully forking client/server MUD.
ANSI C, ftw!
I have been working a little bit on kernel programming. Got some boot code working, and a small unix-like kernel going. It's a lot of work though. I have been flipping between that and programming a MUD game framework for fun. First just locally, then when i get most of the framework down, I think i'll get some sockets going and try and expand it to a fully forking client/server MUD.
ANSI C, ftw!
Scott
Dono, check your PM.
Making a kernel is cool, I have never done it but I did read about the technical details of it various times. Check out this guy btw: http://www.bellard.org/jslinux/ (requires modern browser). He managed to code an x86 emulator in Javascript. Sheer genius.
Making a kernel is cool, I have never done it but I did read about the technical details of it various times. Check out this guy btw: http://www.bellard.org/jslinux/ (requires modern browser). He managed to code an x86 emulator in Javascript. Sheer genius.
Borné dans sa nature, infini dans ses vœux, l'homme est un dieu tombé qui se souvient des cieux.
Oh hey, this is a thread I hadn't seen before... shouldn't surprise me to see programmers on Twoism. Add one to the "it's my day job" list, although I do a fair amount in my spare time too, so it's not just a day job. I'm happy to see some people messing with kernels, emulators and such - high level programming is fine of course but there's a lot of fun to be had at lower levels. One of my favourite little pastimes of the last few years was writing an emulator for the first home computer I ever owned (an Acorn Electron!). I also did some mods for a Java game called Minecraft last year which involved some pretty grody hacking on the raw Java bytecode. Fun though.
- Seeya_Later
- Sherbet Head
- Posts: 830
- Joined: Fri Mar 04, 2011 7:01 am
I can hardly belive that link Guido, that is just too awesome. That guy is a realy genius.Guido wrote:Making a kernel is cool, I have never done it but I did read about the technical details of it various times. Check out this guy btw: http://www.bellard.org/jslinux/ (requires modern browser). He managed to code an x86 emulator in Javascript. Sheer genius.
I have encountered his work before in fact, as he made a realy minature C compiler (TinyCC) that can be embedded in aplications. http://bellard.org/tcc/. I made a VST a while ago that had his compiler embedded into it, so when you run the vst you can change and recompile the audio processing code at runtime, from within ableton. It was buggy but it was fun to play around with.
I updated my bootsector program with an option to do some basic dissasembly of the boot sector using the diStorm library. Its good for dumping / writing boot sectors. It has a little hex viewer in it, and now dissasembly too. If anyone wants a copy just PM me or post here. It reads/writes to hard disks and usbpens. It could be good for anyone wanting to play with kernels or realmode x86.
- Stry Craty Bya
- Eagle Minded
- Posts: 441
- Joined: Sun Jun 20, 2010 3:15 am