This project has moved and is read-only. For the latest updates, please go here.

Introduction to MemoryLifter Development

This will give new developers a short overview of the MemoryLifter source code and help them to get started:

  • How to get the source code
  • Solution/projects overview
  • Basic workflow descriptions


How to get the source code

There are two way to get the MemoryLifter source code:

  • use SVN access (read-only for everyone)
  • TFS (project membership required and recommended for write access)

If you want to join us and help develope MemoryLifter go to the People page and click “Request to join project”.

Otherwise just use SVN access to get a copy of the source code.  You can supply a source code path if you just want to supply us a fix and/or new feature using SVN (and only read access).

SVN access:

To access the source code with SVN use “” as the URL.

If you are a project member you can also supply your CodePlex username and password to gain write access.

TFS access:

To access the source code with TFS use the following settings to connect to the TFS using Team Explorer:

  • Server name:
  • Path: tfs
  • Port number: 443
  • Protocol: https
  • Project Collection: TFS37
  • Project Name: MemoryLifter
  • Username: snd\YourCodeplexUsername_cp
  • Password: Your CodePlex password

Then you can map and get the source code.

This way is recommended because the management of tasks and bugs etc is much easier this way.


Solution/projects overview

This will give you a short overview of what is in each project:

  • MemoryLifter.sln
    • Applications contains applications which are installed with MemoryLifter.
      • MLifter.ErrorHandler sends error reports to us.
      • MLifter.UpdateHandler checks and downloads MemoryLifter updates.
    • BusinessLayer contains the business logic components of MemoryLifter.
      • MLifter.AudioTools are tools which can be used to encode and decode audio files and streams.
      • MLifter.BusinessLayer is the core MemoryLifter business logic containing the ‘LearnLogic’ which implements the Leitner algorithm.
      • MLifter.Remoting contains business logic which allows remote control of MemoryLifter.
    • Common
      • MLifter.Generics general components and classes used by multiple solutions.
    • DataAccessLayer contains projects which directly access databases.
      • MLifter.DAL is the general data access project.
        • DB
          • MSSQLCE is the implementation of SQL CE access classes.
          • PostgreSQL is the implementation of PgSQL access classes.
        • Interfaces - these are the interfaces used to implement the database access layer.
      • Security.Framework.Base is the base framework for rights management.
      • Security.PgSqlAdapter is the security adapter for use with a PgSQL database.
    • Solution Items
    • Stick contains everything necessary to create a MemoryLifter (USB) stick.
      • Autorun the autorun.exe file on the stick is created from this project (C++).
      • MLifter.Stick contains the files and structure needed to create a stick.
      • StickFactory
    • Testing
      • MLifter.GenerateTestData can fill up a PgSQL database with test data.
      • MLifter.UnitTests the unit tests for the MemoryLifter application.
    • Tools contains tools which can be used with MemoryLifter.
    • UserInterface
      • MLifter.CardCollector collects cards from data copied to the clipboard from a spreadsheet.
      • MLifter.Components are components (single controls) used within MemoryLifter (or MLifter.Controls) for example the FolderTreeView.
      • MLifter.Controls are controls and dialogs used within MemoryLifter for example the LearningModulesPage.
      • MLifter.Updater is the *.dll which is used as the update logic for the MLifter.UpdateHandler.
    • WebServices
      • MLifter.ErrorService is the server side component the MLifter.ErrorHandler communicates with.
      • MLifter.ModuleService is a demo implementation of a learning module feed (used on the feed).
      • MLifter.RegistrationService is the service which handles the MemoryLifter registrations.
      • MLifter.SyncService is the service which is used in a server environment to sync modules between MemoryLifter and a PgSQL database.
      • MLifter.UpdateService is the service used to deliver MemoryLifter program updates.
    • MemoryLifter is the main project which generates the MemoryLifter.exe and also contains most of its dialogs/forms etc.
    • MemoryLifter.Setup is a simple setup which is used to create the MemoryLifter installer.

HINT: It is recommended to unload the setup project to avoid building it every time, which slows down the build process while debugging significantly.



Basic workflow descriptions

Card selection:


Answer validation:


MemoryLifter Update:

  1. On startup or by user request VersionHandler.ashx is called to get the newest available version.
  2. If an update available, MemoryLifter is closed and the MLifter.UpdateHandler is started.
  3. The MLifter.Updater-dll will be downloaded from UpdateService.asmx->ServeLatestMLVersion and loaded.
  4. The logic in the dll will download the latest MemoryLifter Setup and execute it.

MemoryLifter Error Report:

  1. If an unhandled exception occurs a ZIP-file will be stored in the AppData folder containing the following:
    • Error report (required)
    • Screenshot (optional)
    • Profile footprint (optional)
    • Connections (optional)
  2. The MLifter.ErrorHandler is executed.
  3. The user can choose which information to send and enter additional info and contact data.
  4. The error handler splits the ZIP-file into small packets.
  5. Each packet is sent to ErrorReportService.asmx->TransferChunk after calling TransferStart.
  6. After TransferFinish is triggered, the ErrorReportService sends the ZIP-file by email to

Last edited Mar 8, 2012 at 2:33 PM by CFI, version 10


No comments yet.