• Advertisement


  • Content count

  • Joined

  • Last visited

Community Reputation

241 Neutral

About Basiror

  • Rank
  1. Quote:Original post by notnoted Dear reader. My question is how long might it take to get some kind of answer from a company and do I have made something wrong in my application? Recently I finished college with a Bachelor of Science degree and I thought to apply for several junior positions here in Germany not only as a C++ Programmer but also as a graphics programmer and other similar positions. Two weeks ago, I sent my applications out but still got no answer from any company. In my opinion, I fit perfectly for the positions I applied for. Along with a nice email, I sent in a resume which contained a link to my portfolio website where I gathered some information about some my projects I did so far. I put a reasonable amount of pictures of those projects onto the site along with some explanation of it which could be read or not. These projects of course are absolutely topic related, for example, the ray tracing on the Playstation 3 project, the fluid solver on the iPod project or my demo engine where I show (also by video) how I have implemented OpenGL 4 tessellation and how it works by simple example of the PN-Triangles technique. Another video shows real-time GPU histogram processing for HDR-rendering. I put some time in this website in order to have it very structured so everyone can easily go through it and see whats going on. And I checked everything about correct syntax and semantic in the resume and the website. I think everything is very plausible and well sound and structured. Further more, I do approximately 8 years of C++ programming and nearly 5 years of OpenGL so I think I am perfectly suited for some vacancy as a "junior" C++ or graphics programmer. I started programming 4 years before I started my studies of computer science. Now I have received no single answer from no company so far. I feel a little bit useless. I mean, they have this vacancy online still, but they dont give any guess about what(I feel more like ftw) is going on. So this is a bit of the story. Sure, it is hard to give some guess what is going on, but please give it a try and what you think about it? I am very depressed right now! Thanks and thanks for reading Some depressed guy Hello, its very common that you won t receive any answers if your profile doesn t match their expectations. There are a few things I want to mention, some might disagree with me though: You mention 8 years of programming experience? Most companies don t care about that, all that matters are professional experience as employee. A lot of companies place vacancies online even if theres no position to fill. A good why to get onto the top of the applicants queue is to contact the company asking some question about the number of employees or some details about the position that are not mentioned in their vacancy, this why you might get the email of a contact person to send your resume to. Otherwise you are just one candidate of their jobs@companyname.com email applicants. The next big question is the salaries, don t expect too much 42.000 € is the maximum the average junior may expect. A good guarantee to get a job in germany as software engineer is know how in java development. There s really a hype regarding java. Maybe you should look for a position as IT consultant, on the long term you eary considerably more are a usually software engineer and your professional experiences you can reference in future resumes is of higher value. Another option is to apply anywhere and to switch the company after a year. bye bye
  2. I don t think multithreading is the intention behind component based systems, after all you still have some central object that holds shared data and needs synchronization (locks). One could argue about it, but multithreading on components is settled at a pretty low level. Often in games you can separate worlds into regions, where each region can be updated independently. The latter approach is easier to program in my opinion, since it follows the traditionally single threaded designs everyone knows. The same debate exist for distributed systems, multiprocessing vs multithreading. To the topic, one question that comes to my mind is, do components store data internally? Thus have a state, or do they simply add functionality to shared data through the factory pattern? What about systems where components are just ADTs, serving as a data source from hd or some dbms? Upon these ADTs you have a couple of systems that implement all the functionality and are executed in order( functionality could again be added with the factory pattern). The latter ones are often used in browser games( at least in my own), but I see potential for large scale mmos here as well.
  3. OOP acting upon objects

    Hi, when you design your program, you first subdivide it into subsystems with minimal interfaces that allow loose coupling. Each of these subsystems can be split into classes. I personally thinks its a good approach to structure your program code into layers. The baselayer usually represents you IO subsystems. On top of this IO layer comes your abstract datatypes to represent different kinds of resources. The next layer contains all the algorthims acting upon your resources. In general lower layers should not need to know about classes of upper layers. Representing your dependencies as a graph would result in a DAG "directed acyclic graph", usually a good sign of loose coupling. layer0: IO layer1: resources ( textures in your case) layer2: algorithms ( renderer instances for different rendering algorithms) In your case texture.bind(renderer) would certainly introduct circular dependencies (renderer <--> texture), something you should avoid at all costs. OOP always teaches you information hiding and the like, which is infact very important, in order to not rely on internal states of objects, but that doesn t mean that your simple texture class shall do everything from loading, up to binding ..... A better approach is to introduce a ResourceLoader, or maybe event add another layer ("add another level of indirection") The keywords are "loose coupling" "high coherence".
  4. The world isn t always as easy as it seams. The reason I use the approach with an event queue is that I need to guarantee the in order execution. How would you handle all these events otherwise? when the user refreshes his page? Thats even worse because you unevenly distribute the work over time leading to spikes with lot of work to do. Imagine a user has 1000 events since his last refresh, you had to handle all these events before you return the latest state . At peak times this will make your game unplayable. My archtecture will run pretty smoothly even at peak times since it distributes work over time. And parsing a few hundred strings costs you nothing. The other advantage of event queues is, you can split them depending on their locality. Fights taking place in the other half of your game world could be placed in a second event queue effectively halving the work one update process has to perform. With your setup you have to trigger state updates by user actions which is no option. All browsergames I know of (space battle games...) use some sort of externally triggered update mechanism.
  5. Why not? I am not using C++ to generate the webpages, thats done with java servlets JSP JSTL ... The C++ backend just reads in the command queues and handles all the game logic. I see no reason not to use C++ there. C++ is my prefered language anyways. Anyways I decided to use Ajax to load the page content with a tiny delay of 50-100 ms.
  6. Hello, I need some advice from experienced web developers. Currently I am working on a browser game using hybrid technology. This is I got a MySQL server, a C++ application and tomcat+jsp It the whole system as follows. client ->JSP -> encode commands as strings -> MySQL command queue(just a innodb table) MySQL command queue -> decode commands -> C++ App -> update MySQL database MySQL database -> JSP -> client(some browser) The problem is the last step, I need to guarantee it is executed after the C++ has updated the MySQL database, otherwise the refreshed page would contain old information and I had to refresh once again. I see only two options a) using AJAX set some timer and then load the actual page content b) since each servlets a threaded, I had to sleep/schedule the servlet thread some time maybe 500 ms a) is an elegant solution but involved a lot of more work and you need javascript on the client side b) on the other hand delaying the servlet is a simple and effective solution What do you think which way should I go?
  7. Windows vs. Ubuntu

    Quote:Original post by swiftcoder Quote:Original post by Basiror That is "bash" + "vim". I usually open several( around 10) tabs in the bash, with each running vim showing some files.Have you discovered that vim itself sports graphical (and mouse enabled) tabs? [wink] Not yet, thats just awesome, makes me even more prouctive with vim. One more reason not to use Visual Studio. Is there a away to store the tab configuration upon closing?
  8. Windows vs. Ubuntu

    I also have to say my few cents here. Earlier I have been working on Windows (Visual Studio ...), during my the first semesters at university I switched to linux and up until now I seen no reason to switch back to windows anytime in the future. Why? I just found the perfect development environment for my purpose. That is "bash" + "vim". I usually open several( around 10) tabs in the bash, with each running vim showing some files. I can work on my programming projects for hours without even touching the mouse. Switching to linux makes no sense for me if you indent to use GUI applications for development, thats the strength of Windows in conjunction with Visual Studio. However, if you are willing to dive into the world of bash+vim you should be prepared to having to learn the mechanics, which have a steep learning curve. I usually takes years in order to find out all the little tricks involved. I consider my self a linux newbie after more than 5 years, there are a lot of very very useful features I haven t touched already, that would boost my productivity. My personal experience is, that is way less cumbersome to work with bash+vim than it is to use all these GUI front ends. Just be prepared, its not that easy to just switch to linux, you will need several years. Just my experience. No rant here.
  9. Octree - Raytracing & voxel iteration

    Rendering the primary rays with the GPU is certainly an option, but I d try 8x8 sub sampling first, that is ray tracing only 1.56% of the required rays Also make sure to calculate nearby rays in a sequence in order to improve cache coherency
  10. Octree - Raytracing & voxel iteration

    I dont understand what you are sorting at all, what does that have to do with a dynamic octree? looking at you pseudo code class Node { int numTriangles; Triangles* triangles; Node* children; } each octree node has 8 potential children [0,1]x[0,1]x[0,1] // current intersection position of your ray const float fx = ox+t*dir.x const float midX = (minX+maxX)*0.5f const float midY = ... const float midZ = ... const int cx = fx<midX ? 0:1; const int cy = fy<midY ? 0:1; const int cz = fz<midZ ? 0:1; now you can compute the childMask of the child octree node like this const int childMask = cx + (cy<<1) + (cz<<2); // childMask is a power of 2 in this case since all nodes are stored linearily in memory //you can calculate its position by counting the bits set prior to your node's bit //01000-1=00111 const int childOffset = PopCount(childMask-1,currentnode.childMask); childNode = currentnode.children[childOffse]; You could as well use a pointer array, but storing 8 pointers of size 8 on 64 bit architectures wastes 56 bytes thus with a static octree of depth 7 you would waste geometric row: depth = n = 7 q = number of children ( 8 in case of an octree) (1-q^(n+1))/(1-q) ((1-8^8)/-7) * 56 bytes ~ 128 mb waste your total memory needed with my proposed layout is (static allocation q=8) n=7: 46 mb n=8: 365 mb the dynamic layout uses less memory, since not each node requires you to store 8 children. a quake3 sceen my be 16384x16384x16384 with garnularity 2^8 your leafs are of side length 64 units, a charactor in quake 3 is typically sized as 32x32x72 I am currently working on a realtime voxel ray tracer ala IdTech6 so I have quite some experience in that field. Since you are working on a realtime polygon raytracer, you can easily speedup your application with sub sampling. Sub sampling means, e.g. 4x4 you only sample each 4th pixel in x & y direction on your screen, if each sample has hit the same triangle, you can just interpolate the texture coordinates bilinearily to sample the texture colors of the pixels in between, that reduces the total amount of rays to compute from 16 to 1 (6.25% theoretically), since you can reuse the values for the neighbouring quads again. If the condition above is not met you fall back to 2x2 & 1x1 sub sampling respectively. I hope that helps you to get started. It is wise to add some sort of paging to your node allocation, to increase cache coherency. For a GPU based ray tracer you have to use a layout suited for breadth first search, your CPU ray tracer should require a depth first layout. I simply use chunks of 4096 bytes to store all nodes.
  11. SDL or SFML?

    I had a look at the features of SFML and am very impressed, it reallys saves you a lot of work and contains nearly everything you need to get started, network, graphics, cpGUI, ... I ll give it a try for my upcoming project
  12. usually the root node stays at its start location when animating some model. Just animate the legs of your walkanimation relative to its root, so you don t have to mess around with changing root nodes' position. In order to get a smooth animation you need to calculate at a fixed animation framerate of e.g. 32 hz how far the actor can travel given its step size(depends on your model), e.g. at frame 16 the model traveled X units( half a step) at 32 it will have traveled 2X units Now calculate based on the constant movement speed of your actor the time t in [0.0,32.0] that represents the actual keyframe of your animation. ti = floor(t) ti+1 = ceil(t)
  13. Best SDL GUI library?

    I just want to throw in guichan, it is written in c++ and pretty easy to use.
  14. [GCC 4.2.3] std::sort bug

    Oh yeah, it was my fault, but it was late at night so :) thx for your help anyways Maybe some moderator could delete this thread?
  15. Hello, I think I spotted a bug in std::sort or my GCC binary On Ubuntu Hardy 8.04: Using built-in specs. Target: x86_64-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7) Running the following code gives me a wrong output: Compiled with g++ -o huffman main.cpp main.cpp 1 #include "huffman.h" 2 3 int main( int argc, char** argv) 4 { 5 std::vector< unsigned int> symbols; 6 symbols.push_back(1); 7 symbols.push_back(2); 8 symbols.push_back(3); 9 symbols.push_back(4); 10 symbols.push_back(2); 11 symbols.push_back(2); 12 symbols.push_back(1); 13 14 const Node* root = BuildHuffmanTree(symbols); 15 root->Print(); 16 return 0; 17 }; huffman.h 1 #ifndef HUFFMAN_H 2 #define HUFFMAN_H 3 #include <deque> 4 #include <vector> 5 #include <algorithm> 6 #include <iostream> 7 #include <iterator> 8 9 typedef unsigned int uint; 10 typedef std::vector< uint > SymbolVector; 11 12 class Node 13 { 14 public: 15 typedef std::deque< Node* > Queue; 16 public: 17 const uint weight; 18 SymbolVector symbol; 19 const Node* left; 20 const Node* right; 21 public: 22 Node(const uint _weight, const uint _symbol) : weight(_weight),symbol(1,_symbol),left(0),right(0) {}; 23 Node(const Node* _left, const Node* _right) 24 : 25 weight(_left->weight + _right->weight), 26 left(_left),right(_right) 27 { 28 symbol.insert(symbol.end(),left->symbol.begin(),left->symbol.end()); 29 symbol.insert(symbol.end(),right->symbol.begin(),right->symbol.end()); 30 }; 31 void Print() const 32 { 33 std::ostream_iterator<uint> ot(std::cout,", "); 34 std::copy(symbol.begin(),symbol.end(),ot); 35 std::cout<<"weight: "<<weight<<std::endl; 36 if(left) left->Print(); 37 if(right) right->Print(); 38 }; 39 }; 40 41 inline const bool queue_pred(const Node* a, const Node* b) 42 { 43 return a->weight < b->weight; 44 }; 45 46 inline const Node* BuildHuffmanTree(const SymbolVector& csymbols) 47 { 48 SymbolVector uniquesymbols(csymbols); 49 std::sort(uniquesymbols.begin(),uniquesymbols.end()); 50 51 std::ostream_iterator<uint> ot(std::cout,", "); 52 std::copy(uniquesymbols.begin(),uniquesymbols.end(),ot); 53 { 54 SymbolVector::iterator i = std::unique(uniquesymbols.begin(),uniquesymbols.end()); 55 uniquesymbols.resize(uniquesymbols.end()-i); 56 } 57 std::cout<<uniquesymbols.size()<<std::endl; 58 Node::Queue queue; 59 60 for(SymbolVector::iterator i=uniquesymbols.begin();i!=uniquesymbols.end();++i) 61 { 62 const uint weight = std::count(csymbols.begin(),csymbols.end(),*i); 63 queue.push_back( new Node(weight,*i) ); 64 } 65 66 while(queue.size() > 1) 67 { 68 std::sort(queue.begin(),queue.end(),queue_pred); 69 const Node* left = queue.front(); queue.pop_front(); 70 const Node* right = queue.front(); queue.pop_front(); 71 queue.push_back( new Node(left,right) ); 72 } 73 74 const Node* result = queue.front(); 75 return result; 76 }; 77 78 79 #endif The output is: ./huffman 1, 1, 2, 2, 2, 3, 4, 3 2, 3, 1, weight: 6 2, weight: 3 3, 1, weight: 3 3, weight: 1 1, weight: 2 the first line should be: 1, 1, 2, 2, 2, 3, 3, 4, So either I did something wrong in my code or I just discovered a bug. Could some of you try to compile this source snipped and compare the results? Please also provide information about your compiler and OS. thx in advance.
  • Advertisement