How to set up RSS feed with a Jekyll site? - github

I am in the process of setting up a blog with GitHub Pages and jekyll on linux. I am using the included "minima" theme, which includes a "Subscribe vie RSS" link at the bottom of the page. When I click this link, I get a message saying:
This XML file does not appear to have any style information associated with it. The document tree is shown below. and a whole lot of xml below it. I am not quite sure how an RSS feed works, but I am pretty sure that it's not supposed to work like this. My xml file is as follows:
<feed>
<generator uri="https://jekyllrb.com/" version="3.8.5">Jekyll</generator>
<link href="https://gaetgu.github.io/feed.xml" rel="self" type="application/atom+xml"/>
<link href="https://gaetgu.github.io/" rel="alternate" type="text/html"/>
<updated>2020-02-03T16:52:33+00:00</updated>
<id>https://gaetgu.github.io/feed.xml</id>
<title type="html">Gaetgu</title>
<subtitle>Copyright© 2020 Gabriel Gutiérrez</subtitle>
<entry>
<title type="html">site launched</title>
<link href="https://gaetgu.github.io/blog/site-launched" rel="alternate" type="text/html" title="site launched"/>
<published>2020-01-28T00:00:00+00:00</published>
<updated>2020-01-28T00:00:00+00:00</updated>
<id>https://gaetgu.github.io/blog/site-launched</id>
<content type="html" xml:base="https://gaetgu.github.io/blog/site-launched">
<h2 id="hello-world-this-is-the-first-post-of-the-gaetgu-ae-website">Hello, World! This is the first post of the Gaetgu AE website!!!</h2> <p>This blog will contain AE content etc.</p>
</content>
<author>
<name>Gaetgu</name>
</author>
<summary type="html">
Hello, World! This is the first post of the Gaetgu AE website!!!
</summary>
</entry>
<entry>
<title type="html">TVC on Model Rockets</title>
<link href="https://gaetgu.github.io/blog/model-rockets" rel="alternate" type="text/html" title="TVC on Model Rockets"/>
<published>2020-01-28T00:00:00+00:00</published>
<updated>2020-01-28T00:00:00+00:00</updated>
<id>https://gaetgu.github.io/blog/model-rockets</id>
<content type="html" xml:base="https://gaetgu.github.io/blog/model-rockets">
<h3 id="thrust-vectoring-control">Thrust Vectoring Control</h3> <p>TVC is an acronymn for <strong>T</strong>hrust <strong>V</strong>ectoring <strong>C</strong>ontrol. TVC works by gimballing the motor in the base of a model rocket, changing the angle of thrust and therefore changing the velocity.</p> <p><img src="https://upload.wikimedia.org/wikipedia/commons/7/7a/En_Gimbaled_thrust_diagram.svg" alt="TVC Diagram" /></p> <p>This is done actively, changing the course of the rocket and stabilizing it from outside factors such as wind. This concept is what allows SpaceX to land their rockets.</p> <p><img src="https://upload.wikimedia.org/wikipedia/commons/6/6e/Gimbaled_thrust_animation.gif" alt="TVC Animation" /></p> <p>Up until fairly recently, the idea of equipping a model rocket with TVC seemed an out-of-reach concept. Once the 3d printer was made affordable and small, people were suddenly able to create their own parts, without having to have access to a machine shop or spend insane amounts of money to get it custom-built and shipped to your location. The PLA used to print parts is also lighter than acrylic and metal, while still being fairly strong, allowing its use in flight vehicles. As for as I know, there is currently only one company, BPS, who is selling a kit to create your own TVC system, though you could create your own gimbal with a personal 3d printer. The main downside to trying to DUY instead of buying a kit is that you also have to create your own flight computer.</p> <h3 id="building-a-tvc-equipped-rocket-through-kit">Building a TVC-equipped Rocket (through kit)</h3> <p>The kit sold by BPS currently costs $349, and is out of stock until sometime spring 2020. The motor gimbal and avionics mount fit inside a 74mm airframe. The airframes can be bought here. You must use a MicroSD card to program the main avionics, which can be bought here. And you must buy either a rechargeable LiPo battery or a 9-volt, the LiPos can be found here. And finally, you must buy motor tubes to fit the motor into the housing, you can buy two of these. A beginner rocket, the Electron, can be built along with BPS’s YouTube™ series, as seen below.</p> <p><img src="https://i.ytimg.com/vi/1BQkMYj6Kps/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCZ49T8hDn5S7x3LKA17FYI2S4r3g" alt="Build TVC Series" /></p>
</content>
<author>
<name>Gaetgu</name>
</author>
<summary type="html">Thrust Vectoring Control</summary>
</entry>
</feed>
I am using the jekyll-feed plugin. This content is actually not found in my github repo, so I assume it's auto-generated and hidden by the plugin. The repo can be found here and the website affiliated with it here Any help is appreciated. Thanks!

Although it looks a bit off, it is working correctly.
You'd add the link to that file in your RSS reader, then that XML file is periodically read to build a feed.

Related

How to diagnose failed validation of Word Add-In when it works on my own setup?

I'm developing an MS Word Add-In. I've tested it on both Windows and Mac, and it works fine for me. Microsoft requires its own validation of Add-Ins to make sure they work correctly, and my Add-In fails for them even though it works for me with the same version of Windows and Word.
I had a phone call with the Microsoft Validation team, and their only suggestion was that I post a question on Stack Overflow so here goes!
This is the version of Windows and Word that works for me but fails for the MS Validation team:
Windows 10 Pro OS build 18362.295
Word 2016 (Version 1908 in particular)
I submitted a very simple add-in to Microsoft for debugging purposes. This simple add-in has only a single button that just opens a web page in the user's default browser.
This is the relevant portion of the manifest:
<Control xsi:type="Button" id="PB.Home.Button">
<Label resid="PB.Home.Button.Label"/>
<Supertip>
<Title resid="PB.Home.Button.Title"/>
<Description resid="PB.Home.Button.Desc"/>
</Supertip>
<Icon> ... </Icon>
<Action xsi:type="ExecuteFunction">
<FunctionName>navigateToWebPage</FunctionName>
</Action>
</Control>
This is the entirety of FunctionFile.html:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" ></script>
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script>
<script src="FunctionFile.js" type="text/javascript"></script>
</head>
<body>
</body>
</html>
This is the entirety of FunctionFile.js:
(function () {
Office.initialize = function (reason) {};
})();
function navigateToWebPage(event) {
window.open('https://www.example.com', '_blank');
event.completed();
}
On my computer, when the button is clicked, a browser tab is opened with the web page, but for the MS Validation team this message appears in the toolbar at the bottom of the Word window
but nothing else happens.
The message "Patent Bots GCP is working on your Examiner Statistics" is generated by Word and not by my add in. "Patent Bots GCP" is the name of the add in and "Examiner Statistics" is the button label (one of the short strings in the manifest).
Any suggestions for how I can find out what is failing for the Microsoft Validation team? They are not able to provide any details about the error other than what I've included here.
I hope a Microsoft engineer sees this and is able to help.
=====
Maybe it is a popup blocker issue? See this: https://www.tek-tips.com/viewthread.cfm?qid=949178
Following up on Ragavan's comment, I did some searching for unexpected behavior of window.open() on IE11 (IE11 is the browser used in MS Word on Windows 10).
I found this other SO question, that noted
In IE on Windows 10 with default settings, if I perform a
window.open() against an external internet site from a page on my
local machine or a server on my local network, I get null.
that question further noted that
Interestingly, if I turn on "Enable Protected Mode" for the Intranet
Zone (so that Protected Mode are the same in the Intranet Zone and
Internet Zone), then the problem goes away.
I suspect this explains why my add in works on my Windows 10 computer, but not on the validation team's Windows 10 VM.
Unfortunately, the solution proposed in the answer there (w = window.open('') followed by w.location = url) does not work in the Word add in.
While this doesn't fix my problem, hopefully it leads the way to a solution...
#gaefan. Just adding my answer too if any one will have the same problem in future.
If anyone trying to open the external site from their add-in using JS window.open will end up in Object Expected aka validation failure error definitely by Microsoft. It depends on various factors like Windows 10 Build version, Office version and the Browser used by Add-ins.
So to publish your add-in successfully in the App source:
Note: This method is a workaround . But in near future If the new edge chromium version is released. Browser used by Add-ins will be changed. Then the workaround can be eliminated.
Use Task Pane add-in approach if your want to open any external site from Add-in.
The reason for recommonding Task-pane add-in is you can make utilize the anchor tag in your HTML like below
<a
href="https://yourcompany.com/"
class="button-config"
target="_blank"
(click)="performOperation()"
>Sign up
</a>
The reason for click event is to trigger any analytics function or trigger logs or add your custom logic
This will definitely open the external site without changing any settings on your browser.
If you want to stick on with command based add-in try adding new Action or Control button to open a external site via anchor tag.
Hope it will help some one. Thanks

Moodle Scorm Course Resume

I am using Moodle 3.2.2 and I upload Scorm course Dispatch file in Moodle. Everything is working fine except Resuming course.
I created my own dispatch file like Scorm cloud does. When I test the same course by download Scorm cloud dispatch file its working fine. But My dispatch file in Moodle is not resuming the course.
Note:
I use iSpring Presenter to create SCORM course.
This is the dispatch structure of files I have.
The dispatch.html code is
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script src="configuration.js"></script>
<script src="utils.js"></script>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script type="text/javascript">
include_script(DispatchRoot + "/scripts/client-driver.js");
include_script(DispatchRoot + "/scripts/client-loader.js");
</script>
</head>
<frameset id="dispatch_frameset" rows="0,*" frameborder="0" framespacing="0" border="0" onload="DispatchStart('dispatch_course_frame')"
onunload="DispatchUnload()">
<!-- We set the src to blank.html to avoid security warnings in IE6 / IE7 when launching in HTTPS -->
<!--<frame id="dispatch_content_frame" name="dispatch_content_frame" src="blank.html" />-->
<frame id="dispatch_loading_frame" name="dispatch_loading_frame" src="blank.html" />
<frame id="dispatch_course_frame" name="dispatch_course_frame">
</frameset>
<noframes>
Your browser must be able to view frames for this content to display.
</noframes>
</html>
client-driver.js is a file which helps to build communication between LMS and SCORM. while client-loader.js file is where communication happens. I am using following code
var completionStatus = Getvalue("cmi.core.lesson_status");
if (completionStatus == "not attempted") {
SetValue("cmi.core.lesson_status", "incomplete");
}
SetValue("cmi.core.exit", "suspend");
console.log(Getvalue("cmi.core.student_id"));
console.log(Getvalue("cmi.core.student_name"));
var entry = Getvalue("cmi.core.entry")
console.log(entry);
if (entry == "resume") {
var val = Getvalue("cmi.suspend_data");
SetValue("cmi.suspend_data", val);
}
else {
SetValue("cmi.suspend_data", "2");
}
When the user close the Moodle LMS window this code execute
SetValue("cmi.core.exit", "suspend");
api.LMSCommit("");
api.LMSFinish("");
But next time I am unable to resume course. Can anyone tell me where I am doing wrong? How to resume course from the last slide.?
I'm going to dig this up from some real old knowledge so bare in mind you need to verify it. I believe the way Moodle was coded; if you set any status it may trigger the SCO to re-launch in "Review" mode which will bugger up your cmi.core.entry. I had to explicitly setup a 'do not status until finish' option in my Content API Library to deal with this issue. Do not confuse "Finish" with "LMSFinish". Its more or less "the student is done with the attempt". Most SCORM 2004 users set the status of the SCO to incomplete when its 'not attempted'. It makes sense. With one glaring difference - In SCORM 1.2 there is only one status for passed, failed, completed or incomplete (not attempted).
Check your cmi.core.lesson_mode to see if my theory is correct on a second launch.
As content developers we probably could have been doing a better job to expose UI elements to hit "I am done" like a turning in of your homework. Some LMS systems even went to extents to put 'done' buttons in their TOC's or Lesson Viewers.
These terms often confuse people and some of it was addressed in SCORM 2004. I believe Moodle abandoned their SCORM 2004 Runtime support.
Keep in mind Moodle also allows data to be set against a SCO in review mode. SCORM didn't exactly dictate what a LMS should do in this situation, but Moodle opted to allow that to continue to change the student attempt. My opinion here is this is a "never ending attempt". We could debate whether this is right/wrong or indifferent - but ultimately the SCORM white paper for 1.2 was mainly optional vs mandatory, and they didn't call out what a LMS should or shouldn't do on this. We'd need a time machine to go back to 2001.

Why smil file is not working with RTMP both in wowza and jwplayer?

I am using wowza streaming engine and jw player to show the stream and working fine. But i want to control bitrate of a video so that user can see the video without much buffering. So i searched in stackoverflow and found following link.
Bitrate JWplayer
Then i created my myVideo.smil file according to above link. Then i go to wowza to test. It is working in MPEG DASH
http://192.168.0.106:1935/vod/smil:myVideo.smil/manifest.mpd
and also ADOBE HDS
http://192.168.0.106:1935/vod/smil:myVideo.smil/manifest.f4m
but i dont know why it is not working with RTMP
in Test Player I put
server=rtmp://192.168.0.106:1935/vod and stream=smil:myVideo.smil
after pressing start button i found connectd Current bit rate 0kbps and only black screen.
I also tried this link in jwplayer
rtmp://192.168.0.106:1935/vod/smil:myVideo.smil
and it is loading but not showing anything.
Again i tried the approach of the link
jwplayer("myElement").setup({
file: "/assets/myVideo.smil",
image: "/assets/myVideo.jpg",
height: 360,
width: 640
});
and it showing "Error loading stream:Manifest not found or invalid"
I don't know what i am missing and why not only working with RTMP. Please Help me.
Here is my sample myVideo.smil file code
<smil>
<head>
<meta base="rtmp://192.168.0.106:1935/vod/" />
</head>
<body>
<switch>H
<video src="sample.mp4" height="720" system-bitrate="200000" width="1280" />
<video src="sample.mp4" height="360" system-bitrate="80000" width="640" />
<video src="sample.mp4" height="180" system-bitrate="30000" width="320" />
</switch>
</body>
</smil>
The problem lies in the fact RTMP in itself is completely oblivious to multiple bitrates.
The way you would do this in JWPlayer is using an HTTP link to:
http://192.168.0.106:1935/vod/smil:MyVideo.smil/jwplayer.smil
This will instruct JWPlayer to use the multiple-bitrate smil received from that URL, connect to given RTMP endpoint, play the first stream listed, and switch streams to different bitrate as needed.
Basically the way to construct the URL is to take HLS/DASH/HDS url and replace the last element (say playlist.m3u8 for HLS) with jwplayer.smil.
But please note this only works for SMILs. If you try and access similar url for sample.mp4 (which would be http://192.168.0.106:1935/vod/mp4:sample.mp4/jwplayer.smil in this case) then it won't work and you will most likely get a playback error.

Custom Lift tags don't work

The following types of tags in Lift do not seem to work for me:
<lift:snippet type="MyClass:render" />
<lift:MyClass.render/>
<lift:MyClass/>
Using these tags results in a Class Not Found error. If I attempt to call a class using
<div class=lift:myclass.mymethod />
it can work. Or if I call it using span tags. For instance, the Hello World example in Pollak's Simply Lift works for me, successfully displaying the Howdy method with the following code:
<span class="lift:helloWorld.howdy">
Welcome to your Lift app at <span id="time">Time goes here</span>
</span>
Currently, my problem is coming from attempting to implement Exploring Lift's (aka The Lift Book) OpenID example in Chapter 13.1. I have downloaded OpenID4Java using sbt as well as the lift-openid library. That example can be found at http://exploring.liftweb.net/master/index-13.html. I have implemented the change to the Boot class, and created the OpenID class and the SimpleOpenIDVendor class. But creating an html file containing
<lift:OpenID.form>
<openId:renderForm/>
</lift:OpenID.form>
causes the following error to be displayed in the browser:
Error processing snippet: openid.form
Reason: Class Not Found
XML causing this error:
<lift:openid.form xmlns="http://www.w3.org/1999/xhtml">
<openid:renderform>
</openid:renderform></lift:openid.form>
The class OpenID was placed in a package that starts with the package code, which is being implicitly found by Lift. It is included in the Boot.scala file with the line
LiftRules.addToPackages("code")
So, I am at a loss. Any ideas?
Note that other lift tags such as lift:bind-at and lift:surround and the like work fine.
As dave posted under my original comment, the problem was the HTML5 parser. Lift is case-sensitive, and cannot find a class with varying case. Since the HTML5 parser automatically makes tags lowercase, you can't use custom lift tags anymore. Instead, you have to use something like
<div class="Lift:MyClass.render"></div>
Note that you CANNOT have
<div class="Lift:MyClass.render" />
as HTML5 apparently does not support such tags.
My OpenID4Java problem is therefore resolved by using:
<div class="lift:OpenID.renderForm">
</div>
Why I don't need to use openid.form still is uncertain. It could be possible I'm implementing it slightly off, but I confirmed that it will take me to an openid login page if I put in the openid link, so it is indeed functional.
Sources:
http://groups.google.com/forum/#!topic/liftweb/H-xe1uRLW1c
https://groups.google.com/group/liftweb/browse_thread/thread/3948df1eee6ec271/ (thanks fmpwizard)

Web site exhibits JavaScript error on iPad / iPhone under 3G but not under WiFi

Connecting to http://www.manage-us.com on an iPad under 3G [used to] result in a JavaScript error which can be seen if the developer console has been enabled. If the same page is accessed using the same iPad under a WiFi connection no error is displayed. [The error has now gone because I applied the fix below!].
Why is this?
I've tried simulating low bandwidth (using dummynet) on Safari on Mac and on the iPad simulator on Mac. This does not reproduce the problem.
I am currently suspecting this is a problem being introduced by my mobile operator in the UK (O2) which is known to modify some content through a proxy cache such as downgrading image files. If you can confirm that you don't experience this problem when connecting by 3G on iPad or iPhone through another mobile operator that would be helpful.
I've investigated this further and discovered that the problem is that the UK mobile operator O2 (the original exclusive iPhone operator for Apple), modifies web content before sending it to iPhones and iPads. Probably before sending it to any device running a mobile browser.
They non-deterministically inline some of the CSS and JavaScript into the main source files of the web pages. This can create errors either because of mistakes in their algorithm or the consequence of stripping white space from source files with syntactic mistakes in the source files which were otherwise benign.
These modifications also strip copyright messages from copyrighted javascript libraries and css libraries and play havoc with delivery optimisations.
For example, imagine if a user is visiting a sequence of pages on your site which all link to jQuery libraries. Instead of letting your mobile browser locally cache the library, O2 inline the library on every page, forcing your phone to load the entire library over and over again for every page.
I've written a blog about the issue here in the hope if drawing a bit more attention to this: http://stuartroebuck.blogspot.com/2010/07/mobile-proxy-cache-content-modification.html
My workaround is to use document.write() to insert the JavaScript library dependencies at load time and prevent O2 from inlining them. This seems to work quite well. e.g.:
<script type="text/javascript">
// <![CDATA[
// Using document.write to load JavaScript dependencies to bypass O2 network inlining of JavaScript.
function loadJS(file){document.write("<" + "script type='text/javascript' src='" + file + "'></" + "script>")}
loadJS("/js/jquery-1.4.2.min.js");
loadJS("/js/myJSLibrary.js");
// ]]>
</script>
Note that, as ever, document.write will not work if the page is served as XHTML.
For anyone needing a solution to this in ASP.NET, this sets the Cache-Control header as per http://stuartroebuck.blogspot.com/2010/08/official-way-to-bypassing-data.html for javascript files using URL Rewrite Module 2.0 http://learn.iis.net/page.aspx/665/url-rewrite-module-20-configuration-reference.
<system.webServer>
<rewrite>
<outboundRules>
<rule name="Compression header" preCondition="Match JS Files">
<match serverVariable="RESPONSE_Cache-Control" pattern="(.*)" />
<action type="Rewrite" value="no-transform" />
</rule>
<preConditions>
<preCondition name="Match JS Files">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="(javascript)$" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
Alternatively can be done using a HttpModule
public class AddHeaderModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.EndRequest += OnEndRequest;
}
void OnEndRequest(object sender, System.EventArgs e)
{
if(HttpContext.Current.Response.ContentType.Contains("javascript"))
HttpContext.Current.Response.Headers.AddHeader("Cache-Control", "no-transform");
}
}
and
<configuration>
<system.web>
<httpModules>
<add name="AddHeaderModule" type="your.namespace.AddHeaderModule" />
</httpModules>
</system.web>
</configuration>