I know there are some questions about difference between Open Source Software and Free Software, but I do not understand if Free Software means the same as Open Development Software.
While reading Adobe's documentation on Granite platform I've found next sentence (in bold):
Granite is a general purpose platform for building robust scalable
applications; it supports "open architecture", which is based on both
"open standards" (JCR and OSGi) and "open source" (Apache Sling and
Apache Jackrabbit). ... Granite is open development, but not open
source.
I do not understand last sentence. What means "open development"? It makes sense that it means that everyone can contribute to code, but is it then also an "open source" project?
You can find what Adobe's "Open Development" means by going through this conversation article posted on medium.
If I understand it correctly, "Open Development" is more like InnerSource but where the information and communications are shared outside the organisation as well.
In the Adobe AEM teams we work a lot on Apache projects. As we like the Apache way we tried to apply the same project management principles to our internal closed source projects.
The key principles are "power to those who do" and "community over code". The result is kind of a shared responsibility for the projects. Everyone can participate in development of all code bases. You start by reporting bugs and improvement requests but you can also provide the solution in form of pull requests. If you do good work you are usually also allowed to do commits yourself and drive the direction of the project.
At Adobe this development style works very well as people are used to the Apache way. If you want to apply this in other companies be careful. A big part of the success is to establish the culture which is not guaranteed to work and takes a lot of time and effort.
Related
We have an existing cross-platform Mobile Application, that also has an accompanying web application, that uses AWS as a back end (RDS for Database, Four server instances, and a Load Balancer to distribute traffic). APK and IPA files are packaged and sent to the stores, while components are retrieved from our server per request, which enables us to reduce the number of store builds, and make the process easier for getting changes out to clients.
We are at the stage of Development that we need to move to another platform to better facilitate our fast growing client base.
Due to the conditions upon our clients, these things must be considered.
must be cross platform (Android / iOS).
must be offline based (users need to be able to access without an internet connection)
must be able to sync with an existing database when there is a connection
requires Authentication
Cloud based (? may not be the right term, but meaning the ability for us to store components on a server and have a device check for updates and download a local copy - enabling us to work and distribute fixes faster)
Ideally compatible with AWS
We are currently looking at Xamarin to facilitate us for this move, however there is a lot of documentation and plugins out there to do all sorts of different things.
As developers, we all have some .net / c# experience, however none particularly with Xamarin.
We have a particular timeline that we need to adhere to (and need to ramp up in the next couple of weeks), and right now are essentially stuck in Limbo in a research phase, as we can't afford to get some things right. We are unable to move forward until we know Xamarin (or some other framework) is able to do everything that we need it to do.
It's hard to escape from the 'code it all ourselves' mentality - especially as we don't know where to start looking in terms of third party packages for Xamarin, and their documentation itself.
A lot of documentation mentions various systems of Azure - we would not be against moving to Azure over AWS if it _had to be done*, but because of the existing infrastructure with AWS - staying with AWS is obviously the preferred option (users need to access the current system whilst we build the new system)
This stack overflow post is to ask for recommendations, comments, or other observations on anything and everything involved with the process in regards to choosing frameworks, design patterns, methodologies, third party packages, etc.
Obviously we would like to use best practises for everything moving forward for optimum scalability and cleaner, more robust code. It's just hard to know where to start!
Any input will be highly appreciated.
Cheers!
edit: I am aware that this is 'asking for recommendations' which is 'specifically off-topic'. I have read the posting guidelines about open ended discussion, and am quite confident that this case is different. There is an underlying problem here, in that we are seeking advice on combinations of frameworks and plugins that are fully compatible with all of the items in the list (above)
Let's try to breakdown each of your requirement and constraint mentioned in the question.
1. You need a offline first architecture (With Sync mechanism)
Xamarin + Azure would make a good comdo for you, as it would support offline storage out of box (With a simple PullAsync call).
Albeit there are AWS SDK available for Xamarin. Here it goes http://docs.aws.amazon.com/mobile/sdkforxamarin/developerguide/setup.html
So the call is yours. There are few other ways to achieve caching offline storage in Xamarin, you can build upon those strategy in your logic. Alternatively there is a very interesting C# library Akavache for caching and offline storage.
2. OAuth 2.0 Authentication
Xamarin has a very good library named Xamarin.Auth. Though I would not say it is very easily extendible at this but there has been some serious work going on from Xamarin on this library.
But I would say it is very easy to use. The apps I have developed so far that includes - Google OAuth, Facebook integration, Microsoft account integration. It worked fine for all of them.
3. Cloud based distribution
There are nice tools available with Microsoft. Which makes the distribution easy. Have a look at https://mobile.azure.com . Also hockeyApp is good for distribution I found.
Where to start:
A very good starting point for you would be https://channel9.msdn.com . Just go there search with keyword "Xamarin" and view some videos. May be all these cross platform dynamics will be much easier for you.
Overall I found Xamarin a cool product to work with. Because anything that can be done in native Objective C/Swift or Java can very well be done in Xamarin using C#.
I'm aware this isn't exactly a programming question, but it directly impacts our developers and the code we're assigned to write. If there's another SO-like forum where this could be better posted, please let me know and I'll take the question down from here & post it there.
Our work environment is a couple of developers creating (20-30%) and maintaining (lion's share) legacy software for factory production floor and test workers to use to calibrate or test the equipment the company sells. We've implemented a very simple Google form based bug reporting page, but we're already running into problems of scale (approx 40:1 them:us and lots of old-old buggy software that we didn't write). The company has tried using Bugzilla before my arrival with little success, the factory folks were apparently intimidated by it and wouldn't use it. However, they seem to like the simple Google form and the wizard-like steps to file a bug or request a feature. We're currently manually cutting & pasting their bug/feature requests from the Google form spreadsheet into Trac, and manually tracking the bugs/feature requests on a white board with magnetic bug cards. We're only a few weeks into this system and it's already showing it fragility and lack of scalability.
Ideally we'd have a Windows >= XP web or desktop client that would provide:
Simplified bug reporting, a Wizard like approach seems to work well
Customizable for our software packages (like drop downs for each)
Bugzilla or Trac integration
Standard bug tracking features developers and management can use
I've found the winners of the "Make Bugzilla Pretty" contest, but coming from a pure software house where we just used straight Bugzilla out of the box, I'm unclear on how to configure and install these skins. Obviously I can figure this out but don't want to go down that path if it's not going to solve our basic problem which is non-technical people reporting bugs.
TaskCompiler, found on the Bugzilla wiki site seemed like a candidate because it talks to both Bugzilla & Trac, but their sales page is offline and the site hasn't been updated since 2012 and I'm unsure as to their viability.
I'm certain we're not the first production facility to run into problems like this, I'm looking for recommendations to help solve both our scalability as well as-ease-of-use problem.
Another thought that occurs to me is a GAS script to push our current Google forms based bug reports into Trac or Bugzilla.
Edit: The decision between Bugzilla/Trac seems to have been made for us. I'm exploring options for using Trac here if you want to follow along.
Forgive me if there is vagueness in this question. In a nutshell, I've built websites for several years, working with PHP, Javascript, JSON, AJAX, HTML, CSS3 and ASP-(many years ago when I didn't know better).
Lately I'm coming across projects where the clients prefer the app on their desktop (offline) rather than on the web.
Is it going to be a long road ahead to learn this? I can't get my head wrapped around going from web to desktop. Could someone give me a 50,000 ft overview of what I need to research? No details needed.. just an overall approach.
Are there packages out there I should read into which give tools for running a system "offline" so to speak? I'm not sure of there terminology or even where to start.
One of the main reasons is that features like Imagemagick seems too slow to process images online. The client would like tool where they don't have to rely on the speed of internet. Go Daddy is useless when it comes to upgrading their tools and I hope to do a standalone system for image processing.
Also, I'd like to get into making desktop widgets like time tracking tools, or anything that can be self-contained and running from a downloaded program that I would create.
Is this a really bad idea?
Try Auto it, it has a tiny foot print and it is great for writing small tools. It does have an GUI editor.
example of auto it widget
auto it widget
Other than that you could use industrial strength Microsoft Developer studios for either VB or C# . You can even do apps in VBA excel.
The question says it all, we know most of the hosted web-based UI prototyping tools out there, but we would like to have ours hosted on our own internal servers, preferably with on-line multi-user collaboration functionality (i.e. users modifying the prototype, making comments, etc. in parallel).
Any suggestions will be appreciated.
Sketchflow (in the top-end version of Expression Blend from Microsoft) meets almost all your criteria. It ain't cheap, but it is very powerful.
The deployment package of a Sketchflow build can just be placed on an internal server (no IIS required to deploy).
Multiple users can overlay their comments and pen drawings over the top of the screens. Their feedback is packaged as a unit and sent back. All feedback can then be loaded back into the Expression Blend project and the feedback from 1 or more users viewed overlaid on the correct screens.
It does not meet your multiple-user authoring requirement though, but as they say "too many cooks...".
Most tools are either desktop based or hosted. Seen very few which offer a downloadble multi user version. iRise is one choice with the editor as a desktop product and a centralized server for sharing among users. The budget is typically from $50K to $250K. A similar option exists for Serena composer as well, not sure of the price though.
Both iRise and Serena are not real collaborative tools, the central server is only for sharing the finished prototypes and getting feedback.
If the requirement is for a completely web based multi user tool then 10screens can be an option - http://www.10screens.com. The same product available on the site in a hosted mode can be downloaded and installed on your own servers.
I would like to know if you could share some (trusted) sources of information (books, URLs) that you consider the most relevant for learning Windows Installer. They could be for starting on this technology or for an advanced or professional level of knowledge.
Where can a future deployment engineer start and where can he/she go to keep on the right direction (step by step)?
I'm obviously biased but I think my blog and the WiX toolset are good ways to learn:
http://robmensching.com/blog
http://wix.sf.net (click on the Manual or Tutorial links on the right)
Some people like Phil Wilson's "The Definitive Guide to Windows Installer" but I never read it. I learned straight out of the MSI SDK.
I did 7 years of writing InstallScript installers before ever picking up MSI. While there is a huge difference between procedural script-driven imperative installs and data driven declarative installs, they both do the same fundemental thing: deploy software.
I became an MSI Expert but studying everything I could on the domain, writing LOTS of installs and by blogging for 7 years and answering over 4,400 posts on the InstallShield community forums. The only way to go in my book is to have been there and done that.
So the first step in your quest should be to understand the Windows Platform and related technologies very thoroughly. These evolve over the years but you should get a decent understanding of:
Fundamentals
Registry
FileSystem
NTFS
ACL's
DLL Types ( Win32, COM, .NET Assembly)
Win32 API
.NET Base Class Libraries
Service Control Manager Drivers ODBC
SQL IIS Active Directory ( GPO, LDAPand so on )
Global Assembly Cache
WinSxS Cache
DLL Hell
Good and Bad Installer Behavior
The second step is
Tools
Now let's start to writing installs. As Leslie ( Easter I assume ) said in another answer, pick a tool and learn how to use it to accomplish the above things. But don't stop there, as soon as you can go to the next step.
MSI
Start digging deep down into how your tool is working behind the scenes as soon as you can. Just as you can write C# in .NET and look at the IL with ILDASM, learn to use ORCA and see what is happening. Read the MSI SDK. Yes, it's rough and cryptic but I spent 3 months commuting beween DC and TX and I spent at least 16 hours a week traveling away from internet connections but nothing except the SDK to read. Read it, know it, live it... the cryptic help topics will eventually start to click and become second nature.
And finally, read my blog: DeploymentEngineering.com and every other blog you can find.
There is not a simple answer. The primary reason is that most install developers use a specific tool which in turn hides the bulk of Windows Installer behavior. While it would be nice if those developers had an in-depth knowledge of Windows Installer, that's not the case.
My suggestion would be as follows:
Focus on a specific tool. Many of the development environments offer a trial period and some are free. The on-line help for these tools plus the act of building some sample packages will be a useful process.
If practical, consider taking a training class for the tool. I know Flexera sells their basic and advanced InstallShield course manuals. They are a bit over-priced, but it does include need-to-know Windows Installer specifics. The problem you'll run into is that most documentation is specific to the tool without explaining a lot of the connectivity to Windows Installer.
You'll need the Windows Installer SDK -- in addition to the help file, there are some interesting tools and VBScript scripts. Orca is one tool that is included with the SDK and there are similar tools on the Internet (SuperOrca, InstEd, etc.). The SDK is not a great read but it is a great reference. As you come across specific questions regarding Windows Installer use the SDK help file to understand the deeper internals.
Google 'windows installer blog'. You probably don't want to hear that, but there are many great blogs available that cover many bits and pieces of Windows Installer. Make sure you pick up the Windows Installer Team blog.
No matter what path you choose, you'll find learning Windows Installer to be a hands-on process. I hope this helps!
I'm also biased, but this might be helpful. I recently revisited WiX for a real-world Windows Installer project and wrote up my solution which ultimately plugged into a continuous integration server.
The steps in the article take you through using WiX, localizing the MSI, and creating a bootstrapper for installing any prerequisites.
For learning, Tramontana's tutorial WiX helped me a lot.
A nice little blog post about how to debug custom actions is WiX and DTF: Debug a Managed Custom Action and how to generate an MSI log.