05 March, 2015

Bookmarklet idea — Collapse all subsections?

When looking at some articles at Rosetta Code I came up with the idea of «What if we could collapse all the language subsections?», or in the more general sense «What if we could add collapsing to all subsections of a web page?».

The gist of the idea is that for a site like Rosetta Code where you could be interested in mainly one or a few languages, most of the sections are not so interesting. Similarily on a web page with rather a long text, it could be interesting to look only at a particular section. Wouldn’t it then be nice to collapse all the other sections, and expand them when needed?

Introducing bookmarklets

To achieve this one needs to change the web page in question. Ideally one could contact the web author and ask them to add collapsible sections, but this is not feasible in all cases. Another option would be to use some Greasemonkey scripts (or user scripts), but these are depreceated by a number of reasons.

Bookmarklets are however still applicable, and not so dangerous to use, as you choose when and on which pages you want to activate them. You might need to reenable them after clicking on a new link, but they could do the trick for this task.

Make Your Own Bookmarklets With jQuery from Smashing Magazine and Create bookmarklets the right way from tuts+, shows examples of what is needed to make an jQuery enabled bookmarklet. Either of these could be used as a base template together with the pseudocode and specifics given below. For those interested in playing a little with this, you could also install the jQuerify extension for Chrome.

General pseudocode

The gist of the idea to get collapsible section are:

  • The web site needs to use logical well-structured html, and header elements (h1 through h6) which will be used to divide into sections
  • If a header element does not have an id, assign an unique id to the header element
  • Add div’s between header elements at same level, where the id of the div corresponds to the header id
  • For each header element add span element with text of show or hide
  • Use jQuery (or similar) to hide/show sections when clicking the span elements
  • Possibly change formatting of header elements so that they don’t use that much space

Some specifics for Rosetta Code

When applied to Rosetta Code, i.e. see String_length and/or String_lenght#Swift, one could imagine that the first would render the whole page, but collapse all sections from h2 and lower. The second variant (with a language tag) could then autoexpand the Swift section, and thusly show the general description and the corresponding solution for the Swift language.

Maybe it also would be nice to auto-hide the TOC, and possibly change all the headers into a comma separated list, which could expand the given section. (In other words, auto-hide all the header’s and all div’s, and only show a clickable language name which would show/hide that language.

The main part of the page would then look something like:

<h1>String length</h1>
In this task, the goal is to find the character and byte length of a string …
… and 14 bytes when encoded in UTF-8.
Contents [show ]

4D, ActionScript, Ada, … , Standard ML
<h2>Swift ______________________________________ (edit) </h2>
<h3>Character length</h3>
Swift has a concept of …
… end of text
Tcl, TI-89 BASIC, …, zkl

Do note that none of the links are actually working!

Can someone make the bookmarklet?

I do believe this is possible to achieve without to much work, but I’m not sure if I’m currently able to do this in javascript (both due to time constraints and due to limited knowledge of javascript/jQuery). But if someone attempts to do implement this, please let me know, and please let the code be open sourced.

Possibly the specific version for Rosetta Code could be made into a Chrome extension, or if some of the system administrators sees this and like the idea, they could make it a part of the Rosetta Code site as well.

I for one would at least love to see this implemented on Rosetta Code, in addition to having the category pages for a given language auto-link to that language section.

01 March, 2015

Learning Swift through Rosetta Code Contributions

Spring 2015 I decided to learn Swift so that I could develop applications for the Apple platforms of Mac OS X and iOS. I soon found that Swift is an evolving language, and that online resources are getting there bit by bit.

Rosetta Code – Loads of Programming Examples

One of the resources I found was Rosetta Code which describes itself like:

Rosetta Code is a programming chrestomathy site. The idea is to present solutions to the same task in as many different languages as possible, to demonstrate how languages are similar and different, and to aid a person with a grounding in one approach to a problem in learning another.

This site therefore can both provide me with information as to how different tasks are accomplished using Swift, and maybe just as interesting since I want to learn Swift a list of tasks not implemented in Swift.

I’m planning to implement some of these unimplemented tasks, and if you want to you can see the special page of my contributions.

Connection to «Odds by Even»

In addition to making contributions to Rosetta Code I will also from time to time, I hope, be posting articles here on Odds by Even on given themes which I find interesting when stumbling along learning Swift.

As an example when doing research to extend the String repeat sections on Rosetta Code, I found stuff talking about extensions and overloading, and I also dived into a performance analysis on various alternatives. These areas will be covered in future articles.

The plan is also to include blog articles which links to Swift playgrounds, which is an interesting tool/approach to playing with different snippets of Swift code. In due time also articles on other languages, or some tidbits on the tools I’m using will be presented.

Questions and Resources through StackOverflow

As I’m only starting out, I’m not quite sure what other resources are available beside random articles, but I do know that StackOverflow holds loads of articles tagged for Swift, and my homepage on StackOverflow will link to my activity and contributions.

StackOverflow also has a page on the Swift tag which has links to different resources related to Swift. And when doing searches on google, I tend to favour the results from StackOverflow as they usually are concrete and to the point.

Do however be notified that since Swift is an evolving language, some of the answers might be referring to a previous version of Swift. This especially is true for older questions and answers from first half of 2014. comment test…