Reviving an obsolete Fox Pro application [closed] - reverse-engineering

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
I am working with a client to revive his old software which was developed around 14 years ago using Foxpro2.6.
My problem is that client just have the source code (in the form of .prg files)and database files with him but there is neither any documentation nor comments in source code to guide me what does what...even the database files are not correctly named.
My only option in this scenario seems to go through the .prg files and understand which command updates which database record and how....but there are around 300 .prg files and I don't know Fox Pro at all (I mean I was in 9th standard when this thing became obsolete!!).
Any suggestion or idea to make this work easy, perhaps a .prg to C converter which can help me a lot.
Please help....it is becoming a nightmare
PS : I dont have problem with the database conversion but the front end and functional source code which too is written in the FoxPro2.6 and saved as .prg extension is the problem as I dont know the language and there is no documentation.

In reality, you will need to rewrite the application from scratch.
The first thing I would advise to do is to convert a copy of the project to the last version of Visual FoxPro (9 SP2), then at least you have an IDE to work in and some basic tools like search / replace, and reformatting source code to make it more readable.
See http://www.alvechurchdata.co.uk/foxconvert.htm for basic details on conversion. Note that if the original program used third-party or custom libraries (e.g. .fll files) then you won't
be able to run the converted program.
FoxPro 2.6 is a straightforward enough procedural language: unfortunately it is (almost) inevitable that the program logic will be mixed in with the window (screen) definitions and behaviour, and as SQL is built into the language then the data access will all be mixed in there as well.
If contracting someone with more experience to do the conversion is no option, then you might as well just dive in - there are still plenty of people who know FoxPro2.6 to help out when you get stuck: start from the main program and see where it goes from there.

As Stuart mentioned, conversions and such... I actually do Foxpro / Visual Foxpro and work with another individual who would be able to contract with you to help jump-start and wrap your head around the conversion and quick analysis of what's really going on.
Yes, old .prg files are somewhat simple, but even back in the old FoxBase, FoxPlus, Foxpro Windows days, there were a lot of ugly coders out there. If you are interested, let me know. I've been doing Fox since before Microsoft bought it...

There's an foxdoc.exe in FP2.6, when run, you will have full documentation which prg it calls and which dbf it uses. Hope this helps

Related

My open source library is stabilising. Now how to get attention? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I had recently stabilised developments of a major open source library written in Java. I have then published an article on the server side, which has brought me a lot of positive (but also critic, constructive) feedback. And a first contributor, which is great!
See the article here: http://www.theserverside.com/discussions/thread.tss?thread_id=61162
And the library: http://jooq.sourceforge.net
So with all of that good feedback, I have a great feeling about my project, in a way that I am creating something useful and original. Some key ideas behind my project, and why I think it is original:
It's an or-mapper. OK, now that really isn't original... ;-)
It has code generation in it. OK, still not original. But that's always nice.
It allows for creating type-safe queries in Java using its own domain specific language. That's better. No string concatenation. JPA has only just recently copied criteria queries from Hibernate.
It allows for doing so with all SQL features, including complex joins, nested selects, unions, aliasing, etc. Now that seems original to me. OR-mappers tend to try to ignore the relational data model behind RDBMS.
It supports all kinds of native non-standard functionality like UDTs, stored procedures, native functions, etc. I don't know any or-mapper that does that.
I think that these key ideas are useful for a very specific type of developer. That specific developer
interfaces Java with huge legacy databases.
knows SQL well and wants to use it extensively.
doesn't want to learn any new language (HQL, JPQL, etc)
doesn't want to spend one minute fine-tuning some sophisticated XML-configuration.
wants little abstraction over SQL, because his software is tightly coupled with his database. Something that I think the guys at Hibernate or JPA seem to have ignored.
EDIT: needs a strong but light-weight library for database access. For instance when they develop for mobile devices (see comment by SRM).
Now is the beginning of the hard work. How to get attention? How can I attain a bigger crowd? How can my project become relevant? How to reach to that "specific type of developer"?
I would say set up a professional looking site (one that doesn't look like it was designed by a 15 year old script kiddie). Make sure you have ample documentation with plenty of help and/or tutorials for using your library. Example applications are also good to see a real world usage of the library.
Once you have that setup I would do some typical SEO to drive traffic to your site. This includes blog articles, links back to your page and or articles, and possibly buying some Addwords from google.

Documenting a Access Application for Developers [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 5 years ago.
Improve this question
I need to document a MS-Access application that was created, developed and maintained completely by a power-user over 10 years.
This is an interesting situation because what they want is a manual so that a future developer can come in without prior domain knowledge and make changes to the frontend or the backend in a timely manner.
There are a few questions on my mind for this little project:
What is a good manual design creating application? Microsoft Word doesn't quite cut it.
What kind of things would you, the developer, need to know in order to make changes to things like forms, reports, tables or other Access objects?
Anything else I missed? Any pitfalls?
You could start with generating some automatic code documentation using MZ-Tools add-in for VBA. The same add-in can help you clean unused variable declarations, generate line numbers, reorder procedures within a module, etc.
Documenting forms is more difficult. My proposal would be to keep a screen shot, alltogether with a .txt file obtained through the undocumented application.saveAstext method.
In my experience, Access and VB6- based programs are plagued by more code replication and technical debt than programs in mainstream languages. I'm not sure why. Maybe it's the nature of Access as a "prototype" or "toy" database (though it can be quite powerful when yielded correctly).
If I had to choose between expending time on documentation and expending time on reducing technical debt, for example by remodularizing, eliminating repeated code, splitting long functions, etc., I would choose the latter. The improvement to maintainability and readability would be greater.
I know this is closed for long, but I can't refrain adding my 2 cents:
In the case mentionned, I think the most usefull doc to produce is a FUNCTIONAL documentation (which should have existed before starting the development in an ideal world).
Second is within the code itself, and that includes the VBA but also the field descriptions which can be set in Access and SQL Server.
Third is a (or a set of) nice database diagram.
Once you have that, all the rest can be generated by the new developer using HIS favorite tools.
Speaking about tools, I particularly like and recommend:
MZ Tools: specially to easily find which routines call the one your looking at
Smart Indent: to properly indent code. Trying to read badly indented code makes me sick
SqlSpec: (not free) generates HTML doc of the database itself for most database engines
Have you tried the using the built in database documenter? It will print out all tables, indexes, forms, controls, each property of controls. Code, the sql used and just about any thing else. This results in huge, but just massive printouts. However, while it will kill a few trees in the process it sure is a great way to impress the boss.

Bare minimum you need to work for an open source project [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
I have recently started working on some open source project which I found relevant to my interests.
During this initiation period I came across some terminologies/stuff that I am not acquainted with, like configure, tool chain, binutils, etc. which I agree depends upon the type of project you are working on.
Now my question is, are there some bare requirements a developer should know before starting to work on the project?
Any help/reference will be greatly appreciated.
EDIT:
I have seen the GNU configure and build system in most of the projects I have seen.
If someone bothers about it "The GNU configure and build system" is a good place to start.
If it's a pre-existing one, you'll need to read their development docs (if any), learn how to use their version control system, and have the requisite tools for building the code and running it.
If you have all that, and the knowledge of the code/language, then you just need enthusiasm and some spare time :)
I wouldn't define them as bare requirements in the sense that it appears you are looking for. If you're a programmer you already have (hopefully!) the self-learning and problem solving characteristics that probably led you to be a programmer at first.
You'll never really know 'everything', and will likely learn something new everywhere you go. Heck, I got my current job never even hearing the words "Model-View-Controller", but picked up the concept in no time.
Your examples, toolchain and binutils, are not complex concepts and a simple wiki article should suffice.
I'd suggest downloading all the source code and making sure you can build it yourself as a first step.
Try and make sure you are familiar with the overall design and documentation before attempting to make any changes to ensure you don't inadvertently break anything on your first change!
The terminologies being used will probably depend on the technologies being used, for example an open source project written in C++ and running on Linux, will likely be very different to a C#/.NET application build to run on Windows.
It depends on how much involvement you will get into. If you just want to contribute with a feature, just get the tools to build the project, an editor to change the file and enough doc reading to find injection point for your feature. If you can find someone to help you getting started it will be fairly easy.
If you are to be committed to the project I recommend learning build tools, project history and aims. Also how the current authors try to solve the problems, their perspective on the project will help.
I would say being able to understand all of the architecture, tools and technology for whatever project you're working on is a must.
However, you then tried to make this a generic question that applied to any open source project. You kind of answered that for yourself didn't you?
which I agree depends upon the type of
project you are working on
I would think that depends entirely upon the project. Most well set up software projects will specify:
What language(s) they're written in
What developer environments (if any) they're set up for
What tools you need to build/compile/run the project
Test data with which to test the software
What are you working on? Are you sure they don't provide any of this information?
It depends on what you qualify as "work" on the project.
Most of the answers here suggest that you're coding (and your question hinted in that direction), but there are things that you can do to contribute to projects -- like testing and documentation -- that can be done without knowledge of how the program's written.
Now, for the coding aspect of it -- if it's a smaller project, I'd try to figure out what the other contributor's motivation and grand plans/goals for the project are. As with any team, coming in and trying to take things in a completely different direction than the others are planning, even if you have good intentions, can cause all sorts of problems.
(and then there's the technical advice that everyone else said ... source control, build system, project architecture, toolkits used, etc.)
It depends, as you say, on the project.
You'll have to know how to work in the language, you'll have to be familiar with the source code control system they use (usually subversion). You'll have to be able to build (usually Ant, often Maven).

Managing Code Written for learning [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I want to ask about the different techniques they used to remember various programming techniques. We go through various books and various online tips and tutorials we also get so many ideas from the code written by somebody else.
Now all these inputs are memorized or stored in some format so that it can be found easily when referred. Absence of such storage may result in rewriting the code or reinventing the wheel.
I use to create one Working folder where I keep all my trial code but sometime after few days / months since the code is not tagged or named properly its difficult to find it out again.
For Perl, I have a module I call staging.pm, and use staging; is a pragma in my code which allows me to use experimental, not fully developed code in my development. This developmental code will be placed in a branch called "staging" off of the user library directory. The main thing that the module does is put my staging directory at the head of #INC. Once my code is mature--if it ever is--it will be moved into my user lib directory.
As for scripts, they can be run from wherever they are and I use a directory named test off of the bin directory.
So that's kind of my approach. I don't know how useful that is for you.
It's like learning any other language or learning any other technique. When you read a book and you find it interesting you start associating what you are reading with real life situations and problems that you might have had before which the new learnt stuff will solve for you.
You might, after a couple of days or so forget what you have learned, untill you stumble upon the problem which you related to when reading the book or looking at the lecture. This specific type of memory is called something like association memory technique.
There are a lot of other different techniques to remember things by but a lot of them come down to relationships with other parts of what you already know.
Another example is Math which is something you force your brain to understand but once you quit using it on a daily basis you will slowly degenerate the math-genious-cells.
Programming for me at least is just another way to express myself and when i learn new features it's just a new way to express things that might not have been easy to do before.
Edit
I might have missunderstood the question.. did i?
Well, for me, when I am trying to learn, I focus on learning the approach to solve the program, rather than a technique. That is important to me. Also, with regular day to day programming some techniques become ingrained.
The other thing I do is to maintain a notebook with my notes in it, code snippets, comments, shortcuts I have learnt over the years. This helps too.
Recently I have taken to maintaining my notes in Evernote, this makes is easy to search for and tag.
For web, I use Delicious + Firefox plugin to store what I already read.
When looking for a solution to something I can't solve, I got used to ask / search here.
And for my own solutions, I try to create reusable components and remember in which project I solved what and eventually get back to it later when I need it.
Whenever you study one programming technique like java you always map the corresponding things with C++ and perl.Java and C++ remain same in more concepts.And better you store your working folder in your mails so that whenever you need you can download and have it.
You could try a program like Surfulater. I don't know how well it works with code samples, but I do know that the developer was (is still?) active on the Joel on Software forums, so I'm sure he could be contacted with any specific questions.
If you use Windows, you can use Google Desktop to index part of your harddrive, including your program snippets.
If you can recall just some of it, Google will find it.
(Spotlight does the same automatically on a Mac)
On Mac OS X, TextMate provides a near perfect solution to this problem. TextMate is a programming editor that offers support for hundreds of programming languages and is customizable via the bundle editor. Through the bundle editor, you can add any snippet of code that you may want to memorize, and appropriately categorize it under its respective language. You can also assign hot-keys or character sequences to invoke a snippet and copy it to your current editing context.
I believe that Notepad++ is a similar tool for Windows, but I am unsure if it is as customizable as TextMate.

Best practices when taking a small project on your own [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I've always worked in small companies, mostly doing small websites, and they all sucked in project management.
That means I have no experience whatsoever (even though I learned a little bit studying on my own) about the best practices and tools when developing a project.
Currently I'm unemployed to finish college and I decided to take a small PHP project mostly to learn both the language and project management.
It's just an idea I had for a website, I don't need to get money from it and it is not big, so I'm not concerned with deadlines or business plan, or a main goal. The main goal is to learn the technical stuff.
The only thing I'm caring about is doing it right, you know, the best practices in PHP, server setup, security, the tools for the job.
I'm not asking for a complete rundown on any points, just things like
Remember to always sanitize user input
Use this tool to manage version
Remember to set this apache option
Here's a good link on how to organize your files
Things like these will be already of great help!
Thanks
Non language specific:
Devise an error handling strategy early. What will you do when error conditions occur, will you log errors, how? where? What information will you log? Will you throw exceptions, return error codes?
Assume that your website is succesful, people start using it, then it breaks how quickly can you figure out what went wrong? Consider your whole error strategy from that perspective, not just from what happens while you developing and you're in control.
Some things that helped me a lot (in no particular order)
Version control (SVN in my case)
issue-tracker/wiki (e.g. Trac)
if you are writing markup: some kind of tidy
... and a validator
if you are writing code: a lint tool for your specific language
TODO-list app (for small TODOs)
a cheap VPS host to test things (I also use mine to host SVN and Trac)
There's a good question already answered about bug tracking and version control for single developers.
As for PHP style, I usually like to follow the Zend Framework guidelines. For deployment advice, you might want to head over to ServerFault.
Here's some answers to the project management / best practices side of your question:
https://stackoverflow.com/questions/601759/what-professional-standards-do-you-maintain-in-a-side-pet-project
Start off by choosing a framework you're comfortable with. I would recommend Code Igniter, CakePHP or Zend Framework. It will help(force) you with a basic organization of your code and files. All these frameworks has dedicated forums with passionate developers.
From the project management angle I would recommend you to set goals and milestones. It will help you get things done even though you're learning. Set target of that you should accomplish for this month, this week and today. Small and easy targets like "create signup form" or "set homepage set". It feel so good checking those off. There is a lot of tools to use for this, like Backpack or Basecamp (free versions) or Things (mac application).
Be sure to use PHP5 and not copy ugly PHP4 code.
For project management software, check out DotProject (http://www.dotproject.net/).
About PMS (Project Management Software), you can take a look at
[http://www.axosoft.com][1].
This compagny edits OnTime, a very nice PMS.
Moreover, this software is TOTALLY free for a single user !
This software provides full support of SCRUM development method, for me one of the best !