ינו 06

MyToDo list – demonstrate usage of advanced coding techniques available in recent Moodle versions

Simple plugin implementing a personal ToDo list on the user’s Moodle dashboard.

Simple plugin implementing a personal ToDo list on the user’s Moodle dashboard.

The main purpose of this plugin is to demonstrate usage of advanced coding techniques available in recent Moodle versions. Most notably:

Source: Moodle plugins directory: My ToDo list

דצמ 10

phpcs-security-audit – PHP_CodeSniffer

phpcs-security-audit is a set of PHP_CodeSniffer rules that finds flaws or weaknesses related to security in PHP and its popular CMS or frameworks.

It currently has core PHP rules as well as Drupal 7 specific rules. Next planned CMS/framework is Symfony 2, which are also relevant to Moodle.

As a bonus set of rules, the tool also check for CVE issues and security advisories related to CMS/framework. You can use it in order to follow the versioning of components during static code analysis.

The main reasons of this project for being an extension of PHP_CodeSniffer is to have easy integration into continuous integration systems and to be able to find security bugs that are not detected with object oriented analysis (like in RIPS or PHPMD).

phpcs-security-audit is backed by Floe design + technologies and written by Jonathan Marcil.

מקור: FloeDesignTechnologies/phpcs-security-audit

phpStorm setup

  • Install: https://moodle.org/plugins/local_codechecker
  • Git clone above github project (phpcs-security-audit)
  • Follow project’s README install instructions, and also…
  • Copy https://github.com/FloeDesignTechnologies/phpcs-security-audit/tree/master/Security/Sniffs/BadFunctions folder into your Moodle local/codechecker/moodle/Sniffs
  • Copy https://github.com/FloeDesignTechnologies/phpcs-security-audit/tree/master/Security/Sniffs/CVE folder into your Moodle local/codechecker/moodle/Sniffs
אוג 11

Netflix/dynomite: A generic master-master dynamo implementation for different k-v storage engines – Redis and Memcached

As the request goes through a Dynomite node, the data gets replicated and eventually stored in the target storage. The data can then be read back either through Dynomite or directly from the underlying storage’s API.

Dynomite and the target storage engine run on the same node. Clients connect to Dynomite, and requests are proxied to either the storage engine on the same node or to Dynomite processes running on other nodes.

Dynomite, inspired by Dynamo whitepaper, is a thin, distributed dynamo layer for different storage engines and protocols. Currently these include Redis and Memcached. Dynomite supports multi-datacenter replication and is designed for high availability.

The ultimate goal with Dynomite is to be able to implement high availability and cross-datacenter replication on storage engines that do not inherently provide that functionality. The implementation is efficient, not complex (few moving parts), and highly performant.

מקור: Netflix/dynomite: A generic dynamo implementation for different k-v storage engines

Also, checkout (alternatives?):

יול 14

jokkedk/webgrind: Xdebug Profiling Web Frontend in PHP

Webgrind is a Xdebug profiling web frontend in PHP. It implements a subset of the features of kcachegrind and installs in seconds and works on all platforms. For quick’n’dirty optimizations it does the job. Here’s a screenshot showing the output from profiling:

Features

  • Super simple, cross platform installation – obviously 🙂
  • Track time spent in functions by self cost or inclusive cost. Inclusive cost is time inside function + calls to other functions.
  • See if time is spent in internal or user functions.
  • See where any function was called from and which functions it calls.
  • Generate a call graph using gprof2dot.py

Suggestions for improvements and new features are more than welcome – this is just a start.

מקור: jokkedk/webgrind: Xdebug Profiling Web Frontend in PHP

יונ 04

Php Inspections (EA Extended) :: JetBrains Plugin Repository

This plugin is a Static Code Analysis tool for PHP (aka inspections in JetBrains products).

It covers:
– architecture related issues (e.g. design pattern violations)
– weak types control and possible code construct simplifications
– performance issues
– non-optimal, duplicate and suspicious “if” conditions
– validation of magic methods usage
– regular expressions
– validation of exception handling workflow
– compatibility issues
– variety of time-consuming bugs
– PhpUnit API usage
– security issues

מקור: Php Inspections (EA Extended) :: JetBrains Plugin Repository

מרץ 10

Technology and Learning: Add mobile support to your Moodle plugin – Part One

With version 3 of Moodle came the Moodle Mobile app. Out of the box, most of the core Moodle plugins came supported. But, third-party plugins do not function by default in the mobile app.

In Moodle 3.1, the mobile app added support for “Remote add-ons“. This support allows plugin providers to add support so that their plugin can function within the mobile app.

Now, I should point out that Moodle is currently working on a much simpler system for adding mobile support to your plugin, but it will be a while before it is ready. When it is ready, the work I am about to undertake will likely be moot.

This post will be the first in a series where I will attempt to add mobile support for my questionnaire module. I say “attempt”, because this will be using some technologies that I am not familiar with so I will be learning as I go. I won’t guarantee success, but I will document the efforts.

מקור: Technology and Learning: Add mobile support to your Moodle plugin – Part One

פבר 13

SCORM vs. cmi5 Comparison for L&D Professionals

SCORM is a technical standard developed by Advanced Distributed Learning Initiative (ADL) over 16 years ago that governs how online learning content and Learning Management Systems (LMSs) communicate with each other. It is the mature de facto industry standard for e-learning interoperability the pre-dates mobile learning and IOT.

cmi5 is a new specification that was co-developed by ADL and the Aviation Industry Computer-Based Training Committee (AICC). This new specification defines how “LMSs launch content” using the Experience API (xAPI) as the content-to-LMS communication layer. cmi5 builds upon the lessons learned from AICC and SCORM specifications, address the limitations of each, and adds new capabilities. cmi5 uses xAPI which was designed with both traditional and non-traditional learning methods (Social, Mobile, Simulations, VR etc.) in mind. cmi5’s use of xAPI enables the development of interoperable features well beyond the traditional LMS model. cmi5 is a key component of an xAPI based learning ecosystem and an excellent starting point for organizations that wish to adopt xAPI.

cmi5 provides the following functionality that SCORM does not:

  • Richer Data Collection. Record any data you want (and get it back!)- SCORM is limited to a “list” of data collected. cmi5 is open-ended on the data you can collect.
  • Share Data more easily – cmi5 uses a web service and data structure that allows easy integration with other systems/applications.
  • Distributed Content – cmi5 content can reside anywhere, it allows for content as a service.
  • Elimination of “Pop-up” Windows – eliminate pop-up blocker headaches
  • Mobile app launch support – cmi5 content does not require a browser. Content could be a mobile app.

More info: SCORM vs. cmi5 Comparison for L&D Professionals

פבר 02

Technology and Learning: Adding search to your plugin – Part three

Part Three – Indexing More of your Plugin

In the last post, I added more searchable content to my plugin’s search indexing function, so that additional information fields specific to each instance of a plugin were included. Now I’m going to try and add question content to the search indexing.

מקור: Technology and Learning: Adding search to your plugin – Part three