Drag a dot in Squeak I am looking for the best bid or bids for this project, not necessarily the cheapest. So if you’re good, please feel free to bid. The purpose of this paying job is to find a Smalltalker or Smalltalkers who can do GUI programming of the caliber I’m looking for. The jobs I want to do in the future are definitely more sophisticated than what I’m proposing here. I want to engage as many people as I can afford, so again, feel free to bid. If you’re interested but don’t like my contract, please suggest refinements: if you’re good I’m definitely interested in you. I don’t like all this legality but it’s for our mutual protection.
1. At the user’s command, entered as a Smalltalk expression in a Workspace, a new window opens with a single circular black dot 15 pixels in diameter in the center of the window.
2. If the user left-clicks down anywhere within the dot and holds the mouse key down, the dot will follow the mouse point anywhere the user goes within the window.
3. If the user moves outside the window while dragging, the dot freezes in the position where the mouse left the window.
4. Naturally, if the user lets go of the mouse, the dot stops moving and stays in place until the user grabs it again as described in specification 2 above.
5. At no time may there be any flashing within the window. There can also be no refreshing issues such as scraps of the dot left lying around at any time.
6. The user should not be limited to opening a single dot-dragger window. There should be no logical limit, only the memory and other physical constraints of the machine.
7. Performance: I expect the dot to be under the mouse cursor at all times unless I drag at the highest speeds, in which case I expect the dot to catch up and be under the cursor within 0.3 seconds after halting mouse movement.
8. Don’t hog memory. I should be able to resize the window from 30x30 to full-screen on a single-display Windows machine and not notice any drop in performance. I propose that this project be divided into three payable stages as follows.
The payability details are described in the Payment section below.
1. When the user executes a command in a Workspace, a window opens with a 15-pixel-diameter dot in the center. This will test your ability to open a window and draw graphics.
2. When the user executes a command in a Workspace, a window opens with a 15-pixel-diameter dot in the center which then moves smoothly at 3 pixels per second to the right edge of the screen. When it vanishes into the right edge of the window, it reappears at the left edge of the window and resumes its left-to-right movement. This will test your ability to animate graphics cleanly.
3. Full conformance with the eight specifications above. Style I am always looking for code that is simple, beautiful, readable, and profound. This is a great ideal that is only rarely attained. But I’m a lot more interested in simple, beautiful code than unreadable code that allegedly runs fast.
In fact, I think that large-scale performance follows naturally from beautiful code. More practically, I am interested in quality attributes: readability, maintainability, changeability, refactorability, malleability, testability, and so on.
I’m interested in big projects, so you may not be the only person reading your code. Your code should conform to the guidelines in Smalltalk with Style (full text at: [url removed, login to view]~ducasse/FreeBooks/WithStyle/[url removed, login to view]) And Kent Beck’s Best Practice patterns (Amazon reference: http://www.amazon.com/Smalltalk-Best-Practice-Patterns-Kent/dp/013476904X/sr=8-5/qid=1168756834/ref=pd_bbs_sr_5/102-4803551-9551307?ie=UTF8&s=books).
If you find a contradiction or have any question, ask me. If I don’t respond in a week, you may proceed with coding. Note that the terms of the payment section still prevail if I find your work unsatisfactory (briefly, you’ll still get paid as per the section below).
Complexity bounds 90% of all your methods should be 7 lines or less. If you find you can’t conform to this, let me know why and we’ll try to work something out.
In principle, you should always be able to shorten methods via the “extract method?? refactoring. Keyword messages cannot be nested. Instead, refactor them so the inner call gets stored in a temporary variable. Loops cannot be nested.
Instead, extract the inner loop into its own method. Commenting Each method should be commented as follows:
Description: Brief description of what the method does and why it is there. If it’s doing something interesting, explain how it works.
Assumptions: What needs to be true for this method to run properly.
Post-conditions: What new things become true when this method is done.
Initials: Your initials, so I can keep track of who wrote this method.
Deliverables Deliverables must come in Squeak Smalltalk source code format. Once I receive the deliverables, I receive all rights to them as well. They become my property.
Code samples I encourage you to send code samples.
Payment My goal is to avoid conflict, arbitration, and all that other unpleasantry. I would like to have a great working relationship with you. So I’ve designed this payment section to make sure that you get paid to do the work I ask you to do while simultaneously minimizing my risk if things go bad.
The approach is to divide up work into small chunks: I ask you for a chunk, you do it, I pay you. If I like it, we can go on. If not, I still pay you for that chunk, but I can then bail out, so our risk is minimized.
More formally, here we go: All payable work will be conducted on a fixed-price basis. These projects will be divided into at least three separate stages. Each stage will be independently payable with a sum not to exceed fifty U.S. dollars ($50) or the total bid divided by the number of stages, whichever is less.
Project schedules will be mutually agreed upon by both parties. You will only be paid for work when I tell you to do it. In particular, I need to give you permission to begin a stage before it is payable.
Example Suppose you and I agree to a five-stage project. Suppose also that you complete stage 1, I like the work, and I pay you for stage 1. Suppose further that stage 2 is completed to my satisfaction??" and I pay you for stage 2. Finally, suppose that you complete stage 3, but I am not satisfied. At this point, you may complete it to my satisfaction and get paid when I am satisfied, or you may alternatively demand payment for stage 3 within one week of my declaration that I am unsatisfied, in which case I will pay you for stage 3 but may then terminate the whole project, so stages 4 and 5 will be terminated before commencement of those stages.
Payment for unsatisfactory work not demanded within one week is forfeit.
Termination Either party may withdraw from the relationship entirely at any time. Final payment will be made according to the schedule above. Similarly, either party may withdraw from individual projects at any time, with payment as described in the schedule above.
Liability. In no case shall I be liable for any costs or damages beyond the payment schedule outlined above. All risks you undertake are your own. Satisfactory Progress If a project stage is more than two weeks late, it will cease to be payable. Acceptance of Terms By making a bid on this contract, you are agreeing to its terms.
1) Complete and fully-functional working program(s) in source code format of all work done.
2) Deliverables must be in ready-to-run condition, as follows (depending on the nature of the deliverables):
a) For web sites or other server-side deliverables intended to only ever exist in one place in the Buyer's environment--Deliverables must be installed by the Seller in ready-to-run condition in the Buyer's environment.
b) For all others including desktop software or software the buyer intends to distribute: A software installation package that will install the software in ready-to-run condition on the platform(s) specified in this bid request.
3) All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased. (No GPL, GNU, 3rd party components, etc. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site per the coder's Seller Legal Agreement).
Platform-independent Squeak Smalltalk source code