SCORM 2004 Rollup with single sco - rollup

I'm having issues rolling up a completion from a completed item.
I'm running this on SABA and I can successfully set the completion_status and success_status on the item but having issues rolling it up to the next level on the LMS, both satisfied and notSatisfied.
I find these rules utterly confusing. I do mostly work in SCORM 1.2.
This is my chunk to-date. Any assistance is really, really appreciated.
<organizations default="ORG-487461">
<organization identifier="ORG-487461">
<title>STATUS TESTING - 1d</title>
<item identifier="ACT-687940" identifierref="RES-123054">
<title>Launch</title>
<imsss:sequencing>
<imsss:deliveryControls completionSetByContent="true" objectiveSetByContent="true" />
</imsss:sequencing>
</item>
<imsss:sequencing>
<imsss:controlMode choice="true" flow="true"/>
<imsss:rollupRules>
<imsss:rollupRule childActivitySet="any">
<imsss:rollupConditions>
<imsss:rollupCondition condition="satisfied"/>
</imsss:rollupConditions>
<imsss:rollupAction action="satisfied"/>
</imsss:rollupRule>
<imsss:rollupRule childActivitySet="all">
<imsss:rollupConditions conditionCombination="any">
<imsss:rollupCondition operator="not" condition="satisfied" />
</imsss:rollupConditions>
<imsss:rollupAction action="notSatisfied" />
</imsss:rollupRule>
</imsss:rollupRules>
<imsss:rollupRules rollupObjectiveSatisfied="true" rollupProgressCompletion="true" />
</imsss:sequencing>
</organization>
</organizations>

I was deep in this a few years back but I'll try to assist based on some of my prior examples.
I think you need to set a primary objective. Else - I don't believe there is anything to roll up to. I don't however know that for a fact, as it would require going back and doing a deeper dive in to the SCORM 2004 3rd/4th edition spec and covering the IMSS Sequencing section.
Small example for an activity:
<!-- Activity 1 -->
<title>ims_sequencing_objectives</title>
<item identifier="ACT-001" identifierref="RES-001">
<title>SCOBot-QUnit1</title>
<imsss:sequencing IDRef="COMMON_SEQ_RULES">
<imsss:sequencingRules>
<!-- If you also wanted to limit the number of attempts -->
<imsss:preConditionRule>
<imsss:ruleConditions>
<imsss:ruleCondition condition="attemptLimitExceeded" />
</imsss:ruleConditions>
<!-- Can not choose -->
<imsss:ruleAction action="disabled" />
</imsss:preConditionRule>
</imsss:sequencingRules>
<imsss:limitConditions attemptLimit="1" /> <!-- attemptAbsoluteDurationLimit="" set if max_time_allowed -->
<imsss:rollupRules objectiveMeasureWeight="0" />
<imsss:objectives>
<!-- My Understanding is SCO1_SATISFIED will assume the scoring of the SCO, then you can continue to SCO 2 after the preCondition is met. This SCO is just a "intro" no score reported. Removed satisfiedByMeasure -->
<imsss:primaryObjective objectiveID="SCO1_SATISFIED">
<imsss:mapInfo targetObjectiveID="com.cybercussion.SCOBot.ACT-001" readSatisfiedStatus="true" writeSatisfiedStatus="true" readNormalizedMeasure="true" writeNormalizedMeasure="true" />
</imsss:primaryObjective>
</imsss:objectives>
</imsss:sequencing>
Then a subsequent activity would allow the LMS Player the opportunity to decide whether it should allow the navigation/show it using pre/post rules. And I would agree this gets confusing. Further more its even harder to unit test unless you have some rules engine that can parse this realtime to validate your intent. This below sample would be like Activity/SCO 3...
<imsss:preConditionRule>
<imsss:ruleConditions>
<imsss:ruleCondition referencedObjective="SCO2_SATISFIED" condition="satisfied" />
</imsss:ruleConditions>
<imsss:ruleAction action="disabled" />
</imsss:preConditionRule>
You can also control how the content controls the LMS. As some parts of SCORM like completion and success status could be based on progress_measure and scoring if completion thresholds are set (for example).
<!-- Sequence Collection used by SCOs -->
<imsss:sequencingCollection>
<imsss:sequencing ID="COMMON_SEQ_RULES">
<!-- Rollup: set to 0 if you don't want these scored. -->
<!--imsss:rollupRules objectiveMeasureWeight="1" /-->
<!-- prevent from accidentally being quto-completed/satisfied -->
<imsss:deliveryControls completionSetByContent="true" objectiveSetByContent="true" />
<!-- Attempt limit here had no effect -->
</imsss:sequencing>
</imsss:sequencingCollection>
I have a one page progression example here: https://github.com/cybercussion/SCOBot/wiki/Single-Pages-Managed-by-LMS-Navigation There may be something to glean off it. I always thought this was an area/gap the community would eventually fill with some builder/tool but since we are talking about 14 years almost now! I started to attempt to address some of this with my Packager app but there simply isn't enough customer request/demand to spend the time on it.
Good Luck.

Related

Intellij IDEA - DB Navigator - reveal password

I use "DB navigator" plugin(https://plugins.jetbrains.com/plugin/1800-database-navigator/) for my Intellij IDEA Community version quite some time and am very satisfied.
I want to know the password of my DB connection saved in the plugin. They are saved, they are there, but I cannot share it with my teammates.
Even all the IDEA passwords are set to be stored in the system keyring, I don't find them in seahorse, i.e., "Passwords and Keyrings" application in my Ubuntu.
Where are they?
At last, I found it in
<project_root>/.idea/dbnavigator.xml
search your connection name, and you will see sth like this:
<connection id="e208f307-8c08-45d5-93fd-958c1d68d049" active="true">
<database>
<name value="UAT" />
<description value="" />
<database-type value="ORACLE" />
<config-type value="BASIC" />
<database-version value="11.2" />
<driver-source value="BUILTIN" />
<driver-library value="" />
<driver value="" />
<url-type value="SERVICE" />
<host value="some-host" />
<port value="1523" />
<database value="APP_DB" />
<type value="USER_PASSWORD" />
<user value="admin" />
<deprecated-pwd value="<base64-encoded-password>" />
</database>
...
</connection>
So, I tried to base64 decoded them... and it works...
Please, if the author sees this, please don't encrypt it in the future versions; I need them to be in my local so that I don't have to ask my teammates again; too shy am I. Please take into consideration that I created the tag db-navigator for the first time while asking this question, so that ppl around the world could gather together with love of this plugin.
And, any coder reading this: please ignore this file in Git, as it contains sensitive data.

Why this dash manifest keeps the player stuck until streams are downloaded?

I have this manifest file below . The issue is that the player waits for the streams to download completely before to start playing which is bad for the user experience. Any idea how to fix it? I expected the player to start range requests and feed media source with partial requests instead to wait for the streams to completely download.
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" mediaPresentationDuration="PT30M67.6S" minBufferTime="PT2S">
<ProgramInformation></ProgramInformation>
<Period id="0" start="PT0.0S">
<AdaptationSet id="0" contentType="video" segmentAlignment="true" bitstreamSwitching="true" lang="und">
<Representation id="0" mimeType="video/webm" codecs="vp9" bandwidth="770153" width="854" height="480" frameRate="23421/1000">
<BaseURL>https://liveradio.s3.eu-central-1.amazonaws.com/video.webm</BaseURL>
<SegmentList duration="1840613" startNumber="1">
<Initialization range="0-219"/>
<SegmentURL indexRange="220-6592"/>
</SegmentList>
</Representation>
</AdaptationSet>
<AdaptationSet id="1" contentType="audio" segmentAlignment="true" bitstreamSwitching="true" lang="und">
<Representation id="1" mimeType="audio/webm" codecs="opus" bandwidth="115412" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
<BaseURL>https://liveradio.s3.eu-central-1.amazonaws.com/audio.webm</BaseURL>
<SegmentList duration="1840641" startNumber="1">
<Initialization range="0-258"/>
<SegmentURL indexRange="259-3444"/>
</SegmentList>
</Representation>
</AdaptationSet>
</Period>
</MPD>
You seem to be using a mix of the DASH 'live' profile approach and the 'on-demand' profile one - you can see the profile in the profiles="urn:mpeg:dash:profile:isoff-live:2011" at the top of your manifest.
At a very high level the difference is:
'live' profile manifests contain a list of urls for each segment to be downloaded.
'on-demand' profile manifests contain a URL to a file and an index to where the segments can be found in the file, so the client can download chunks as it wants.
DASH is a complex specification and it may be that some players will accept some mixes of profiles and others not, and not all players support all features - for example Shaka player claims not to support 'indexRange' (or did in 2017: https://github.com/google/shaka-player/issues/765)

Sabre API Request EnhancedAirBooking issue

while making request for EnhancedAirBooking for getting the error response INVALID BOARD POINT
But it works fine for other flightNumber and MarketingAirLineCode.
Sample RequestBody for which getting the above error response:
<soap_env:Body>
<EnhancedAirBookRQ xmlns="http://services.sabre.com/sp/eab/v3" version="3.0.0" HaltOnError="true">
<OTA_AirBookRQ>
<HaltOnStatus Code="UC" />
<HaltOnStatus Code="NN" />
<OriginDestinationInformation>
<FlightSegment FlightNumber="572" DepartureDateTime="2018-07-15T22:05:00" NumberInParty="1" Status="NN" ResBookDesigCode="K">
<DestinationLocation LocationCode="JNB" />
<Equipment AirEquipType="74H" />
<MarketingAirline Code="SA" FlightNumber="7572" />
<MarriageGrp Ind="false" />
<OperatingAirline Code="LH" />
<OriginLocation LocationCode="FRA" />
</FlightSegment>
</OriginDestinationInformation>
<RedisplayReservation NumAttempts="9" WaitInterval="9000" />
</OTA_AirBookRQ>
<OTA_AirPriceRQ>
<PriceRequestInformation Retain="true">
<OptionalQualifiers>
<PricingQualifiers CurrencyCode="CHF">
<PassengerType Code="ADT" Quantity="1" />
</PricingQualifiers>
</OptionalQualifiers>
</PriceRequestInformation>
</OTA_AirPriceRQ>
</EnhancedAirBookRQ>
I think it's because you are sending the request with a different flight number. You should be sending FlightNumber="7572" in the FlightSegment node, not "572".
It is sufficient to provide Marketing Carrier and Marketing Carrier Flightnumber. What leads to confusion here, is that you passed the operating flight number in the node where the marketing carrier flight number is expected. If you want to pass the "572" it should be done in the operating carrier part, but its not required to have it at all.

Does the Wikipedia API support searches for a specific template?

Is it possible to query the Wikipedia API for articles that contain a specific template? The documentation does not describe any action that would filter search results to pages that contain a template. Specifically, I am after pages that contain Template:Persondata. After that, I am hoping to be able to retrieve just that specific template in order to populate genealogy data for the openancestry.org project.
The query below shows that the Albert Einstein page contains the Persondata Template, but it doesn't return the contents of the template, and I don't know how to get a list of page titles that contain the template.
http://en.wikipedia.org/w/api.php?action=query&prop=templates&titles=Albert%20Einstein&tlcontinue=736|10|ParmPart
Returns:
<api>
<query>
<pages>
<page pageid="736" ns="0" title="Albert Einstein">
<templates>
...
<tl ns="10" title="Template:Persondata"/>
...
</templates>
</page>
</pages>
</query>
<query-continue>
<templates tlcontinue="736|10|Reflist"/>
</query-continue>
</api>
I suspect that I can't get what I need from the API, but I'm hoping I'm wrong and that someone has already blazed a trail down this path.
You can use the embeddedin query to find all pages that include the template:
curl 'http://en.wikipedia.org/w/api.php?action=query&list=embeddedin&eititle=Template:Persondata&eilimit=5&format=xml'
Which gets you:
<?xml version="1.0"?>
<api>
<query>
<embeddedin>
<ei pageid="307" ns="0" title="Abraham Lincoln" />
<ei pageid="308" ns="0" title="Aristotle" />
<ei pageid="339" ns="0" title="Ayn Rand" />
<ei pageid="340" ns="0" title="Alain Connes" />
<ei pageid="344" ns="0" title="Allan Dwan" />
</embeddedin>
</query>
<query-continue>
<embeddedin eicontinue="10|Persondata|595" />
</query-continue>
</api>
See full docs at mediawiki.org.
Edit Use embeddedin query instead of backlinks (which doesn't cover template inclusions)
Using embeddedin does not allow you to search for a specific person, the search string becomes the Template:Persondata.
The best way I've found to get only people from Wikipedia is to use list=search and filter the search using AND"Born"AND"Occupation":
http://en.wikipedia.org/w/api.php?action=query&list=search&srsearch="Tom Cruise"AND"Born"AND"Occupation"&format=jsonfm&srprop=snippet&srlimit=50`
Remember that Wikipedia is using a search engine that doesn't yet allow us to search only the title, it will search the full text. You can take advantage of that to get more precise results.
The accepted answer explains how to list pages using a certain template, but if you need to search for pages using the template, you can with the hastemplate: search keyword: https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch=hastemplate:NPOV%20physics

list=alllinks confusion

I'm doing a research project for the summer and I've got to use get some data from Wikipedia, store it and then do some analysis on it. I'm using the Wikipedia API to gather the data and I've got that down pretty well.
What my questions is in regards to the links-alllinks option in the API doc here
After reading the description, both there and in the API itself (it's down and bit and I can't link directly to the section), I think I understand what it's supposed to return. However when I ran a query it gave me back something I didn't expect.
Here's the query I ran:
http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=google&rvprop=ids|timestamp|user|comment|content&rvlimit=1&list=alllinks&alunique&allimit=40&format=xml
Which in essence says: Get the last revision of the Google page, include the id, timestamp, user, comment and content of each revision, and return it in XML format.
The allinks (I thought) should give me back a list of wikipedia pages which point to the google page (In this case the first 40 unique ones).
I'm not sure what the policy is on swears, but this is the result I got back exactly:
<?xml version="1.0"?>
<api>
<query><normalized>
<n from="google" to="Google" />
</normalized>
<pages>
<page pageid="1092923" ns="0" title="Google">
<revisions>
<rev revid="366826294" parentid="366673948" user="Citation bot" timestamp="2010-06-08T17:18:31Z" comment="Citations: [161]Tweaked: url. [[User:Mono|Mono]]" xml:space="preserve">
<!-- The page content, I've replaced this cos its not of interest -->
</rev>
</revisions>
</page>
</pages>
<alllinks>
<!-- offensive content removed -->
</alllinks>
</query>
<query-continue>
<revisions rvstartid="366673948" />
<alllinks alfrom="!2009" />
</query-continue>
</api>
The <alllinks> part, its just a load of random gobbledy-gook and offensive comments. No nearly what I thought I'd get. I've done a fair bit of searching but I can't seem to find a direct answer to my question.
What should the list=alllinks option return?
Why am I getting this crap in there?
You don't want a list; a list is something that iterates over all pages. In your case you simply "enumerate all links that point to a given namespace".
You want a property associated with the Google page, so you need prop=links instead of the alllinks crap.
So your query becomes:
http://en.wikipedia.org/w/api.php?action=query&prop=revisions|links&titles=google&rvprop=ids|timestamp|user|comment|content&rvlimit=1&format=xml