Bookmark Topic Watch Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Ron McLeod
  • Paul Clapham
  • Devaka Cooray
  • Tim Cooke
Sheriffs:
  • Rob Spoor
  • Liutauras Vilda
  • paul wheaton
Saloon Keepers:
  • Tim Holloway
  • Tim Moores
  • Mikalai Zaikin
  • Carey Brown
  • Piet Souris
Bartenders:
  • Stephan van Hulst
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Report post to moderator
Important notice: The SCJD exam has been replaced by the Oracle Certified Master, Java SE 6 Developer, which is similar in some respects but requires a training course to be taken (in addition to having a prerequisite exam). A lot of the content below still relates to the old SCJD rather than its replacement.


These are frequently asked questions relating to the Sun Certified Java Developer certification and the common answers to them.

You can ask any questions about the SCJD exam in the JavaRanch SCJD discussion forum


Frequently Asked Questions


  • Where can I find books / tutorials / links that will help me
  • Where can I find the official FAQ? (broken link removed)



  • What is the policy on posting questions I saw on the exam / details of how to do the assignment?



  • What other certifications do I need before I go for the SCJD certification?
  • I intend to go for SCJD, SCWCD, SCBCD, SCDJWS ... which one should I do first?
  • How important are the scores?



  • How do I sign up for the Assignment?
  • Where can I purchase the assignment in <your country>?
  • Where can I find information on Cost / Location of exam sites in <your country>?
  • Should I purchase both parts (the exams and assignment) at the same time?
  • What site do I use to download / upload my assignment and to see what score I got?
  • How should I name my submission jar file?



  • My voucher for the exam is about to expire, what can I do?
  • I purchased the assignment, but I have not received it yet, what do I do?
  • Help - I cannot upload my assignment
  • Help - I cannot upload my assignment and I have scheduled my exam for today
  • Help - I uploaded my assignment and it says I failed, with no score and no comments



  • How long do I have to complete the assignment?
  • How Long will it take me to complete the assignment?
  • Oracle says it takes 4-6 weeks to grade my assignment, it has been over 6 weeks. What should I do?
  • Should I wait to find out my score from the assignment before taking the essay exam?
  • How do I find out why I lost points?
  • Will I get an email when I pass / fail?
  • How do I contact Oracle Education / Prometric?



  • Why are there add and delete methods in the data class when we don't need it?
  • I don't have access to a UNIX box, do I have to test it on UNIX?
  • What fields should I include in the Fly By Night Services GUI's search functionality?
  • My assignment says I can't use AWT components, but all layouts are in the java.awt package - what do I do?
  • How do I implement the Model-View-Controller pattern for the GUI?
  • Which version of SDK should I use?
  • How can I find out when a version of the JDK was released?
  • Is there a new exam?
  • How may assignments are there?
  • When will the assignments be upgraded ?
  • I have downloaded two different assignments - which one should I do?
  • Has the marking changed between the old assignment and the new assignment?
  • What is 'General Considerations' / 'xxx'?



  • Why do we care about the magic cookie?
  • Can't we synchronize the update() method and ignore the lock() methods?
  • Why do we have lock() methods in the Data class?



  • How can I test my locking mechanism to make sure it is working properly?
  • How can I test my business service?
  • How can I automatically build the submission jar (and test if every file is in the correct directory)?
  • Is there a tool I can use to read the .db file I received with my assignment?





  • What is the policy on posting questions I saw on the exam / details of how to do the assignment?
     

    You may not describe or talk about the questions you saw on any of the Oracle exams - see the JavaRanch Policy on Real Questions for further details. (http://www.javaranch.com/realquestions.jsp)

    For questions / discussions on the assignment, in general we will allow discussion where members are trying to:

  • understand the assignment
  • get a suggestion on how to work on a particular problem,
  • are asking for feedback on small sections of code
  • get suggestions about which tools to use.


  • But we will not allow posting major parts of a solution. For example, you may not post your entire code for locking and unlocking records - this is a major section (currently worth 20% of the assignment) and sections of such code will be removed from any post. Posting just one method (e.g. the lock() method is usually considered reasonable).

    There are multiple reasons for this policy:

  • Oracle do not allow you to share your assignment or a solution to the assignment with others.
  • You have spent time and effort getting your solution right. It would not be right for someone else to just copy your solution without working it out for themselves.
  • If someone did get awarded the SCJD certification after copying your code, and were then given employment because they had that certification, the employer would probably find that the employee cannot actually do the work. Which makes the perceived value of this certificate decrease.
  • If people post too much code, then Oracle may, in the future, request that we do not allow any SCJD code to be posted.




  • What other certications do I need before I go for the SCJD certification?
     

    You must already be certified as a Oracle Certified Programmer (any version).




    I intend to go for SCJD, SCWCD, SCBCD, SCDJWS ... which one should I do first?
     

    There are several schools of thought...


  • Like SCJP, SCWCD is a theory based exam - learn the correct theory, then sit the exam and answer the multiple choice questions (drag n drop, single choice ...). If you enjoy that style of exam (or if you are just in the right "mind-set" to continue with that style having just done it for SCJP) then you might want to continue with SCWCD.
  • Alternatively if you are sick of just studying, and want to get your hands dirty with real coding and working on a real application, then SCJD may be more your style.
  • If you are trying to get certificates now to pad your resume faster / impress your partner faster / get a pay rise faster ... then you can probably study for (and pass) SCWCD faster than you can complete the SCJD assignment (see later question for thoughts on how long it will take to complete the assignment).
  • If your goal is to get all the certificates complete in as short a total elapsed time as possible, then you should be aware that there is a delay between when you complete the SCJD assignment and when you get the results (Oracle say it can be up to 6 weeks from when you submit your assignment / sit the exam to when you get the results - we have seen shorter and longer timeframes). So you might want to do the SCJD first, and then do SCWCD while waiting for the results of SCJD.


  • Side note: Given the time it can take to complete the SCJD assignment, and given that there is no timelimit set by Oracle, some candidates start the SCJD assignment first, and if they feel they need a break they go off and do some other certification then return to SCJD later.

    Of course, SCJD is the friendliest forum to visit




    How important are the scores?
     

    The SCJD certificate does not show the score. However, a nice percentage always looks good on a resume.



    How do I sign up for the Assignment?
     

    You need to purchase the assignment - you may have to contact Oracle. Contact details are on (broken link removed) - in many cases you can purchase the assignment on your local countries' website.



    Where can I purchase the assignment in <your country>?
     

    Take a look at the Oracle World Training centers website (broken link removed). There should be an office in a country close to you - you will be able to purchase the assignment through them. Frequently they provide the ability to purchase the assignment online



    Where can I find information on Cost / Location of exam sites in <your country>?
     


  • Go to https://securereg3.prometric.com/
  • Select your area of study (hint: IT)
  • Choose your country and state if applicable and click "Next"
  • Click "Schedule an appointment"
  • Select "Sun Microsystems" from "Client", and "Sun Microsystems (310,311)" from Program and click "Next"
  • Read the information on Sun/Oracle (NOTE THE CONFIDENTIALITY CLAUSES) and click "Next"
  • Select "310-027 -- SUN CERTIFIED JAVA DEVELOPER" - The price should be displayed at the bottom of the screen
  • Click "Next"
  • See the listing of the testing centers in your Country.




  • Should I purchase both parts (the exams and assignment) at the same time?
     

    You should be aware that as of February 2009 there is a 12-month time limit on completing the assignment.

    Vouchers are valid for different lengths of time from country to country. To the author's knowledge, this can vary from 3 months to 1 year (other periods may be possible).

    There have been reports of some Oracle offices telling candidates that they must purchase the exam voucher at the same time as they purchase the assignment. This is not the case in all Oracle offices though.

    My recommendation would be to only purchase each section when you are ready to use it. That way you do not have to worry about any time limits on each section.

    See also the question: My voucher for the exam is about to expire, what can I do?



    What site do I use to download / upload my assignment and to see what score I got?
     

    Thanks to Ravi Appala for passing on Oracle's response to an email regarding which sites to use:



    https://i7lp.integral7.com/durango/do/login?ownername=sun&channel=sun&basechannel=prometric









    You can also go to the Prometric web site (https://www.register.prometric.com/CandidateHistory.asp) which will show you whether Prometric have acknowledged that you have sat the part II exam. But that is all it will show you: a "Tested" status on the exam.



    How should I name my submission jar file?
     

    The website where you will perform the upload has these directions in the upload screen, but here is a quote from that page

    The name of your submission archive file MUST be derived from your Testing ID, as shown above. Your Testing ID is your 9-digit Social Security Number (U.S. only), or it might be another alphanumeric combination, e.g. sp1234567 (any country).

    Your archive filename MUST BE scjda-AAAAAAAAA.ZZZ, where AAAAAAAAA is your Testing ID, and ZZZ is the appropriate filename extension for your archive type (zip, tar, or jar).



    My voucher for the exam is about to expire, what can I do?
     

    Check the wording on the back of the voucher. It typically has words to the effect of:

    "You must register for an exam prior to the expiration date printed on this voucher. Voucher expiration dates cannot be extended. Your actual testing appointment may be deferred for up to one year after registration."

    So register for the exam before the voucher expires, then contact prometric and defer the exam. You may defer multiple times.

    Be aware that Prometric and the test centers themselves have requirements as to how much notification must be given before defering an exam. So dont leave it to the last minute.



    I purchased the assignment, but I have not received it yet, what do I do?
     

    Oracle do not send the assignment to you, you must download it.

    See the question What site do I use to download / upload my assignment and to see what score I got? for which website to use, and try and download it. If you cannot download it, you will be told who to contact, and what information to provide them in order to get permission to download it.



    Help - I cannot upload my assignment
     

    This is a very common problem. The first day you try to upload your assignment, you will get an error saying that you don't have permission to upload the assignment. When you see this error you should also see an address to write to in order to get your permissions updated (mailto:SunCert@prometric.com). By the next day you should be able to upload your assignment.



    Help - I cannot upload my assignment and I have scheduled my exam for today
     

    This happens quite often. Currently Oracle are kind enough to allow candidates to upload after sitting the exam. Make sure you do send an email to prometric to tell them that you cannot upload, and keep a copy of the email. And upload as soon as Prometric tell you that they have fixed your permissions!!!

    Do not rely on this happening though - Oracle does object if people deliberately plan to take the exam before the upload though, and if they feel that this situation is being abused, they may force people to follow the rules.



    Help - I uploaded my assignment and it says I failed, with no score and no comments
     

    You cannot fail the Part II exam (unless you leave questions unanswered), however Prometric sometimes marks the test as failed in the cert manager database. There have been reports of it having something to do with timing: when they think you did the exam / when they passed the exam data to Oracle / when Oracle acknowledges it.

    Your assignment and your exam will be sent to an examiner, and eventually you will see your score, at which time you will be able to see whether you have passed or failed. Until then unfortunately you may still see the Failed status with no comments or explanations.

    If you are still nervous, you could write to Prometric and/or Oracle and get their assurances as well. (And if you get a better explanation for why you have got a "Failed" status, please update this FAQ).

    If you fail the assignment, you should either get a description of the major area you failed (e.g. missing file) or you should get a points break down for each section showing where you lost points. If you did not get either of these then you have to write to Oracle and get clarification.



    How long do I have to complete the assignment?
     

    The date on your voucher for the assignment indicates the latest date when you must download the assignment. Once you download the assignment, you have up to 12 months to complete it. If you buy your voucher for the Essay portion of the SCJD, then you will have one year from the date of the Essay Voucher to take the Essay exam. The Essay portion voucher is not related to the assignment.

    In confirmation, we have the following statement from Oracle thanks to Andy Michalec:





    How Long will it take me to complete the assignment?
     

    The current assignment provides you with a data file, an interface you must implement in order to work with that file, and some software specifications telling you what your application must do.

    To complete this assignment you must:

  • Write a class which implements the specified interface - this will give you (and Oracle's automated testing programs) a way of accessing and modifying the database.
  • Write a server application which will provide remote access to this data file. This must be written using either RMI or Serialized Objects over Sockets.
  • Write a GUI client which uses JTables and other swing components to provide a way of updating an individual field in the data file.
  • Provide both user documentation and programmer documentation (javadoc) for everything you submit.


  • If you are doing all this everyday in your normal job then you may find this a very simple exercise, and may be able to complete it in under a month full time.

    Very few people do every single one of those tasks every single day, so it is more realistic to look at a minimum of 6 - 8 weeks of work at 40 hours per week.

    Most candidates use this assignment as a learning exercise, picking up techniques and using APIs that they do not normally deal with. They also take the time to try different ways of accomplishing a given task to see which one works better / is easier to understand / is easier to maintain / is more interesting. This is the way that I would recommend people approach this assignment - it will prove more interesting, and you will get more out of it. But then you may find that doing the assignment may take longer as you explore different facets.

    A few candidates are only doing the assignment for the certificate at the end - sometimes a requirement for a job. It is not unheard of for such a person to get the bare minimum done in a couple of weeks (and get a very low pass mark).



    Oracle says it takes 4-6 weeks to grade my assignment, it has been over 6 weeks. What should I do?
     

    For a start - did you take the essay exam after uploading the assignment? Your assignment will not be looked at until after you have completed the part II essay exam.

    If this is not the problem, then you could try contacting Prometric (mailto:SunCert@prometric.com) and Oracle (mailto:who2contact@sun.com) to see what the status is.



    Should I wait to find out my score from the assignment before taking the essay exam?
     

    NO !!!

    Longer answer:

    The answers you write in your essay exam, and your submitted assignment, are handed together to the assessor for assessment. So until you have completed your essay exam nobody will look at your assignment.

    The reason for the exam is quite simple: Oracle need some way to prove that you wrote the code that you submitted. The logic (as I understand it) works like this: When you go into the testing center, you must provide identification to prove who you are. You will then be asked four questions that can only be answered correctly by the person who wrote the code. If the answers you give match the code you submit then the assessor can be reasonably certain that you did write your submitted code.

    Since the questions on the exam are based on the code that you wrote (for exampe: did you choose RMI or Sockets for networking) it is highly unlikely that you could fail the exam unless you didn't write the code. This appears to be Oracle's view as well, as they only list the following three possible parts of the SCJD assignment:

  • Programming Assignment (CX-310-252A)
  • Essay Exam (CX-310-027)
  • Programming Assignment Resubmission (CX-310-252R)


  • If you fail some part of the assignment, then you only have to resubmit the assignment. You do not have to resit the exam.



    How do I find out why I lost points?
     

    You don't.

    Oracle does not provide you any specific detail as to the reasons for point grading. They do break down the scoring by sections, which you can see on the Assignment Watcher web site (see question above on which web sites to use).



    Will I get an email when I pass / fail?
     

    No - you have to check the website on a regular basis to see whether you have passed or failed. You will receive the certification pack sometime after you pass, but this may not be for a week or two after you passed.



    How do I contact Oracle Education / Prometric?
     

    Sun: mailto:who2contact@sun.com
    Prometric: mailto:SunCert@prometric.com



    Why are there add and delete methods in the data class when we don't need it?
     

    Originally the assignment had an added requirement of creating a conversion program to convert a text file into a data file like db.db. In order to do this you would have needed these methods in the Data class.

    This may also be a way for Oracle to test whether you have implemented the provided interface correctly, or whether you have done the bare minimum for your assignment.



    I don't have access to a UNIX box, do I have to test it on UNIX?
     

    In the Instructions.html document that came with the Fly By Night Services assignment it states that you must provide:

    A README.txt file. You must create a single text file (plain ASCII format; word processor formats are unacceptable) called README.txt that describes to the examiner the following information in exactly the order listed:
    * The exact version of JDK you used, including the platform you worked on.

    In the Instructions.html document that comes with the new assignment, there is typically an instruction requiring you to provide:

    A file called version.txt. This must contain pure ASCII (not a word processor format) indicating the exact version of JDK you used, and the host platform you worked on.

    This could mean that they take into consideration what platform you used and probably try it on that platform. Many posts have occured about this, and we haven't found any cases where there was a problem of not having access to a UNIX box.



    What fields should I include in the Fly By Night Services GUI's search functionality?
     

    In the instructions.html. It is a little unclear as to the minimum fields necessary to search.

    In one section:

    The user should be able to select the origin and destination of flights, and the display should update to show only flights that satisfy those criteria. The user must be able to describe enter the string value "any" for the origin, destination, or both, so as to implement a wildcard-like feature.

    So you must have at least origin and destination.

    Then it also states

    For example, the following argument string would select all records describing flights by the SpeedyAir carrier that originate in San Francisco.
    "Carrier='SpeedyAir',Origin='SFO'"

    In this example Carrier is also there. Here is where the confusion comes in. In the first statement carrier is not included, but here it is.

    My take is to also include carrier.



    My assignment says I can't use AWT components, but all layouts are in the java.awt package - what do I do?
     

    While it is true that the layouts (and Font and Color classes) are in the java.awt package, they do not extend java.awt.Component (and are therefore not Components) and can be used in your assignment.

    Personally I suspect that the prohibition on using ant AWT Component was suggested at the time that the SCJP exam required candidates to know what was a java.awt.Component and what wasnt (wasn't that fun ). Since candidates who passed SCJP 1.4 or SCJP 1.5 no longer need to know that class heirachy, the restriction on using ant AWT Component(s) only seems to confuse people.

    If you want to use something that is not explicitly in the swing packages, take a look if it inherits from the java.awt.Component - if not, you can use it.



    How do I implement the Model-View-Controller pattern for the GUI?
     


  • Here is a MVC Pattern Page: http://ootips.org/mvc-pattern.html
  • Here is the JTable Tutorial at Oracle: http://docs.oracle.com/javase/tutorial/uiswing/components/table.html


  • Both will show you examples of how to implement the MVC Pattern.



    Which version of SDK should I use?
     

    Your instructions should have something like this:



    You may use the link in the next question and do the math. When in doubt, just use the latest version.

    Example calc: 1.5.0 was released on Sept 29, 2004, superseding 1.4.2. However you can still use 1.4.2 until it has been superseded by 18 months, so adding the 18 months to Sept 29, 2004 means that you can still use 1.4.2 until March 29, 2006.

    From April 2006 you must use at least JDK 1.5. You can no longer use 1.4.2 or prior versions.



    How can I find out when a version of the JDK was released?
     

    WikiPedia:Java_version_history



    Is there a new exam?
     

    No, there is only one SCJD exam. There are several assignments you may receive, however there is only one exam.



    How may assignments are there?
     

    There are three known assignments:


  • "Fly By Night Services" (FBNS) flight reserverations system
  • "URLyBird" hotel reservation system
  • "Bodgitt & Scarper" contractors


  • FBNS is the old assignment. The other two are the new assignments. To differentiate between the old assignment and the new assignments, the topic line for questions relating to the old assignment is usually prefixed by "FBNS:".

    The assignments are very similar in scope, and most of the same issues apply for all assignments. In all of them, you have to write a GUI (using swing and a JTable), and connect it to a database either directly or via a network. For the network you must choose either RMI or Serialized Objects over Sockets.

    Although there are only three known assignments, there are different versions of these assignments, so the instructions for your assignment may be different than the instructions for another user even if they appear to be doing the same assignment. Oracle have the following warning in the instructions you receive with the assignment:

    You may not use files from sets issued to other certification candidates - even if you believe they are identical.

    To give some examples of the differences:

    In early versions of FBNS, applicants had to convert data from a text file into the "db.db" database file. In later versions the "db.db" file was provided already populated.

    The URLyBird instructions come in at least 6 different versions, and some method signatures have been identified as differing between versions:

    VersionSignature of Unlock method
    1.1.1public void unlock(int recNo, long cookie) throws RecordNotFoundException, SecurityException;
    1.2.1public void unlock(long recNo, long cookie) throws SecurityException;
    1.2.2public void unlock(long recNo, long cookie) throws SecurityException;
    1.2.3public void unlock(long recNo, long cookie) throws SecurityException;
    1.3.1public void unlock(int recNo) throws RecordNotFoundException;
    1.3.3public void unlock(int recNo) throws RecordNotFoundException;




    When will the assignments be upgraded ?
     

    Taken from a Oracle response on this exact question.









    I have downloaded two different assignments - which one should I do?
     

    Several people who downloaded one assignment later tried to download the assignment a second time, and found that they received a different assignment.

    For a definitive answer, you should contact Oracle.

    Those members who did contact Oracle were told that they may continue with the old assignment.



    Has the marking changed between the old assignment and the new assignment?
     

    Yes, the old assignment had a total of 155 marks, with a pass mark of 124 (80%).

    The new assignment has a total of 400 marks with a pass mark of 320 (80%) .

    The marks assigned to each section are (note: these may not be in the same order as specified by Oracle):

    Old assignmentNew assignmentDifference
    General Considerations (Total 58)General Considerations (100 points)Down from 35% to 25%
    Documentation (Total 20)Documentation (70 points)Up from 13% to 18%
    Object-oriented design (30 points)New
    User Interface (Total 24)User Interface (40 points)Down from 16% to 10%
    Data class (40 points)New
    Server Design (Total 23)Server (40 points)Down from 15% to 10%
    Locking (Total 30)Locking (80 points)Up from 19% now 20%




    What is 'General Considerations' / 'xxx'?
     

    The old assignment broke the sections down as follows:


  • General Considerations (Total 58)
    • Ease of use (23)
    • Coding Standards (23)
    • Clarity and Maintainability (12)



  • Documentation (Total 20)
    • user (10)
    • javadoc (5)
    • Comments (5)



  • User Interface (Total 24)
    • Good Human/Computer Interaction (24)



  • Server Design (Total 53)
    • locking (30)
    • error handling (8)
    • search algorithm (14)




    Why do we care about the magic cookie?
     

    Different assignments have different schemas (and meta-data), and thus they have different magic cookies. Take a look at the following two examples of meta-data and schemas (taken from real assignments):





    That has a different magic cookie than the one used for the following meta-data and schema:





    If I write my Data class such that it checks the magic cookie for the first example, and expects the meta-data and schema for that first example, then it will be able to read any file that has the same magic cookie, meta-data and schema. But as you can easily see, without the check on the magic cookie, the Data class would quickly fail when trying to read the second file format - the field sizes are different, and some fields are different.



    Can't we synchronize the update() method and ignore the lock() methods?
    Why do we have lock() methods in the Data class?
     

    Most of the file operations require some synchronization, as they involve accessing a single shared resource. Even worse, they often involve two operations on that single shared resource, where the two operations must behave atomically. That is, you would normally perform a seek() and then a write(), however you do not want any other thread to perform a seek() between when you performed your seek() and when you perform your write(), otherwise you will end up writing in the wrong location within the file.

    (We will ignore for the moment the question of whether it is better to synchronize the entire update() method in Data class, or whether to just put the seek() and write() methods within a syncronized block.)

    So having somehow synchronized the access to the file, we still have a problem of two clients believing that a record is available, and both trying to update it. That is:


  • Client A checks that record 5 is available
  • Client B checks that record 5 is available
  • Client A updates record 5 with their client number
  • Client B updates record 5 with their client number


  • now client B has overwritten client A's booking

    This is where the logical record locking available through the lock() and unlock() methods of the Data class come in - in the above scenario, if client A had logically locked record 5 prior to checking availability, and client B had attempted to locally lock record 5 prior to checking availability, then client B would be blocked until client A had finished - no more problem.



    How can I test my Data class/locking mechanism to make sure it is working properly?
     

    In https://coderanch.com/t/427863/Developer-Certification-SCJD/certification/Tests-Data-class-locking-mechanism, you can find tests for the main functionalities of the Data class (such as creating or updating records) and also for the locking mechanism.



    How can I test my business service?
     

    In https://coderanch.com/t/484954/Developer-Certification-SCJD/certification/Test-your-business-service, you can find a test for the book-method of your business service.



    How can I automatically build the submission jar (and test if every file is in the correct directory)?
     

    In https://coderanch.com/t/450629/Developer-Certification-SCJD/certification/Submission-Jar-test-case-Ant, you can find an Ant build script that will automatically build your submission jar. You can find also a JUnit test case to validate the structure of your submission jar (and also some source checks).



    Is there a tool I can use to read the .db file I received with my assignment?
     

    In https://coderanch.com/t/445690/Developer-Certification-SCJD/certification/Database-file-reader, you can find a simple tool that reads the content of the .db file received along with the instructions of your assignment. The goal of this tool is to give people starting with the development an idea of how the .db file is organized and how it can be read.

    CategoryFaq CategoryCertification
     
    Hey cool! They got a blimp! But I have a tiny ad:
    Gift giving made easy with the permaculture playing cards
    https://coderanch.com/t/777758/Gift-giving-easy-permaculture-playing
      Bookmark Topic Watch Topic
    • New Topic