Holy Crap , Joshua you can write a book on this ;) well said ...

Sent from my iPhone

On Dec 27, 2010, at 1:36 AM, "Joshua Granick" <bulkm...@joshuagranick.com> 
wrote:

> Everyone is always learning. I'd say that its difficult to draw a line to 
> distinguish when someone is professional or when someone is amateur, but 
> generally I would say that every project you create makes you more 
> comfortable with the language (I hope!) and exposes you to more problems and 
> solutions. With time, you'll be exposed to more and more of the total 
> possible problems, solutions and applications one could create with Flash.
> 
> Looking back at my own experience, I'd say that the jump to "feeling" 
> professional occurred when I no longer stumbled over the "how", and became 
> proficient enough that more and more of my time started surrounding the 
> "what" ... the "how" was less daunting and more obvious at that point. I'd 
> say that every developer has milestones as well that they cross that stand 
> out as proud achievements. I've built a few projects and libraries that feel 
> that way to me.
> 
> FlashDevelop really accelerated my experience with Actionscript 3. I used 
> Actionscript for 5 or 6 years before the alpha for AS3 was first released. It 
> was probably a couple years afterward that things started to really take off 
> for me.
> 
> In addition to FlashDevelop, using my own code library became a big catalyst 
> to going deeper with Flash. Instead of writing new code for each project, or 
> trying to copy from one project to the next, I began using a global classpath 
> with my own "code library" of re-usable classes and global functions I 
> started to create. You can set the Project panel to show global classpaths, 
> so its just as easy to write code in the global location as it would be 
> within the project. This process helped me to pinpoint code which would be 
> written in a reusable way, so I started to write my own components and to 
> develop them further with each project.
> 
> Over time this grew to include a wide variety of useful libraries for loading 
> files, playing sounds in games, fluid resizing, game character animations, 
> tweens and eventually an Away3D + Box2D snap-and-build layout framework for 
> some of my larger clients. Instead of reinventing the wheel, I could improve 
> on it with each project, helping me dig much further into interfaces, 
> namespaces, static methods and other language features I wouldn't have 
> otherwise needed, but that helped me to improve the utility of my code 
> library.
> 
> 
> Like the old man insists in Toy Story 2, "you can't rush art." Everything 
> takes time. To develop work faster is part experience but also partly being 
> clever. I've heard another person say that he wouldn't want to hire a 
> carpenter if he were building furniture for a stage play. Fact is, the 
> carpenter will build the table the "way it should be built," but he can't 
> afford that. It just needs to look right ... it doesn't need to last forever, 
> just until the last showing. Part of working quickly is learning the balance 
> between where you should invest in building things "right", and where you 
> should allow yourself to fake it, or to be messier. You also learn how to 
> develop in such a way that you don't box yourself in with poor decisions. If 
> you set yourself out in the right direction, every step you take can expand 
> and grow that project. If you make poor decisions, you may have to go back 
> and rewrite everything.
> 
> If you make a light, give it a light bulb and a light switch. If you need to 
> switch it off later, it'll be easy to do. You won't have to tear open the 
> wall to get to the wires. If the bulb goes out, you won't have to replace the 
> fixture. On the flip side, a toaster on the counter doesn't need to handle 
> every single kind of bread. If it breaks you can get another one. In the same 
> way, give yourself "switches" so you aren't stuck with stubborn code (just to 
> implement a client's change) but don't over-engineer everything. Sometimes 
> its okay to have a normal pen, and not to make a super astronaut pen that can 
> write upside down in space.
> 
> 
> You may be surprised with Flash's performance. Try and approach your project 
> one step at a time. Get the basics working, then improve on it. If you task 
> yourself with too many features at once, it may be difficult to think clearly 
> and move forward. I've used Away3D enough to say that it is solid, and I 
> think its a good choice for the project you're thinking of. Don't try and 
> re-engineer the library, though. Let it do what it says it does. If it works 
> terrible, there may be a bug that someone else wants to fix. You don't have 
> to fix everything yourself.
> 
> Switching between high and low quality renders and being picky about when you 
> re-render can make the difference for improving performance. Get your project 
> working, then refine it more to eek out even more performance. Be careful not 
> to optimize too early. Get it working, then get it working faster.
> 
> The extra stuff you aren't using shouldn't be slowing Away3D down. Don't 
> worry. Go ahead and make your custom classes, but also think if there's a 
> "dead simple" way to build what you want, using the classes that already 
> exist. For example, you could take your bitmap, cut it into pieces, then use 
> multiple planes. Levels of detail, instead of being wrapped up in the same 
> class, could be multiple cubes or sets of faces that you hide or show. When 
> you pan, you just change the position and rotation of each object 
> simultaneously. Remember that "big things" are made up of simple, well-built 
> small things.
> 
> Projects will also run (notably!) faster if you compile for Release instead 
> of Debug.
> 
> 
> Please take or leave anything I'm saying here ... I may be repeating the very 
> things you already know, feel, or are actually doing. If I were to approach a 
> project like this myself, I would first determine which classes or functions 
> are already available which may already do (or almost do) what I want it to. 
> Find Away3D panoramic examples. I would then consider using these existing 
> classes, extending them, or combining them to add additional functionality. 
> Like I said before, instead of a complex mesh with multiple faces, maybe use 
> multiple objects. Instead of getting into complicated circular math, maybe I 
> would use Point.polar so I could move objects in polar coordinates (which 
> might be really easy) and to let Flash convert them to Cartesian coordinates 
> for me.
> 
> If you really want it to do all the features you're looking for, it will take 
> some time. A good development process, on something that hasn't been done 
> before (or is complex, and hasn't been done by yourself before), will usually 
> include a combination of roadblocks, breakthroughs, progress and roadblocks. 
> Just try and stick to the narrow, straight path that gets you to your 
> destination, and not to be too distracted by "nice to have" features or 
> things that are auxillary to your primary goal. It's easier to get from A to 
> B, building a straightforward solution to your problem, then adding 
> additional features, than to start with every feature under the sun on day 1, 
> and trying to get that to a working end.
> 
> 
> 
> On Sun, 26 Dec 2010 12:12:55 -0800, rctdeclan <rctdec...@hotmail.com> wrote:
> 
>> Hi Joshua,
>> 
>> What is your opinion on experience? e.g. When is somebody a
>> professional developer?
>> 
>> How long did it take you guys to feel comfortable with coding as3, and
>> especially understanding precisely how Away3D works?;
>> How much projects have you done?
>> How much time do you spend on a project per day or per month?
>> Do you work in a team?
>> 
>> I'm trying to get an idea whether I'm taking the right steps...
>> 
>> For example this project which I've been working on for more than
>> three months:
>> 
>> My goal was to make a Panorama viewer:
>> -with multiresolution cubical panorama support
>> -with Hotspot navigation
>> -Zoomify-like Flat panorama's
>> -Panorama video (with VideoMaterial class)
>> -Partial panorama's
>> -VRObject viewing
>> -multitouch
>> -optionally using some sort of PHP connection to a database.
>> -Lightning fast.
>> 
>> Why? Well I've been making Virtual Tours for almost two years now.
>> I've tried several panoramic viewers, but unfortunately, they don't
>> fit my needs. (Not-extendable, not as3-compatible)
>> 
>> How?
>> -Using Flex MXML for data and AS3 for various pano classes.
>> -Using Away3dLite
>> 
>> So I made a plan:
>> 1. Read the "3D in Flash" book.
>> 2. Dig through the code of the Mesh class.
>> 3. Understand materials, and know how to load them at runtime.
>> (Partial tile loading)
>> 4. Keyboard/ Mouse controls
>> 5. Make Multtiresolution Cube Panorama Class.
>> 6. Make Hotspot Class.
>> 7. Make Partial Spherical Panorama Class.
>> 
>> But I bumped into the following questions:
>> -How can I use multiple materials on a Mesh --> Solved; apply material
>> to each face individually.
>> -How do I know which cube(sub)faces are currently being viewed, for
>> loading?
>> -How can I update only certain faces in the Mesh class, without
>> updating the whole mesh?
>> 
>> 
>> And lastly, I'm never sure about the speed and performance of the
>> flash player.
>> If I use the debugger in FB, and I run the code step by step, I don't
>> understand how the Flash Player can handle the amount of commands that
>> come by every second.
>> Does the extra code within Away3dLite's classes (extra code; Lights,
>> shaders, etc..) which I don't use have an (Serious) impact on the
>> performance? Remember, my goal was to make this viewer Lightning
>> fast...
>> That's why I'm trying to understand what Object3D.project(),
>> ObjectContainer3D.project() and Mesh.project() actually do. (Matrix
>> calculations, projection plane, etc...)
>> 
>> 
>> So my question are:
>> -How do you begin a project; Is it similar to the way I started my
>> project?
>> -How to know if cube(sub)faces are viewed or not?
>> -Is it possible to update only certain faces (delete, replace) in a
>> mesh?
>> -Do you guys have some links to tutorials or pages about how Matrix
>> projections are calculated?
>> ( I already found these:
>> http://www.codeproject.com/KB/openGL/Space_Matrix.aspx
>> http://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/video-lectures/
>> )
>> 
>> Thanks in advance,
>> 
>> Declan
>> 
>> 
>> On Dec 26, 8:15 pm, "Joshua Granick" <bulkm...@joshuagranick.com>
>> wrote:
>>> A couple things:
>>> 
>>>  - FlashDevelop. Using FlashDevelop instead of Flash (and instead of Flash 
>>> Builder, in my opinion), is a huge boost in productivity. Instead of having 
>>> to memorize classes and methods, the code completion and other language 
>>> features allow you to use the language before its been committed to memory. 
>>> Over time it becomes more and more familiar, but until then,  you can leap 
>>> into AS3 (and libraries like Away3D) without a lot of study
>>> 
>>>  - Maya + OpenCollada. I had a hard time getting into Away3D development 
>>> (beyond cubes and spheres) because I couldn't find a good pipeline for 
>>> generating 3D models and importing them into Away3D reliably. Other 
>>> developers could chime in here, but for all the formats and applications I 
>>> tried (SketchUp, Blender, Milkshape 3D, Misfit Model 3D) the only one that 
>>> truly worked for me all-around was using Maya plus the OpenCollada plugin 
>>> (with triangulation enabled) for exports. Maya is prohibitively expensive, 
>>> so I'm sure there are other applications that can work, but this was when 
>>> my experience with Away3D took off. It's exciting when you can create a  
>>> mesh, use a UV editor to wrap your texture, and have it load correctly in 
>>> Away3D. Other formats and applications may be different, but in Away3D + 
>>> OpenCollada, .1 unit = 1 pixel (if I remember correctly). When testing 
>>> formats, always remember to test with something like a WireColorMaterial, 
>>> and play with the scale. You may be loading your model correctly, but can't 
>>> see it because the material isn't appearing, or because the scale is so 
>>> small or so large.
>>> 
>>>  - Class-based development in AS3. If you aren't doing it already, get  
>>> comfortable with using classes. When learning a language it can be easier 
>>> to begin with procedural programming (like you would do on a frame, coding 
>>> in the Flash IDE) but a class-based architecture really pays off in the  
>>> long run. Using FlashDevelop really helps make this easier (the Project  
>>> panel is awesome for always maintaining the context of all the files in  
>>> your project)
>>> 
>>>  - Common-sense development. There's also some "common-sense" principles 
>>> that really help in development. Don't be afraid to use capitalization or 
>>> long names if it makes your code more clear. It all gets compiled to binary 
>>> anyway, so you don't do anyone (yourself included) when variables are 
>>> called "v1" and "v2" instead of "objectMesh" and "objectTexture". It's also 
>>> helpful to use multiple classes and methods to keep each piece of your 
>>> complex work, simple. For example, if you have multiple states in your 
>>> application, it may be helpful to create a "showState" function. That 
>>> function can then be the authority to making sure everything falls into  
>>> place. Instead of putting this code in each button handler, make each 
>>> button handler point back to your central function. It's much easier to  
>>> debug applications when a specific behavior is always handled by the same 
>>> code.
>>> 
>>>  - Actuate. Use a good tween library -- goes a long way to making your  
>>> life easier. Animating properties, or pushing numbers around, is an 
>>> extremely common task in AS3. Use a library that feels comfortable and is 
>>> reliable. My favorite is Actuate, but (by no means) is it the only library 
>>> out there. Performance, reliability, and (in my opinion) global control  
>>> with good overwrite support is essential. If your library supports solid 
>>> overwriting, it means that you can "set it and forget it" ... even if you 
>>> started an animation moments before, it will kill the previous animations 
>>> if they conflict with your most recent instructions.
>>> 
>>>  - Mailing lists, Google. Google is a great resource for AS3 questions, and 
>>> mailing lists can be the best place for library-specific questions.
>>> 
>>> On Sun, 26 Dec 2010 09:46:37 -0800, rctdeclan <rctdec...@hotmail.com> wrote:
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> > Hi guys,
>>> 
>>> > I'm 16 years old and live in the Netherlands.
>>> > I'm now coding AS3 and MXML for almost a year. I love coding, and I
>>> > love learning new things.
>>> 
>>> > I have a few questions for the pro's out there. I hope you can help me
>>> > with getting a better understanding of programming RIA's, and Flash
>>> > development in general.
>>> > I would like to know how you guys started, and what your visions were
>>> > and how you managed (or not managed) to make those visions reality.
>>> 
>>> > Subjects like:
>>> > - Away3D projects: How do you start your projects, do you have tips?
>>> > - As3: Cairngorm, MVC
>>> > And for Rob and Richard:
>>> > - where did you guys learn the theory needed to build a 3d engine? Are
>>> > there some 3D-related tutorials you guys could recommend me?
>>> 
>>> > Many thanks in advance,
>>> 
>>> > Declan
>>> 
>>> --
>>> Using Opera's revolutionary email client:http://www.opera.com/mail/
> 
> 
> -- 
> Using Opera's revolutionary email client: http://www.opera.com/mail/

Reply via email to