Task: We are looking to develop a WebService that basically performs certain management operations on files such as indexing, compression, streaming. the file can be anything from text to images to video and we manage it all.
Problem: After the architectural discussion we decided to choose the programming platform. Now personally i am comfortable with WCF Services and have had my share of experience with them and played with them enough. But the other developers on my team are leaning more towards python and are looking to base the service off Flask or Bottle
Now i have tried searching for differences but all i find is how to implement WCF using IronPython. Language is not a problem as we all learn it and we have time to spend but what is important is that we get it right. Speed and Reliability is of the utmost importance and so I just need some advice or may be a few benchmarks to show which direction is the best.
Additional Info: we'll be hosting the service on AWS so we've got good enough hardware requirements and are not affected by lack of scalability. Also db will divided between NoSql and RelationalDB.
I was wondering what are the pain points for other developers when learning Windows Phone 7 programming. For me is switching between application pages and the MVVC. If you have any hints or resources helping to overcome these pain points, please share it.
When switching to a new development platform there are bound to be new things to learn.
If you're coming from a web background it's important to note that you're no longer in the same stateless world as the web. There is also a different navigation model. (Especially if you're developing in XNA!)
The biggest, and in my opinion, most important difference in moving to developing for the phone (or any mobile platform) are teh follwoing 6 points.
"Mobile" applications are used
differently to desktops ones. -
Expect users to have less time to
spend with the application and be
doing other things at the same time.
Input is different. - Consider
[multi-]touch as well as voice,
location and sensors rather than
mouse and keyboard.
Output is different. - Even if just
considering output to the screen,
it's very different developing for a
small screen than a large one.
Connectivity is nott guaranteed. -
Create apps which work offline and
are occassionaly connected. Don't
assume a network conneciton is
guaranteed or fast.
Performance is important. - Partt of
the way that"mobile" applications
are used differently to their
desktop counterparts creates a
different expectation from users and
they are much less tollerant of
applications which are displaying
the equivalent of a wait cursor. Do
no more than you have to and be sure
to keep the app/device as responsive
as possible.
Resources are constrained. - The
most important consequence of this
is to do no more than you must, so
you can preserve battery life.
Afterall, if you run down the users
battery they get frustrated and
can't use your app.
Unfortunately the best way to avoid running in to problems is to develop a detailed knowledge and understadnig of the platform.
With that i mind, I'd recommend the following resources:
For general information check out the MSDN documentation.
I'd like to particularly draw your attention to:
the design resources, particularly the UI guidelines - so you can create something which looks like it is actually part of the platform.
and the fundamental concepts - so you don't waste time trying to do something which isn't possible.
Other useful resources are:
- Code samples
- Online training (there are updates to this coming soon)
- the book by Charles Petzold
There is a great, organised resrouce list here which covers pretty much all the major points of Windows Phone 7 development.
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 9 years ago.
Improve this question
This is slightly off-topic, but can only be answered by programmers and is useful to many programmers:
Do you think it is useful to use a bug tracking system to keep track of personal todo items and to Get Things Done? I have not tried that; in fact, I don't have much experience with bug tracking systems. For my todo lists, I have played around with Google Tasks and Remember The Milk, but both of them have shortcomings:
Google Tasks: I like that you can create todo lists easily, can reorder items in the list and easily create hierarchies. But it is way too simplistic and does not allow to tag tasks or move tasks from one list to another.
Remember The Milk: It is nice and sleek, but you cannot create hierarchies of tasks, cannot arbitrarily reorder tasks and cannot set dependencies of tasks.
That's where a bug tracking system should come in:
Since I think (maybe too much?) like a programmer, my tasks have a natural hierarchy and a tree of dependencies, like in a Makefile. Here are two examples:
The task of writing my thesis is done when several milestones are done. Some of these milestones can run in parallel (writing background chapter, running experiments A, running experiments B), others depend on each other (writing main chapter depends on first getting results from experiments A).
The same is true for more personal goals: I want to host a dinner party, which requires finding a good date, finishing the guest list, making invitations, finding nice recipes, cooking, ...
For me, all these tasks involve hierarchical dependencies and milestones that bug tracking systems should be able to handle?
Here is an article that explains how to do advanced GTD with Remember The Milk, but he has to use several workarounds: (1) add a general tag 'wait' to tasks that are waiting for others to be completed but you cannot enter the IDs of the tasks that they are waiting for, (2) starting some special tasks with "." so that they are at the top of the alphabetically sorted list and signal that others are 'below' it as subgoals. Bug tracking systems should be able to handle these things much more naturally?
Does anyone have experience and can recommend a lightweight bug tracking system that might be good for this? Other requirements: Should run as web app, should allow me to tag a task with several tags (like 'work', 'fun', 'short-task', 'errands', ...).
I have used quite a few bug/issue tracking systems and also task management and project management systems so far for professional purposes. Personally I am big fan of Getting Things Done, time and task management. For Getting Things Done, I also had my time with Google Tasks and Remember The Milk. Although they simply do the work, they have several shortcomings, as you mentioned before.
I have tried several things and within the scope of this question I will try to breakdown my experience with this tools based on your requirement.
Bugzilla
Bugzilla is a mature product which has several features, it is a great bug tracking software. You can easily create a demo instance if you want to give it a try. But based on your requirements, I don't think it is the best fit.
Redmine
I have played with Redmine, it is OK as an issue tracking system but I was not very satisfied with its usage. You can have a look at the demo page.
MantisBT
I also happen to play with MantisBT and in my opinion MantisBT is a barely OK bug tracking system and I don't think it will be the best fit.
Team Foundation Server
I use TFS on a daily basis, but mostly for version control and it is many things besides version control. Work items can be used as bug tracking and it a great tool for team management but it is not lightweight and I also don't think it is the best fit.
Wunderlist
Wunderlist is a great tool for GTD. It is very simple and list based. You can create several lists, you can create reminders etc. For personal use, this is my favorite choice for GTD, up to now. Although pro version has a few more features, it won't solve your problems based on your requirements.
Basecamp
I have used Basecamp, mainly for project management, task and issue management. You can create projects, and create tasks for each project. It is very easy to use and if you want to collaborate it is very easy. But it has its shortcomings.
In my humble opinion conventional issue tracking systems are no good for Getting Things Done. From what I understand, you need a simple yet powerful project management tool. Which brings us to our winner.
Trello
Trello is a web-based project management application developed by Fog Creek Software
Some of the features are:
You can create projects. Projects are shown as lists.
Create tasks. Tasks are shown as cards. You can also assign tasks to
other individuals.
You can move cards easily from one project to another, i.e. from
Doing to Done.
You can use tags, attach files and create checklists and etc.
It is very well explained in this short video : http://www.youtube.com/watch?v=xWiunIolf4s
Also #JoelSpolsky explains it in detail here : http://www.youtube.com/watch?v=aaDf1RqeLfo
In my opinion Trello would cover exactly what you need, most probably even more.
FogBugz is a nice for GTD
I keep my (mostly work-related) GTD tasks in my FogBugz database and am quite happy with it. You can try the hosted version for free:
http://www.fogcreek.com/FogBUGZ/IntrotoOnDemand.html
I'm very happy using https://www.pivotaltracker.com for this purpose. Pivotal tracker is an agile project management tool. It lets you estimate and track the effort (on a scale of 1-5, not real time estimates.) It then lets you track your velocity on each specific project.
Within a project stories can be in different panes such as 'active', 'backlog', 'icebox', etc. It's easy to see at a glance what is in progress and what is coming up. Simply drag and drop to rearrange your queue of stories.
I have a number of projects such as my boat, homestead, etc. Stories can have tags and also subitems.
Pivotal Tracker doesn't have any scheduling or reminders. The idea is that you'll be looking at it daily and reorganizing stories as you go.
It also has an open API and quite a few supporting apps have been built for it. I personally use PivotalBooster on my mac, especially during my internet blackout from 7-9PM daily.
One thing I wish I could do easily is print out the stories for a project. It shouldn't be hard to do with their API, I just haven't taken the initiative.
Before this I tried Trello and found it to be bit more work than Pivotal Tracker. I also spent a fair amount of time with org-mode in emacs, and while it is pretty amazing I found it cumbersome.
I've had alot of success using the Agile Software Project Management Software JIRA. It has user stories, estimation, customizable formats, export to excel, and many other great features. There is a free version, and the commercial version for up to 10 developers is $10 a month. It has many plug ins available including ones that connect to github and svn repositories. You can easily attach images and files to each issue/bug. You can easily use it for new projects as well as bug tracking.
Redmine, pretty awesome, free, opensauce etc.
http://www.redmine.org/
Edit:
There is a fork of Redmine that looks promising, ChiliProject, https://www.chiliproject.org/
Demo is here.
Not sure why they forked Redmine, but i believe they wanted faster release cycles and more open to community changes.
I suggest http://www.abstractspoon.com/tdl_resources.html I have used it for many years and find it quite sufficient for my needs. I believe it also fits what you are looking for.
Look at the comparison of existing issue trackers.
http://en.wikipedia.org/wiki/Comparison_of_issue-tracking_systems
I think you can easy make your choice.
Regards.
I've used dozens of application lifecycle management tools, from basecamp to jira to wunderlist, assemblr and many more, but the one I keep coming back to is the simple issue / milestone managment tool set built into github.
I like github mostly because it's got all the source code version control stuff a project needs, (Git is really nice to use) plus zillions of hooks for notifying other systems upon commits. It's got simple collaboration setup and management, allows you to publish pages to promote and describe your project, allows multiple projects, accounts range from free to cheap to corporate depending on your needs (I've found the cheap option works very well for me as a freelance developer), and the task / issue / milestone management system is simple but excellent. It also throws in a very good wiki system for collaborative documentation, and allows hooks for a range of continuous integration / build and test on commit tools, meaning you can control all aspects of a project lifecycle easily from one dashboard. It's also much more lightweight than many others such as trello which rely on a lot of client-side fancy stuff and often feel sluggish when all you want to do is quickly pop in and tick off a task. There are also good apps for iPhone and Android that interface well with GitHub, meaning you can use it as a mobile task manager with ease.
So, based on the requirements you specified in your question I'd suggest GitHub would satisfy you completely.
Note I am not affiliated with GitHub in any way, this is a recommendation based on my years of actual experience with many such systems.
Many poeple have online startups in their head that may potentially attracts millions, but most of the time you will only have minimal budget (time and resource) to start with so you want to have it delivered within a year's time. Short after launch, you are bound to perform one or a series of upgrades that may include: code refactor to newer foundation, adding hierarchy(ies) in software architecture or restructure database(s). This cycle of upgrade/refactor continues as:
New features avaiable in latest version of the language(s)/framework(s) you use.
Availability of new components/frameworks/plugins that may potentially improve the product.
Requirement has changes it's direction, existing product wasn't designed to cope with new needs.
With above as prerequisite, I want to take this discussion serious and identify the essence of an upgradable solution for a web application. In the discussion you may talk about any stages of development (initial, early upgrade, incremental upgardes) and cover one of more of the following:
Choice of language(s) for a web application.
Decision for using a framework or not? (Consider the overhead)
Choice of DBMS and its design
Choice of hardware(s) and setups?
Strategy to constant changes in requirements (, which can be a natural of web application)
Strategy/decision toward total redesign
Our company's web solution is on its fourth major generation, having evolved considerably over the past 8 years. The most recent generation introduced a broad variety of constructs to help with exactly this task as it was becoming unwieldy to update the previous generation based on new customer demands. Thus, I spent quite a bit of time in 2009 thinking about exactly this problem.
The single most valuable thing you can do is to employ an Agile approach to building software. In particular, you should maintain an environment in which a new build can be (and is) created daily. While daily builds are only one aspect of Agile, this is the practice that is most important in addressing your question. While this isn't the same thing as upgradeability, per se, it nonetheless introduces a discipline into the process that helps reduce the chance that your code base will become unwieldy (or that you'll become an Architect Astronaut).
As far as frameworks and languages go, there are two primary requirements: that the framework be long-lived and stable and that the environment support a Separation of Concerns. ASP.NET has worked well for me in this regard: it has evolved in a rational manner and without discontinuities that invalidate older code. I use a separate Business Logic Layer to manage SoC but ASP.NET does now support MVC development as well. In contrast, I came to dislike PHP after a few months working with it because it just seemed to encourage messy practices that would endanger future upgrades.
With respect to DBMS selection, any modern RDMS (SQL Server, MySQL, Oracle) would serve you well. Here is the key though: you will need to maintain DDL scripts for managing upgrades. It is just a fact of life. So, how do you make this a tractable process? The single most valuable tool from any third-party developer is my copy of SQL Compare from Red Gate. This process used to be a complete nightmare and a significant drag on my ability to evolve my code until I found this tool. So, the generic recommendation is to use a database for which a tool exists to compare database structures. SQL Server is just very fortunate in this regard.
Hardware is almost a don't care. You can always move to new hardware as long as your development process includes with a reasonable release build process.
Strategy for constant changes in requirements. Again, see Agile. I'd encourage you not to even think of them as "requirements" any more - in the traditional sense of a large document filled with specifications. Agile changes that in important ways. I don't keep a requirements document either except when working on contract for an external, paying customer so that I can be assured of appropriate billing and prevent feature creep. At this point, our internal process is so rapid and fluid that the reports from our feature request/bug management software (FogBugz if you want to know) serves as our documentation when documenting a new release for marketing.
The strategy/decision for total redesign is: don't. If you put a reasonable degree of thought into the process you'll be using, choose mainstream tools, and enforce a Separation of Concerns then nothing short of a complete abandonment of HTTP and RDBMSs should cause a total redesign.
If you are Agile enough that anything can change, you are unlikely to ever be in a position where everything must change.
To get the ball rolling, I'd have thought a language/framework that supports the concept of dependency injection (or Inversion of Control as is seems to be called these days) would be high on the list.
You will find out that RDBMS technology is not easily scalable. All vendors will tell you otherwise yet when you try multiple servers and load-balancing the inherent limitations will show up. Everything else can be beefed up with "bigger iron" and may be more efficient code but Databases cannot be split and distributed easily.
Web applications will hopefully drive the innovation in database technologies and help us break out of the archaic Relational Model mind-set. It is long overdue.
I recommend paying a lot of attention to this weak link right from the start.
On the software development projects that you have worked on, what has been the approximate cost (expressed as a percentage of total system cost) of system integration? System integration includes integrating with other software, databases, etc.
33.3% because system integration is usually associated with a fair amount of risk that is not as prevalent in other phases of the projects (coding, documentation, etc).
This is a very difficult value to estimate, especially when you are facing integrating with a system that you are not familiar with. The best you can do is track you or your team's past performance on similar projects and use those values to try to estimate how you will perform on new projects.
Generally, system integration will take longer if:
It uses a protocol, database engine, operating system, etc. that you or your team have not yet worked with.
Vendor or community support is lacking or unresponsive.
Official system documentation is not detailed enough or is out of date.
The system does not have large global market share. Such a system will not have a wide user base and a big footprint in online programming Q&A sites such as this one. This may include new, less popular, or highly domain-bound systems.
Between 0 and 99%. I have built systems with no integration at all and systems that were basically just integration of other systems. The nice thing about integration can be that it is easy to estimate. But only when the interface is fully understood. Then it is just a duplication of functionality.
There are some complicating factors, though. They can make it very expensive to impossible:
is the system you have to integrate with well understood (do the programmers who developed it still work there?)
is the system you have to integrate with well-refactored (and has automated unit and acceptance tests)?
single or multiple platform?
are domain experts available?
It depends on the integrated system's importance and other factors.
I've worked in systems with integration in a bunch of web services that were the application's core. If the web services were down, our system was simply useless.
I would list the following variables when trying to evaluate the cost:
How many systems do you integrate and how frequently are they changed?
Do you have documentation to these systems?
Is it a third party component/service that you have no control of?
If you have control over the integrated system, does it use too much "legacy" code, like COBOL; (just an example, at least where I work COBOL programmers are expensive);
Are your employees experienced with the integrated system and with the application itself?
In case of failure of the integrated service, what is the impact on your application?
How much is an employee's hour rate in these scenarios? How many hours they would need to work on these integrated systems? How much money do you have for your project? I can't say it's going to cost X% on your case without knowing these details, specially the last one.