Finally it looks like we are able to sense that what is web 2.0 or at least get to know that what are all the new markets and types of application are expected for the future. When everybody tries to define what is web 2.0, group of us also have started understanding what is that all about.
We said what it is web2.0 and focused on three core areas. Which are,
1. RIA (Rich Internet Application) – Have concentrated on the technology enablers like HTML5, CSS, Flex, JavaFx, etc., We have tried creating awareness as RIA is not just developing glossy applications rather we need to focus on information architecture and usability engineering. Though its must to focus area but still its not a special requirement rather it should be considered as basic requirement. We have experienced this as NOT a big way selling point but definitely worth highlighting to the customer.
2. Social Apps / Participative web (We call them as participative web since the user participate in the app rather just consuming). Though its appreciated well by the world it takes own time to get ROI back. There are very few succeeded rest of all keep trying to monetize at some point. Moreover not everyone wanted to develop social apps.
3. SOA – Service Oriented Architecture is again a much debated topic on what it is. Could hear people keep saying its born, dead, yet to born etc., We have tried explaining what is a potential use case to develop as a service, how a piece component can be exposed as a service, what are all the various ways services can be developed. But the challenge is again selling point. Its not necessary to be every piece of your code need to convert as service and there is no point in exposing something as service which may be consumed few years later. By the time the requirement might become obsolete or something new would have come.
One thing I could observe after all this, that is, going forward all the applications are might targeted for global audience. so the scalable web applications are the future need and thats one thing is clear outcome of this web2.0 trend. I have recently presented in a forum on the topic “Scalable Architecture in practice”. Thinking of blogging some the variables and factors which I have highlighted in that session in my next few posts. Stay tuned for them.
After I have posted here about “Forward proxy server vs Reverse Proxy Server”, some of the readers where started questioning about the difference between “Reverse Proxy Server vs Load Balancer”. My understanding is,
They are often the same thing. But not always. When you refer to a load balancer you are referring to a very specific thing – a server or device that balances inbound requests across two or more web servers to spread the load. A reverse proxy, however, typically has any number of features:
load balancing: as discussed above
caching: it can cache content from the web server(s) behind it and thereby reduce the load on the web server(s) and return some static content back to the requester without having to get the data from the web server(s)
security: it can protect the web server(s) by preventing direct access from the internet; it might do this through simple means by just obfuscating the web server(s) or it may have some more active components that actually review inbound requests looking for malicious code
SSL acceleration: when SSL is used; it may serve as a termination point for those SSL sessions so that the workload of dealing with the encryption is offloaded from the web server(s)
These are all some of the key differences. In a broader senses they appear / does the same.
Someone has suddenly confused by their views on Proxy vs Reverse Proxy. So to make it clear (or confuse may be ) to rest of the world, my view is
Proxy server – A intermediate server who filters, controls and cache accesses to the outside (Internet) world. Example, you work for a company called xyz. Presume at your company you have internet usage policy to don’t allow access to certain sites like facebook, flickr etc., Then all the request to the Internet world would be routed thru a proxy server which validates your request. If in case the request is not permissible, you would get permission denial message. In some cases, if the company doesn’t want you to download images from the site then proxy server can filter them. Moreover the proxy server can also cache the content so that if the same content is accessed again it can serve from the cache rather than actually hitting the internet.
Reverse proxy server – Assume it a user from India trying to access http://www.facebook.com, there might be millions and billions of users can try access at a time right? To balance the load as a technique there will be multiple servers deployed and naturally all those servers would have different IPs but for the end user its just http://www.faceback.com. This is where reverse proxy plays a role which decides to which server the request needs to be routed.
Recently I was interacting with some of my folks and find that mostly they have used serialization but have not realized much. And I thought, I can also learn different views from my blog readers (Trust me there are some ) by posting my views. So my definition, here you go.
As all of you know, Class is nothing but a complex data type represents real world objects with the help of primitive data types. Grouping primitive data and bringing meaningful definition. When you transferring an object from machine to A to B, litteraly the object will be recreated (Nobody can make magic here. The newly created object would be created in a new memory location and will be initialized with the same state (the values) what the object was holding in machine A.
What is serialization?
“Streaming your class state over wire”
Why do you need serialization?
Say you want to transfer an object (naturally with some state otherwise will you call as object? thats class right?) to machine A to machine B, how do you that? Serialization converts the state to binary.
What is Marshalling and Un-marshalling?
If you look into deeper the serialization, its Marshalling and Un-marshalling. Marshalling – The process converts state to binary and Un-marshalling does the vice versa.
Java provides default implementation, geeks can have their own algorithm to customize this process.
Sometimes if you dont need to transfer the state of a particular data member then you can declare that variable as transient variable and make Java life simpler. When object is being created at other end the transient data member will be initialized by default value.
In my next post, lets see my views on the PMD rule BeanMembersShouldSerialize and the decision I have taken.
Folks, feel free to redefine, extend or agree my views on serialization.
Being? (Not any more ) a MS Windows user most of the time in my experience, recently tried (someone pushed ) my hands to use Ubuntu. This is true rocking real Open Source Software (I have different opinion on recent days OSS). Though I am not expert in Windows OS or Ubuntu, I can confidently say in a application user point of view Ubuntu is far better than windows.
Most of the time we think that proprietary software works better and would have more features since there will be focused energy. But thats not the fact seems. Windows is dead slow for unknown reason (Unknown to me and Microsoft. Otherwise MS / I should have fixed it by now ). It takes more time to start and even more more more more time to shutdown. Heard people saying its a issue with Service Pack3 in Windows XP. Anyone knows? I was facing real tough time whenever I want to shutdown the machine. Particularly at late night after your hard work if you want to quickly sudden down and wanna goto bed that never happens. So naturally I am forced to either pressing hard the power button or simply not shutting down both screw up me in other way.
The big reason for ubuntu to impress me, Whatever I can do with Windows that I can do it here. Interestingly even more faster. I dont know what kind of algorithm they use to copy files. Even a few MB file in Windows would help you comfortably lunch out, this does the magic in few minutes / seconds. Ubuntu software centre again a very useful utility. So the laundry list goes on. In a nutshell, I feel, I could have tried earlier may be few months or years of my energy would have saved. Someone reading these lines, if you are using Windows give a try and join the club.
PMD rule BeanMembersShouldSerialize is considered as false positive in many cases. I am finding challenging and stuck now. We have 2 different problems to deal with.
A data member is declared as “isdefault” (unfortunately yes you would say this eventually). The source code have getter and setter method but again its not having the variable name as part of the method name. Since the accessors (get & set) method are in different names, PMD complains the violation of BeanMembersShouldSerialize. So we decided to introduce new set of getter and setter. Since its a boolean variable, PMD expects the getter starts with “is”. If I keep isdefault it violates other PMD rule (AvoidFieldNameMatchingMethodName). We thought as well removing ‘is’ from the variable name since its private variable but again there is a challenge. Yes. if you remove ‘is’, it remains with ‘default’. As you know its keyword in java. So we can not have a keyword as a variable name. This data member is used in many places so we cant change the getter setter method names or else we will end up refactoring on large extend. Anyone of you have attempted similar usecase? if yes, share your thoughts.
Case 2: I would say its PMD bug. There are some private data members without getter and setters. Expected to be injected by (Spring / Hibernate) container. PMD doesnt understand this variables will be injected so it complaints the absence of getter and setter.
I could think of three options left over to me but nothing I am buying it.
1. PMD Ignore – Though it works. We have to do this in few hundred places. Even if you get convince to fix by this way also. The problem is not fixed as long as you have not stopped introducing container managed variables. Do you think this possible in any system which is keep adding functionality?
2. PMD patch – Another option to just patch in PMD source code to educate to differentiate. Though that would solve the problems, later on if you plan to migrate to newer version of PMD then you need move patch there as well. It helps you to get into maintenance hell.
3. PMD remove – Simple isnt it? Just one pill solves all the issue. But then what is the point of having PMD at all? I know PMD is useful in many (at least in some) cases.
If you have some energy and option 4, share your thoughts.
The angel for all the developers start missing the ground seems. My recent days experience with eclipse is painful. There are many complaints but some the major one hit me are
1. There is no good sync with maven. I dont mind if someone says that maven issue.
2. Many no of plugins but nothing is bug free and updated.
3. Taking huge amount of time to download anything.
4. Interesting become heavy and start to eat more memory.
Are you still feeling comfortable with Eclipse? then try with netbeans once and comment (FYI, I am not working for oracle )