{"id":18804411,"url":"https://github.com/abates/windtalker","last_synced_at":"2026-01-06T15:30:13.598Z","repository":{"id":138712085,"uuid":"45156013","full_name":"abates/Windtalker","owner":"abates","description":"Java project to show real world interaction to AP Computer Science students","archived":false,"fork":false,"pushed_at":"2015-11-10T15:11:17.000Z","size":308,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-29T20:42:27.596Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abates.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-10-29T02:45:45.000Z","updated_at":"2015-11-16T16:18:31.000Z","dependencies_parsed_at":"2023-03-13T17:16:03.563Z","dependency_job_id":null,"html_url":"https://github.com/abates/Windtalker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abates%2FWindtalker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abates%2FWindtalker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abates%2FWindtalker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abates%2FWindtalker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abates","download_url":"https://codeload.github.com/abates/Windtalker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239736807,"owners_count":19688521,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T22:39:10.313Z","updated_at":"2026-01-06T15:30:13.552Z","avatar_url":"https://github.com/abates.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Windtalker\n\nThis Java library was written to allow AP Computer Science students to exercise their\nJava skills in a way that is similar to a real world scenario.  Windtalkers is a movie\nthat depicts the story of [Navajo code talkers](https://en.wikipedia.org/wiki/Code_talker#Navajo_code_talkers) during WWII.  The Navajo code talkers\nused their native language in addition to a secret code to communicate positions, orders\nand other messages over a radio broadcast.  In this way, our Windtalker Java project\nallows students to communicate with each other by broadcasting messages over a network.\n\nThe Windtalker project demonstrates real-world scenarious by requiring students to\nclearly understand the requirements and implementation of the secret code.  The secret\ncode is implemented as a [codec](https://en.wikipedia.org/wiki/Codec) (COder DECoder) class\nand the Windtalker will use the codec to encode and decode messages on the network.\nIf students have implemented their codecs the same way, then everyone should be able\nto view and understand messages.  If students have implementations that manipulate the\nmessage slightly different then the information will be unintelligible.  This \ndemonstrates how everyone involved in a software project needs to be on the same page\nas everyone else in order to complete a successful project.\n\n## Example Usage\n\nA codec is any class that implements the co.andrewbates.windtalker.Codec interface.  This\ninterface specifies two methods: code and decode.  Each method takes a string and returns\na string.  Here is an example codec that uses rot47 (similar to \n[rot13](https://en.wikipedia.org/wiki/ROT13))  as the coding/decoding mechanism:\n\n```java\n\nclass ExampleCodec implements Codec {\n    private char min = 31;\n    private int max = 127;\n\n    private String rot47(String message) {\n        StringBuilder s = new StringBuilder();\n        for (int i = 0; i \u003c message.length(); i++) {\n            int c = message.charAt(i) + 48;\n            if (c \u003e max) {\n                c = min + (c - max);\n            }\n            s.append((char) c);\n        }\n        return s.toString();\n    }\n\n    @Override\n    public String encode(String message) {\n        return rot47(message);\n    }\n\n    @Override\n    public String decode(String message) {\n        return rot47(message);\n    }\n\n}\n\n```\n\nOnce the codec class is created, simply start up the Windtalker:\n\n```java\n\npublic class Example {\n    public static void main(String[] argv) {\n        Codec codec = new ExampleCodec();\n        String username = JOptionPane.showInputDialog(\"Input a username\");\n        Talk talk = new Talk(username, codec);\n\n        talk.run();\n    }\n}\n\n```\n\nThis complete example is located in the examples directory of this project.\n\n## Using with JGrasp\n\nJGrasp is similar to other IDEs when using external libraries.  Simply obtain the\nlibraries' jar files and import them into JGrasp's classpath.  Download the windtalker.jar\nfile and then follow these instrcutions:\n\nIn JGrasp, select Settings -\u003e PATH/CLASSPATH -\u003e Workspace from the menu:\n![JGrasp Screenshot](img/jgrasp1.png)\n\nSelect the CLASSPATH tab in the dialog box and click the New button:\n\n![JGrasp Screenshot](img/jgrasp2.png)\n\nNavigate to the windtalker.jar file that has been downloaded and click the Choose button.\n\n![JGrasp Screenshot](img/jgrasp3.png)\n\nNow the Windtalker code can be imported into your projects:\n\n```Java\nimport co.andrewbates.windtalker.Codec;\nimport co.andrewbates.windtalker.Talk;\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabates%2Fwindtalker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabates%2Fwindtalker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabates%2Fwindtalker/lists"}