Scripting COM Components in Haskell

Total Page:16

File Type:pdf, Size:1020Kb

Scripting COM Components in Haskell Scripting COM comp onents in Haskell Simon Peyton Jones simonpjdcsglaacuk Erik Meijer erikcsruunl University of Glasgow University of Utrecht Daan Leijen leijenwinsuvanl University of Amsterdam Abstract system higher order functions lazy evaluation and convenient syntax In particular we describ e an The expressiveness of higherorder typed languages interface b etween Haskell and Microsofts Comp onent such as Haskell or ML makes them an attractive Ob ject Mo del COM that makes it easy to script medium in which to write software comp onents Hith COM comp onents from a Haskell program We make erto however their use has b een limited by the all two main contributions ornothing problem it is hard to write just part of an application in these languages We describ e a graceful and stronglytyped inte Comp onentbased programming using a binary stan gration of COM into Haskell dard such as Microsofts Comp onent Ob ject Mo del If the exercise is to b e more than just Gosh we COM oers a solution to this dilemma by sp ecify can script COM in Haskell as well as in Visual ing a languageindep endent interface b etween comp o Basic then it is imp ortant to demonstrate some nents This pap er rep orts ab out our exp erience with added value from using a higherorder typed lan exploiting this opp ortunity in the purelyfunctional guage We oer such a demonstration in the form language Haskell We describ e a design for integrat of an extended case study ing COM comp onents into Haskell programs and we demonstrate why someone might want to script their COM comp onents in this way We are also excited by the dual p ossibility that of writing COM comp onents in Haskell but that is b e This paper appears in the Proceedings of the Fifth In yond the scop e of this pap er ternational Conference on Software Reuse Victoria British Columbia June Background This version includes an Appendix that is omitted from Until recently it has b een much easier for a client pro the published paper gram to use software comp onents libraries classes abstract data types written in the same language Introduction One of the attractive features of the current vogue for The sp ecication of the interface b etween the comp onentbased programming is its language inde comp onent and its clients is usually given in a p endence Instead of having to write an entire ap languagesp ecic way for example as C header plication in a single language it b ecomes p ossible to les or C class descriptions write each software comp onent in the most suitable The calling convention b etween client and com language available This p ossibility presents new op p onent is often languagesp ecic or p erhaps even p ortunities to comp onent implementors unsp ecied b ecause b oth client and comp onent In this pap er we prop ose the purelyfunctional lan are assumed to b e compiled with the same com guage Haskell as an attractive language for com piler p onent scripting that is for constructing new comp o nents by gluing together other standard comp onents Programmers can assume a rather intimate cou Haskell supp orts a number of features that make this pling b etween the address spaces of client and b oth secure and expressive a rich p olymorphic type comp onent for example the client might pass a How COM works p ointer into the middle of an array to b e side eected by the comp onent Although there are many very fat b o oks ab out COM eg the core technology is quite simple a no COM encapsulates a software comp onent in a way table achievement This section briey introduces the that contrasts with each of these three asp ects key ideas We concentrate exclusively on how COM works rather on why it works that way the COM The interface b etween client and comp onent is literature deals with the latter topic in detail sp ecied in IDL COMs Interface Denition Lan guage For each particular language to ols are Here is how a client written in C might create and provided to convert IDL into the corresp onding invoke a COM ob ject sp ecication in that language section Create the object COM sp ecies the clientcomponent interface at errcode CoCreateInstance clsid a binary level indep endently of any particular ifaceid language or compiler section ifaceptr Parameters are exp ected to b e marshalled from if not SUCCEEDEDerrcode the clients address space to the comp onents ad error recovery dress space and vice versa Sometimes the two share an address space in which case marshalling need do no copying but all COMcalls provide Invoke a method enough information to do such marshalling ifaceptr ifaceptr x y z Interfacing b etween two languages often carries The pro cedure CoCreateInstance is b est thought of p erformance overheads b ecause of diering data as a system call In real life it takes more parame representation and memoryallo cation p olicies ters than those given ab ove but they are unimp ortant When the alternative is a nativelanguage inter here Calling CoCreateInstance creates an instance face b etween client and comp onent these extra of an ob ject whose class identier or CLSID is passed overheads can seem rather unattractive in clsid The class identier is a bit globally However anyone using COM has already bitten unique identier or GUID Here globally unique the bullet they have declared themselves willing means that the GUID is a name for the class that will to accept a hit in programming convenience and not ever b e reused for any other purp ose anywhere p erhaps a hit in p erformance for marshalling in on the planet A standard utility allows an unlimited exchange for the advantages that COM brings supply of fresh GUIDs to b e generated lo cally based on the machines IP address and the date and time The ab ove p oints are not COMs only advantages The co de for the class is found indirectly via the sys For example one of the primary motivations for using tem registry which is held in a xed place in the COM concerns version control and upgrade paths for le system This double indirection of CLSIDs and software comp onents which we have not mentioned registry makes the client co de indep endent of the at all However these additional prop erties are well sp ecic lo cation of the co de for the class Next describ ed elsewhere and do not con CoCreateInstance loads the class co de into the cur cern us further in this pap er except in so far as they rent pro cess unless it has already b een loaded al serve as motivators for p eople to write and use COM ternatively one can ask COM to create a new pro cess comp onents either lo cal or remote to run the class co de Finally Also COM is not alone in having these prop erties COM asks the class co de more precisely the class Numerous research pro jects had similar goals in par factory to create an instance of the class which it ticular CORBA In fact much of the rest of this returns to the caller In fact what is returned is an pap er would apply to CORBA as well as COM Un interface pointer which we discuss next like COM though CORBA is not a binary standard to use CORBA for Haskell would required adding a Interfaces and metho d invocation language binding for Haskell to some manufacturers ORB COM is much friendlier to nonmainstream lan A COM ob ject supp orts one or more interfaces each guages of which has its own globallyunique interface iden that p oints to the structures just describ ed the client b e happy "Vtbl pointer" "Virtual function table" will (not shared) (shared by all instances) p ointers provide the sole way in which one Interface Interface QueryInterface interact with a COM ob ject This restriction pointer can it p ossible to implement location transparency AddRef makes a ma jor COM warcry whereby an ob jects client in Release with the ob ject in the same way regardless of Object teracts or not the ob ject is in the same address space state other whether even on the same machine as the client All that methods or is necessary is to build a proxy interface p ointer that does p oint into the clients address space but whose metho ds are stub pro cedures that marshal the data across the b order to and from the remote ob ject Figure Interface p ointers Getting other interfaces A single COM ob ject can supp ort more than one inter face But as we have seen b efore CoCreateInstance tier or I ID That is why CoCreateInstance takes returns only one interface p ointer So how do we a second parameter ifaceid the I ID of the de get the others Answer every interface supp orts the sired interface CoCreateInstance returns the inter QueryInterface metho d which maps an I ID to an face pointer of this interface in ifaceptr There is interface p ointer for the requested I ID or fails if the no such thing as an ob ject p ointer or ob ject iden ob ject do es not supp ort the requested interface So tier there are only interface p ointers from any interface p ointer ifaceptr on an ob ject we can get to any other interface p ointer ifaceptr The I ID of an interface uniquely identies the com which that ob ject implements for example plete signature of that interface that is what metho ds ifaceptr ifaceptr iid ifaceptr the interface has including what order they app ear in their calling convention what arguments they Why Because QueryInterface is at oset take and what results they return If we want to in every interface change the signature of an interface we must give the new interface a dierent I ID from the old one That The COM sp ecication requires that QueryInterface way when a client asks for an interface with a particu b ehaves consistently
Recommended publications
  • The Glib/GTK+ Development Platform
    The GLib/GTK+ Development Platform A Getting Started Guide Version 0.8 Sébastien Wilmet March 29, 2019 Contents 1 Introduction 3 1.1 License . 3 1.2 Financial Support . 3 1.3 Todo List for this Book and a Quick 2019 Update . 4 1.4 What is GLib and GTK+? . 4 1.5 The GNOME Desktop . 5 1.6 Prerequisites . 6 1.7 Why and When Using the C Language? . 7 1.7.1 Separate the Backend from the Frontend . 7 1.7.2 Other Aspects to Keep in Mind . 8 1.8 Learning Path . 9 1.9 The Development Environment . 10 1.10 Acknowledgments . 10 I GLib, the Core Library 11 2 GLib, the Core Library 12 2.1 Basics . 13 2.1.1 Type Definitions . 13 2.1.2 Frequently Used Macros . 13 2.1.3 Debugging Macros . 14 2.1.4 Memory . 16 2.1.5 String Handling . 18 2.2 Data Structures . 20 2.2.1 Lists . 20 2.2.2 Trees . 24 2.2.3 Hash Tables . 29 2.3 The Main Event Loop . 31 2.4 Other Features . 33 II Object-Oriented Programming in C 35 3 Semi-Object-Oriented Programming in C 37 3.1 Header Example . 37 3.1.1 Project Namespace . 37 3.1.2 Class Namespace . 39 3.1.3 Lowercase, Uppercase or CamelCase? . 39 3.1.4 Include Guard . 39 3.1.5 C++ Support . 39 1 3.1.6 #include . 39 3.1.7 Type Definition . 40 3.1.8 Object Constructor . 40 3.1.9 Object Destructor .
    [Show full text]
  • Microsoft Patches Were Evaluated up to and Including CVE-2020-1587
    Honeywell Commercial Security 2700 Blankenbaker Pkwy, Suite 150 Louisville, KY 40299 Phone: 1-502-297-5700 Phone: 1-800-323-4576 Fax: 1-502-666-7021 https://www.security.honeywell.com The purpose of this document is to identify the patches that have been delivered by Microsoft® which have been tested against Pro-Watch. All the below listed patches have been tested against the current shipping version of Pro-Watch with no adverse effects being observed. Microsoft Patches were evaluated up to and including CVE-2020-1587. Patches not listed below are not applicable to a Pro-Watch system. 2020 – Microsoft® Patches Tested with Pro-Watch CVE-2020-1587 Windows Ancillary Function Driver for WinSock Elevation of Privilege Vulnerability CVE-2020-1584 Windows dnsrslvr.dll Elevation of Privilege Vulnerability CVE-2020-1579 Windows Function Discovery SSDP Provider Elevation of Privilege Vulnerability CVE-2020-1578 Windows Kernel Information Disclosure Vulnerability CVE-2020-1577 DirectWrite Information Disclosure Vulnerability CVE-2020-1570 Scripting Engine Memory Corruption Vulnerability CVE-2020-1569 Microsoft Edge Memory Corruption Vulnerability CVE-2020-1568 Microsoft Edge PDF Remote Code Execution Vulnerability CVE-2020-1567 MSHTML Engine Remote Code Execution Vulnerability CVE-2020-1566 Windows Kernel Elevation of Privilege Vulnerability CVE-2020-1565 Windows Elevation of Privilege Vulnerability CVE-2020-1564 Jet Database Engine Remote Code Execution Vulnerability CVE-2020-1562 Microsoft Graphics Components Remote Code Execution Vulnerability
    [Show full text]
  • The Component Object Model Specification Version 0.9 October 24, 1995
    http://scottge.wordpress.com The Component Object Model Specification Version 0.9 October 24, 1995 This document contains the specification to the Component Object Model (COM), an architecture and supporting infrastructure for building, using, and evolving component software in a robust manner. This specification contains the standard APIs supported by the COM Library, the standard suites of interfaces supported or used by software written in a COM environment, along with the network protocols used by COM in support of distributed computing. This specification is still in draft form, and thus subject to change. Note: This document is an early release of the final specification. It is meant to specify and accompany software that is still in development. Some of the information in this documentation may be inaccurate or may not be an accurate representation of the functionality of the final specification or software. Microsoft assumes no responsibility for any damages that might occur either directly or indirectly from these inaccuracies. Microsoft may have trademarks, copyrights, patents or pending patent applications, or other intellectual property rights covering subject matter in this document. The furnishing of this document does not give you a license to these trademarks, copyrights, patents, or other intellectual property rights. Copyright ? 1992-95 Microsoft Corporation. All Rights Reserved The Component Object Model Specification The Component Object Model The Component Object Model Specification Draft Version 0.9, October 24, 1995 Microsoft Corporation and Digital Equipment Corporation Copyright ? 1992-95 Microsoft Corporation. Microsoft does not make any representation or warranty regarding the Specification or any product or item developed based on the Specification.
    [Show full text]
  • Reading for Monday
    Reading for Monday Subsequent pages of this document contain the appropriate excerpts from the 3 papers, in the order of the bullet points listed below: • H/Direct: • Read sections 1 and 2: this sets up the problem and design space. – In section 2.3: focus on understanding IDL types versus Haskell types. • Read the bullets on page 157: these explain the five IDL pointer types. • Attempt to understand what marshalPoint on page 159 is doing. • Take note of the main claim on the page after page 159. • Stretching the storage manager: • Read section 4 to understand stable names and stable pointers – Read section 4.4 closely to understand some garbage collection im- plications. • Read section 5.6 to understand the memory management issue (not the solution). • Calling hell from heaven and heaven from hell: • Read the second bulleted point in the intro. • Read section 3 – Read section 3.3 closely (stable pointers) – Read section 3.5 closely (higher-order callbacks) • The Lua Registry: • Read section 27.3.1: “Lua offers a separate table, called the registry, that C code can freely use, but Lua code cannot access.” 1 H/Direct: A Binary Foreign Language Interface for Haskell Sigbjorn Finne Daan Leijen Erik Meijer University of Glasgow University of Utrecht University of Utrecht [email protected] [email protected] [email protected] Simon Peyton Jones University of Glasgow [email protected] Abstract the particular Haskell implementation. To maintain this in- dependence, H/Direct requires the implementation to sup- H/Direct is a foreign-language interface for the purely func- port a primitive foreign-language interface mechanism, ex- tional language Haskell.
    [Show full text]
  • On2 Flix Engine for Linux Installation
    On2 Flix Engine for Linux Installation Topics Preparing the System Java Perl PHP Python Installation Instructions 1. Accept the EULA 2. Verify Prerequisites 3. Uninstall the Previous Version 4. Verify Language Support 5. Register On2 Flix Engine 6. Configure the Installation 7. Install Files 8. Configure the System 9. Build Optional Modules 10. Installation Complete Additional Resources Preparing the System Perform the following to prepare the system for installation: 1. Read the System Overview document provided with this release. 2. Verify Linux prerequisites. a. Operating System: x86 GNU/Linux with GNU C Library (glibc) version 2.3.2 or higher, x86_64 is supported with 32-bit support libraries installed. To determine the version of glibc installed on your system, execute the following: $ /lib/ld-linux.so.2 /lib/libc.so.6 This command should produce output similar to the following (note, your output may differ, however the version number should be equal or greater). © 2009, On2 Technologies, Inc. 1 On2 Flix Engine for Linux Installation GNU C Library stable release version 2.3.2, by Roland McGrath et al. Copyright (C) 2003 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 3.3.3. Compiled on a Linux 2.4.26 system on 2004-05-24. Available extensions: GNU libio by Per Bothner crypt add-on version 2.1 by Michael Glad and others linuxthreads-0.10 by Xavier Leroy BIND-8.2.3-T5B libthread_db work sponsored by Alpha Processor Inc NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk Report bugs using the `glibcbug' script to <[email protected]>.
    [Show full text]
  • Inferred Interface Glue: Supporting Language Interoperability with Static Analysis
    Inferred Interface Glue: Supporting Language Interoperability with Static Analysis by Tristan Ravitch A dissertation submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy (Computer Sciences) at the UNIVERSITY OF WISCONSIN–MADISON 2013 Date of final oral examination: 08/09/2013 The dissertation is approved by the following members of the Final Oral Committee: Ben Liblit, Associate Professor, Computer Sciences Tom Reps, Professor, Computer Sciences Susan Horwitz, Professor, Computer Sciences Somesh Jha, Professor, Computer Sciences Timothy Tautges, Adjunct Professor, Engineering Physics © Copyright by Tristan Ravitch 2013 All Rights Reserved i acknowledgments I would like to thank Aditya Thakur, Tycho Andersen, Evan Driscoll, and Steve Jackson for many productive technical discussions and valuable feedback for both practice talks and paper submissions. I would also like to thank my advisor Ben Liblit for consistent encouragement and support. Most importantly, I thank Tycho Andersen, Polina Dudnik, James Doherty, Aubrey Barnard, Erin Barnard, and Bess Berg for numerous bicycle rides and the many other things that have made Madison enjoyable. ii contents Contents ii List of Tables iv List of Figures v Abstract viii 1 Introduction 1 1.1 Preliminaries 6 2 Related Work 8 2.1 Library Binding Generation 8 2.2 FFI Checking 10 3 Error Codes 12 3.1 Algorithm 14 3.2 Related Work 30 3.3 Evaluation 31 4 Semantics of Pointer Parameters 43 4.1 Symbolic Access Paths 48 4.2 Array Parameters 50 4.3 Output Parameters 51
    [Show full text]
  • Using the Go Programming Language in Practice
    MASTER’S THESIS | LUND UNIVERSITY 2014 Using the Go Programming Language in Practice Fredrik Pettersson, Erik Westrup Department of Computer Science Faculty of Engineering LTH ISSN 1650-2884 LU-CS-EX 2014-19 Using the Go Programming Language in Practice Erik Westrup Fredrik Pettersson <[email protected]> <[email protected]> <[email protected]> <[email protected]> June 5, 2014 Master’s thesis work carried out at Axis Communications AB for the Department of Computer Science, Lund University. Supervisors: Jonas Skeppstedt <[email protected]> Mathias Bruce <[email protected]> Robert Rosengren <[email protected]> Examiner Jonas Skeppstedt Abstract When developing software today, we still use old tools and ideas. Maybe it is time to start from scratch and try tools and languages that are more in line with how we actually want to develop software. The Go Programming Language was created at Google by a rather famous trio: Rob Pike, Ken Thompson and Robert Griesemer. Before introducing Go, the company suffered from their development process not scaling well due to slow builds, uncontrolled dependencies, hard to read code, poor documenta- tion and so on. Go is set out to provide a solution for these issues. The purpose of this master’s thesis was to review the current state of the language. This is not only a study of the language itself but an investigation of the whole software development process using Go. The study was carried out from an embedded development perspective which includes an investigation of compilers and cross-compilation. We found that Go is exciting, fun to use and fulfills what is promised in many cases.
    [Show full text]
  • Extending PCL for Use with Python: Bindings Generation Using Pybind11
    Extending PCL for use with Python: Bindings generation using Pybind11 (Proposal for Google Summer of Code, 2020) Name and Contact Information Name: Divyanshu Madan ​ Github: divmadan ​ ​ Gitter: divmadan ​ ​ ​ Email: [email protected] ​ ​ Postal Address: 4-Cha-18, Jawahar Nagar, Jaipur, Rajasthan ​ Country: India ​ Phone: (+91) 9261700477 ​ Primary Language: English ​ About the document This document is very extensive and requires a section about itself, to stay sane. A few points: ● It documents various tools, existing solutions, other project’s solutions etc. along with my proposal, how to tackle insufficiencies, timeline, etc. ● The “research” part (existing solutions, analysis, etc) is very extensive, difficult to structure in tabular form, and hard to summarize. Thus, it takes up a lot of space in the document. ● I have tried to make the sections independent of each other, so you can safely skip parts of the document, in case you want to. ● I have limited the headings up to 3 levels (H2, H3, H4). A simplified skeleton or structure of the document: C++ and Python Motivation: why create bindings for PCL? Existing binding solutions (for PCL) |_Pcl.py … Analysis of other open-source projects’ bindings |_OpenCV-Python … Analysis of available support tools and libraries for binding generation ​ |_Why use tools? ... The Proposal |_The idea … Stretch Goals |_Jupyter Visualization … Timeline Biographical Information Table of Contents Extending PCL for use with Python: Bindings generation using Pybind11 1 Name and Contact Information
    [Show full text]
  • Application Programming Interface (API) Is a Specification Intended to Be Used As an Interface by Software Components to Communicate with Each Other
    Application programming interface 1 Application programming interface An application programming interface (API) is a specification intended to be used as an interface by software components to communicate with each other. An API may include specifications for routines, data structures, object classes, and variables. An API specification can take many forms, including an International Standard such as POSIX or vendor documentation such as the Microsoft Windows API, or the libraries of a programming language, e.g. Standard Template Library in C++ or Java API. An API differs from an application binary interface (ABI) in that the former is source code based while the latter is a binary interface. For instance POSIX is an API, while the Linux Standard Base is an ABI.[1] Language used An API can be: • language-dependent, meaning it is only available by using the syntax and elements of a particular language, which makes the API more convenient to use. • language-independent, written so that it can be called from several programming languages. This is a desirable feature for a service-oriented API that is not bound to a specific process or system and may be provided as remote procedure calls or web services. For example, a website that allows users to review local restaurants is able to layer their reviews over maps taken from Google Maps, because Google Maps has an API that facilitates this functionality. Google Maps' API controls what information a third-party site can use and how they can use it. The term API may be used to refer to a complete interface, a single function, or even a set of APIs provided by an organization.
    [Show full text]
  • A Software Architecture for Embedded Telematics Devices on Linux Master of Science Thesis in Secure and Dependable Computer Systems
    A software architecture for embedded telematics devices on Linux Master of Science Thesis in Secure and Dependable Computer Systems HUGO HOLGERSSON Chalmers University of Technology University of Gothenburg Department of Computer Science and Engineering Göteborg, Sweden, December 2011 The Author grants to Chalmers University of Technology and University of Gothen- burg the non-exclusive right to publish the Work electronically and in a non-commercial purpose make it accessible on the Internet. The Author warrants that he/she is the author to the Work, and warrants that the Work does not contain text, pictures or other material that violates copyright law. The Author shall, when transferring the rights of the Work to a third party (for example a publisher or a company), acknowledge the third party about this agreement. If the Author has signed a copyright agreement with a third party regarding the Work, the Author warrants hereby that he/she has obtained any necessary permission from this third party to let Chalmers University of Technology and University of Gothenburg store the Work electronically and make it accessible on the Internet. A software architecture for embedded telematics devices on Linux c HUGO HOLGERSSON, Göteborg, Sweden, December 2011 Examiner: Johan Karlsson, [email protected] Professor of Dependable and Robust Real-Time Systems Department of Computer Science and Engineering Chalmers University of Technology University of Gothenburg Department of Computer Science and Engineering SE-412 96 Göteborg Sweden Telephone: + 46 (0)31-772 1000 Abstract This master thesis proposes a Linux-based software architecture for modern telemat- ics devices. Our device is installed in trucks and has the purpose of forwarding collected GPS data to an online data center in a robust way.
    [Show full text]
  • Automated Scanning Vulnerability Report
    Automated Scanning Vulnerability Report − Classified − Automated Scanning Vulnerability Report Performed by Beyond Security's Automated Scanning Host/s Tested: 192.168.4.122 Report Generated: 05 Jun 2007 13:31 Table of Contents Introduction Host Information Executive Summary Possible Vulnerabilities What Next? Introduction We have scanned your host/s 192.168.4.122 for 4345 known security holes. This scan took place on 5 Jun 2007 13:31 and took 0 hours and 5 minutes to complete. The 'Possible Vulnerabilities' section of this report lists security holes found during the scan, sorted by risk level. Note that some of these reported vulnerabilities could be 'false alarms' since the hole is never actually exploited during the scan. Some of what we found is purely informational; It will not help an attacker to gain access, but it will give him information about the local network or hosts. These results appear in the 'Low Risk / Intelligence Gathering' section. The last section of this report ('Security Tests') lists the security tests that were performed in this scan by category of vulnerability. 1/44 Automated Scanning Vulnerability Report Executive Summary Learn more about how vulnerabilities are classified Vulnerabilities by Host and Risk Level Total IP Address High Medium Low Vulnerabilities 192.168.4.122 113 33 60 20 Vulnerabilities By Risk Level Top Vulnerabilities By Host 2/44 Automated Scanning Vulnerability Report Vulnerabilities by Service and Risk Level Service Total High Risk Medium Risk Low Risk Vulnerabilities netbios−ns (137/udp) 1 0 0 1 microsoft−ds 101 33 58 10 (445/tcp) general/tcp 8 0 1 7 ntp (123/udp) 1 0 0 1 netbios−ssn 1 0 1 0 (139/tcp) general/icmp 1 0 0 1 Top Vulnerabilities By Service Top Vulnerable Services 3/44 Automated Scanning Vulnerability Report Possible Vulnerabilities High Medium Low Risk Factor: High A Total of 33 High Risk Vulnerability/ies was/were discovered.
    [Show full text]
  • Merlin Programmer for Kids Is a Simple Program to Help Kids, Ages 5
    Merlin Programmer for Kids is a simple program to help kids, ages 5 - 8 (ages prior to their moving on to more advanced languages such as Scratch), learn about the concept of sequential programming by allowing them to make Merlin or any of the other Microsoft Agent characters perform actions, move, speak, listen for and make sounds in a predetermined manner. They will learn about do loops, conditional program continuation based on time, key strokes, spoken words, and more! I wrote it in 2003 for my twins, Tommy and Betsy, ages 7 then (now 16!), and although they enjoyed it most for making the characters speak naughty words and make silly sounds, they learned more. I am sure your kids will have fun with it! It is a totally FREE program. This help file is intended for you, the parents. You must explain how this program works to your child, in a manner appropriate for his/her age. Obviously, the ability to understand and work with some features in this program will depend on your child’s age. Soon enough he/she will amaze you! In order to help you, several example scripts are included. Please read the sections on Menu and Programming. They are very short, but informative. Merlin Programmer for Kids home: SciSoft Company My home page: Yale University Ear Lab Installation New! After you download <Merlin Programmer for Kids v.5.5.8.msi> into a folder, double click on it and the Merlin program will be installed. A shortcut will be placed on the desktop , and when you first double click on it additional required components will be installed and then the program will start.
    [Show full text]