Planet GNU

Aggregation of development blogs from the GNU Project

March 17, 2014

Eitan Isaacson

Am I Vision Impaired? Who Wants to Know?

There has been discussion recently if websites should have the ability to detect whether a visitor is using a screen reader. This was sparked by the most recent WebAIM survey that highlights a clear majority of users would indeed be comfortable divulging that information to sites.

This is not a new topic, there is a spec in the works that attempts to balance privacy, functionality and user experience. This is also a dilemma we have as implementers and have discussed this extensively in bug reports. Even my esteemed colleague Marco put down his thoughts on the topic.

I have mostly felt confusion about this question. Not about the privacy or usability concerns, but really about the semantics. I think the question “do you feel comfortable disclosing your assistive technology to the web” could be phrased in a dozen ways, each time exposing bias and assumptions about the web and computing.

The prevailing assumption is that the World Wide Web is a geo-spatial reality loosely based on the physical world. Just like a geographical site, a site on the Web resides in a specific locality. The user is a “visitor” to the site. The “site” metaphor runs very deep. When I was first shown the Web, in 1994 I remember visiting the Louvre, seeing the Mona Lisa and signing a guest book. In this world, the browser is a vehicle that takes you to distant and exotic locations. Their names suggested it: Internet Explorer, Netscape Navigator, Safari, Galeon, and the imperialistic Konquerer.

White House Home Page, circa 1994

You mean I could visit the White House from my home?? Do I need to wear a tie???

This paradigm runs deep, even though we use the Web in a very different way today, and a new mental model of the Web is prevailing.

When you check your mail on Gmail, or catch up on Twitter, you are using an application. Your browser is just a shell. In your mind, you are not virtually traveling to Silicon Valley to visit a site. You feel ownership over those applications. It is “my” twitter feed, that is “my” inbox. You will not sign a guest book. Just look at the outcry every time Facebook redesigns its timeline, or after Google does some visual refresh to its apps. Users get irate because they see this as an encroachment on their space. They were happy, and then some ambitious redesign is forcing them to get reacquainted with something they thought was theirs. That is why market-speak invented the “cloud”, which ambiguates the geography of websites and reinforces the perception that the user should stop worrying and love the data centers behind their daily life.

Depending how you see the web at any given moment may change how you view the question of assistive technology detection.

If you are applying for a loan online, you are virtually traveling to a loan office or bank. Whether you have a disability or not is none of their business, and if they take note of it while considering your application for a loan that would be a big problem (and probably illegal). In other words, you are traveling to a site. Just like you would put on a pair of pants or skirt before leaving the house, you expect your browser to be a trusty vehicle that will protect you from the dangers and exposure in the Wide World of the Web.

On the other hand, you may use Microsoft’s Office 365 every day for your job or studies. It really is just an office suite not unlike the one you used to install on your computer. In your mind, you are not traveling to Redmond to use it. It is just there, and they don’t want you to think about it any further. The local software you run has the capability to optimize itself for its environment and provide a better experience for screen reader users, and there is no reason why you would not expect that from your new “cloud office”.

But What About User Privacy?

The question of AT detection is really more about perceived privacy than actual privacy. If you had a smartphone in the last 5 years, you probably got frustrated with the mobile version of some website and downloaded the native version from the app store. Guess what? You just waived your privacy and disclosed any kind of AT usage to the app and, in turn, to the website you frequent. This whole “the Web is the platform” thing? It is a two way street. There is no such thing as an exclusively local app anymore, they are all web-enabled. When you install and run a “native” app, you can go back to that original mental model of the web and consider your actions as visiting a site. You may as well sign their guest book while you’re at it.

In fact, “local” apps today on iOS or Android may politely ask you to use your camera or access your address book, but profile your physical impairments? They don’t need special permission for that. If you installed it, they already know.

In that sense, the proposed IndieUI spec offers more privacy than is currently afforded on “native” platforms by explicitly asking the user whether to disclose that information.

Conclusion

I have no simple answers. Besides being an implementer, I don’t have enough of a stake in this. But I would like to emphasize a cliche that I hear over and over, and have finally embraced: “the Web is the platform”. The web is no longer an excursion and the browser is not a vehicle. If we truly aspire to make the web a first class platform, we need to provide the tools and capabilities that have been taken for granted on legacy platforms. But this time, we can do it better.


by Eitan at March 17, 2014 08:32 PM

Lonely Cactus

My failures, games, and an offering of time

Dear internet, life continues to be strange.

A year ago or so, I started writing a custom game engine for a game idea I had.  I actually got as far as creating about 50% of that game engine before it languished.  Yet another uncompleted project.  Yet another example of how, when it comes to my own personal hobby projects, I enjoy of the process of learning and tinkering and abstractificating more than completion.

But I picked up the book Game Engine Architecture by Jason Gregory, and now I'm reinvigorated.  It is interesting to compare it to the much older book Game Coding Complete by Mike McShaffry.  They actually agree on many topics.  Looking at the two books, this idea of writing a game seems tractable, again.   It is interesting to see how game engines are converging into a discipline.

And thus with the idea of writing a game seeming possible again, I've been reading through the SDL2 library docs.  At the moment, it seems that SDL (or monogame and friends) is the best free-software-compatible way to write cross-platform games.  Unfortunately, the docs for SDL2 -- while excellent for a free software project -- are still lacking examples.  The API for SDL1 was modernized for SDL2, and the community is still catching up with the new API.

But, I think I hack this game in private until I have something to show.

§


With the war in Afghanistan finally approaching the endgame, I'll have some free time for volunteering, so if anyone in GNU has a well-defined ~80 hour task for me, hit me up.  I've done embedded systems, global positioning systems, numerical analysis, some device drivers, some low-level audio and video, endless technical docs and a ton of extremely formal software engineering and testing.  Lots of C, a bit of C++. Or if you just need fresh eyes to try out your program. Lemme know. I'm mike at lonelycactus.com and I'm in Los Angeles.

by Mike (noreply@blogger.com) at March 17, 2014 04:34 PM

Andy Wingo

stack overflow

Good morning, gentle hackers. Today's article is about stack representation, how stack representations affect programs, what it means to run out of stack, and that kind of thing. I've been struggling with the issue for a while now in Guile and finally came to a nice solution. But I'm getting ahead of myself; read on for some background on the issue, and details on what Guile 2.2 will do.

stack limits

Every time a program makes a call that is not a tail call, it pushes a new frame onto the stack. Returning a value from a function pops the top frame off the stack. Stack frames take up memory, and as nobody has an infinite amount of memory, deep recursion could cause your program to run out of memory. Running out of stack memory is called stack overflow.

Most languages have a terrible stack overflow story. For example, in C, if you use too much stack, your program will exhibit "undefined behavior". If you are lucky, it will crash your program; if are unlucky, it could crash your car. It's especially bad in C, as you neither know ahead of time how much stack your functions use, nor the stack limit imposed by the user's system, and the stack limit is often quite small relative to the total memory size.

Things are better, but not much better, in managed languages like Python. Stack overflow is usually assumed to throw an exception (though I couldn't find the specification for this), but actually making that happen is tricky enough that simple programs can cause Python to abort and dump core. And still, like C, Python and most dynamic languages still have a fixed stack size limit that is usually much smaller than the heap.

Arbitrary stack limits would have an unfortunate effect on Guile programs. For example, the following implementation of the inner loop of map is clean and elegant:

(define (map f l)
  (if (pair? l)
      (cons (f (car l))
            (map f (cdr l)))
      '()))

However, if there were a stack limit, that would limit the size of lists that can be processed with this map. Eventually, you would have to rewrite it to use iteration with an accumulator:

(define (map f l)
  (let lp ((l l) (out '()))
    (if (pair? l)
        (lp (cdr l) (cons (f (car l)) out))
        (reverse out))))

This second version is sadly not as clear, and it also allocates twice as much heap memory (once to build the list in reverse, and then again to reverse the list). You would be tempted to use the destructive linear-update reverse! to save memory and time, but then your code would not be continuation-safe -- if f returned again after the map had finished, it would see an out list that had already been reversed. (If you're interested, you might like this little Scheme quiz.) The recursive map has none of these problems.

a solution?

Guile 2.2 will have no stack limit for Scheme code.

When a thread makes its first Guile call, a small stack is allocated -- just one page of memory. Whenever that memory limit would be reached, Guile arranges to grow the stack by a factor of two.

Ideally, stack growth happens via mremap, and ideally at the same address in memory, but it might happen via mmap or even malloc of another memory block. If the stack moves to a different address, we fix up the frame pointers. Recall that right now Guile runs on a virtual machine, so this is a stack just for Scheme programs; we'll talk about the OS stack later on.

Being able to relocate the stack was not an issue for Guile, as we already needed them to implement delimited continuations. However, relocation on stack overflow did cause some tricky bugs in the VM, as relocation could happen at more places. In the end it was OK. Each stack frame in Guile has a fixed size, and includes space to make any nested calls; check my earlier article on the Guile 2.2 VM for more. The entry point of a function handles allocation of space for the function's local variables, and that's basically the only point the stack can overflow. The few things that did need to point into the stack were changed to be an offset from the stack base instead of a raw pointer.

Even when you grow a stack by a factor of 2, that doesn't mean you immediately take up twice as much memory. Operating systems usually commit memory to a process on a page-by-page granularity, which is usually around 4 kilobytes. Once accessed, this memory is always a part of your process's memory footprint. However, Guile mitigates this memory usage here; because it has to check for stack overflow anyway, it records a "high-water mark" stack usage since the last garbage collection. When garbage collection happens, Guile arranges to return the unused part of the stack to the operating system (using MADV_DONTNEED), but without causing the stack to shrink. In this way, the stack can grow to consume up to all memory available to the Guile process, and when the recursive computation eventually finishes, that stack memory is returned to the system.

You might wonder, why not just allocate enormous stacks, relying on the kernel to page them in lazily as needed? The biggest part of the answer is that we need to still be able to target 32-bit platforms, and this isn't a viable strategy there. Even on 64-bit, whatever limit you choose is still a limit. If you choose 4 GB, what if you want to map over a larger list? It's admittedly extreme, given Guile's current GC, but not unthinkable. Basically, your stack should be able to grow as big as your heap could grow. The failure mode for the huge-stack case is also pretty bad; instead of getting a failure to grow your stack, which you can handle with an exception, you get a segfault as the system can't page in enough memory.

The other common strategy is "segmented stacks", but the above link covers the downsides of that in Go and Rust. It would also complicate the multiple-value return convention in Guile, where currently multiple values might temporarily overrun the receiver's stack frame.

exceptional situations

Of course, it's still possible to run out of stack memory. Usually this happens because of a program bug that results in unbounded recursion, as in:

(define (faulty-map f l)
  (if (pair? l)
      (cons (f (car l)) (faulty-map f l))
      '()))

Did you spot the bug? The recursive call to faulty-map recursed on l, not (cdr l). Running this program would cause Guile to use up all memory in your system, and eventually Guile would fail to grow the stack. At that point you have a problem: Guile needs to raise an exception to unwind the stack and return memory to the system, but the user might have throw handlers in place that want to run before the stack is unwound, and we don't have any stack in which to run them.

Therefore in this case, Guile throws an unwind-only exception that does not run pre-unwind handlers. Because this is such an odd case, Guile prints out a message on the console, in case the user was expecting to be able to get a backtrace from any pre-unwind handler.

runaway recursion

Still, this failure mode is not so nice. If you are running an environment in which you are interactively building a program while it is running, such as at a REPL, you might want to impose an artificial stack limit on the part of your program that you are building to detect accidental runaway recursion. For that purpose, there is call-with-stack-overflow-handler. You run it like this:

(call-with-stack-overflow-handler 10000
  (lambda ()              ; body
    (faulty-map (lambda (x) x) '(1 2 3)))
  (lambda ()              ; handler
    (error "Stack overflow!")))

→ ERROR: Stack overflow

The body procedure is called in an environment in which the stack limit has been reduced to some number of words (10000, in the above example). If the limit is reached, the handler procedure will be invoked in the dynamic environment of the error. For the extent of the call to the handler, the stack limit and handler are restored to the values that were in place when call-with-stack-overflow-handler was called.

Unlike the unwind-only exception that is thrown if Guile is unable to grow its stack, any exception thrown by a stack overflow handler might invoke pre-unwind handlers. Indeed, the stack overflow handler is itself a pre-unwind handler of sorts. If the code imposing the stack limit wants to protect itself against malicious pre-unwind handlers from the inner thunk, it should abort to a prompt of its own making instead of throwing an exception that might be caught by the inner thunk. (Overflow on unwind via inner dynamic-wind is not a problem, as the unwind handlers are run with the inner stack limit.)

Usually, the handler should raise an exception or abort to an outer prompt. However if handler does return, it should return a number of additional words of stack space to grant to the inner environment. A stack overflow handler may only ever "credit" the inner thunk with stack space that was available when the handler was instated. When Guile first starts, there is no stack limit in place, so the outer handler may allow the inner thunk an arbitrary amount of space, but any nested stack overflow handler will not be able to consume more than its limit.

I really, really like Racket's notes on iteration and recursion, but treating stack memory just like any other kind of memory isn't always what you want. It doesn't make sense to throw an exception on an out-of-memory error, but it does make sense to do so on stack overflow -- and you might want to do some debugging in the context of the exception to figure out what exactly ran away. It's easy to attribute blame for stack memory use, but it's not so easy for heap memory. And throwing an exception will solve the problem of too much stack usage, but it might not solve runaway memory usage. I prefer the additional complexity of having stack overflow handlers, as it better reflects the essential complexity of resource use.

os stack usage

It is also possible for Guile to run out of space on the "C stack" -- the stack that is allocated to your program by the operating system. If you call a primitive procedure which then calls a Scheme procedure in a loop, you will consume C stack space. Guile tries to detect excessive consumption of C stack space, throwing an error when you have hit 80% of the process' available stack (as allocated by the operating system), or 160 kilowords in the absence of a strict limit.

For example, looping through call-with-vm, a primitive that calls a thunk, gives us the following:

(use-modules (system vm vm))

(let lp () (call-with-vm lp))

→ ERROR: Stack overflow

Unfortunately, that's all the information we get. Overrunning the C stack will throw an unwind-only exception, because it's not safe to do very much when you are close to the C stack limit.

If you get an error like this, you can either try rewriting your code to use less stack space, or you can increase Guile's internal C stack limit. Unfortunately this is a case in which the existence of a limit affects how you would write your programs. The the best thing is to have your code operate without consuming so much OS stack by avoiding loops through C trampolines.

I don't know what will happen when Guile starts to do native compilation. Obviously we can't relocate the C stack, so lazy stack growth and relocation isn't a viable strategy if we want to share the C and Scheme stacks. Still, we need to be able to relocate stack segments for delimited continuations, so perhaps there will still be two stacks, even with native C compilation. We will see.

Well, that's all the things about stacks. Until next time, happy recursing!

by Andy Wingo at March 17, 2014 11:40 AM

March 16, 2014

Nick Clifton

March 2014 GNU Toolchain update

Hi Guys,

  It has been a fairly quite month in GNU toolchain land this month.  The GCC mainline is getting very close to being ready to branch for the 4.9 release and the GDB and BINUTILS projects have mainly been working on bugfixes.  But there are a few things worth noting:

  * The ARM simulator now has some tracing options so that you can follow the instructions as they are simulated.

  * The linker now automatically add a a default manifest to any fully linked cygwin or MingGW binary.  This is necessary in order to be able to execute the binary under Windows 8 (or later).  If an application supplies its own manifest then the default one will not be used.

  * The ARM port of the linker has a new command line option --long-plt which enables the generation of larger PLT entries that can support up to 4Gb of code.  The default is to use smaller PLT entries that only support up to 512Mb of code.

    The ARM linker can now also support generating PLT entries that use only Thumb2 instructions for those cores which do not support the ARM instruction set.

  * One limitation of the PE file format, used mainly by Windows binaries, is that it only supports a maximum of 2^15 sections.  This can be an issue with big projects, especially if gcc command line options like -ffunction-sections and -fdata-sections are used.  Microsoft recently released a little variation of the PE format that extends a few fields to support up to 2**31 sections, and the GNU linker now supports this extension.

  * The MIPS gcc port now supports a command line option -mvirt to enable the use of the MIPS Virtualization Application Specific instructions.

  * The TileGX gcc port now supports both big-endian and little-endian targets.

Cheers
  Nick

March 16, 2014 06:02 PM

GNU Hurd development blog

2014-03-16-gsoc

The Google Summer of Code 2014 is on! If you're a student, consider applying for a GNU Hurd project -- details to be found on our GSoC and project ideas pages.

March 16, 2014 03:45 PM

March 14, 2014

GNUnet News

Cryogenic

Cryogenic is a Linux kernel module that allows to reduce energy consumption by means of the cooperation of applications that make use of the same hardware device. In order to achieve this target, Cryogenic schedules the performance of I/O operations on SCSI and network devices, so that the impact they have in terms of energy consumption is small.

by Alejandra Morales at March 14, 2014 06:50 PM

denemo @ Savannah

Release 1.1.4 is imminent - Please test

Spillover
Appending over-length notes spill into next bar.
Works for rests too.
Optional – set a preference for old behavior.
Shortcuts Cheat Sheet
Current set of shortcuts listed.
Alphabetical order.
Gives description of command.
Support for Aubio 4
Microphone Input Note Detection.
Note Onset Detection.
Instrument Tuning.
General Seek and Edit Facility
Choose from all available object types in movement.
Choose from objects at cursor.
Seek and edit the chosen type in music playing order.
Restart last search, wrap to beginning, to next movemnt.
Display Editing
Control+Shift drag to move objects in the input music display
Does not affect the final typeset score.
Useful when the input music display is too cluttered to see clearly.

by Richard Shann at March 14, 2014 06:00 PM

GNU MediaGoblin

Mad About Government Censorship? Let’s do something about it.

node being censored by bot

So you may have seen that yesterday, another news article went live about yet another instance of government censorship on a centralized media platform. Yes, again. This time it’s the UK government and YouTube:

The YouTube permissions that Google has given the Home Office in recent weeks include the power to flag swaths of content “at scale” instead of only picking out individual videos.

They are in part a response to a blitz from UK security authorities to persuade internet service providers, search engines and social media sites to censor more of their own content for extremist material even if it does not always break existing laws.
Irish Times; see also TechDirt coverage

Seems a little bit too familiar? We’ve seen lots of similar stories on government censorship lately, and of course these extend farther than their intended effects. And it’s not just censorship… as we all know, surveillance is on the rise, as we’ve written about before. (Of course, centralization leads to other problems too, like the entire lights-out-at-once of sites like Google Reader.)

The kind of broad-auto-censorship that’s being described above with that story with the UK and YouTube just couldn’t happen the same way in a fully decentralized network the way it can ever-so-easily in a centralized network. It’s just a lot more work to send out notices to each and every site operator. Centralized targets are tempting and easy targets for this kind of thing, where punishing even legal activity is simple enough that we might as well, right?

Spying image from the campaign video

Does it seem like month after month, week after week, these things keep getting worse? Does censorship and surveillance and a loss of the dream of the by-the-people-for-the-people web really make you… mad? Angry? Frustrated?

Yeah? Good. Let’s do something about it.

MediaGoblin campaign launch

We can rebuild the internet the way it was meant to be. We can take things back. But it’s going to take effort and real work. And guess what? That’s what we’re working on. This is exactly the fight that MediaGoblin is in, the future we’re trying to take on.

Awareness and speaking to government officials and so on are all good and critical steps. People should be aware of the rights they have and the rights that are being violated. We can and should try to pass laws and make legal movement… that’s critical. But it’s important to remember that even if we pass new laws, these programs were already unconstitutional. They were already breaking our laws and our rights, and there’s no sign that these programs are shutting down anytime soon. We need to build better tools.

We’re working on these things right now… you can read up all about the kinds of things we’re working towards on our campaign page. If that sounds like it’s a big challeng, it’s because it is. But we can do it… with your help. We have a big community of volunteers, and we have the technical know-how to pull this off. But we don’t have the kinds of huge budgets large corporate silo’ed projects have.

So, want to do something about the present state of affairs? Something revolutionary? Good! Here’s some ways you can help, right now:

We do all this stuff because we believe in it. We want to make the internet a better place, and we can do it. But together, we can do it. Become a hero for the internet. Join our Goblin Force by supporting the campaign… you’ll be a hero to the internet for doing so. Let’s do this thing!

goblin force badge for campaign

by Christopher Allan Webber at March 14, 2014 05:00 PM

German Arias

Support GNU FisicaLab today!

bannerCampaign

Free software is important for education, to not enchain students in using privative software packages. Using free software, schools and universities save money. But, most important, free software gives users the freedom to control their own computers. And encourages students to learn and share, they can make copies of the software to take home and to share with his friends. Read Why Schools Should Exclusively Use Free Software.

Watch in this video how solve an statics problem with GNU FisicaLab (no audio):

fisicalabVideo

With your support, you will help to expand the range of problems to solve in FisicaLab, in adding new features, in the availability in more languages and in many other things. So help FisicaLab to reach $ 7k at March 31, to give students a chance of get an ethical education with free software. Don’t hesitate and make a donation today!

gauge


by Germán Arias at March 14, 2014 12:10 AM

March 13, 2014

FSF Blogs

Can you join us at LibrePlanet?

Five more reasons to come to LibrePlanet.

March 13, 2014 11:50 PM

GNU MediaGoblin

Looking Forward to the 0th SpinachCon!

If you have been reading our blog for a little while, then you already know we love getting feedback from users. Later this month, we’ll be participating in the first ever SpinachCon, a user feedback event for free software projects. The event will be hosted at a local Cambridge makerspace called Industry Lab the day before the Free Software Foundation’s annual conference, LibrePlanet.

Like many small and medium free software projects, we rely on volunteers to fill in the gaps where a larger project would just hire someone. We’re not at all opposed to paying more people to work on MediaGoblin. (See our in progress funding campaign, we would love, love, love to hire more people!) But before we can hire UX experts, we still need to improve our current user experience. Enter SpinachCon — it’s a hackfest for users. People try the software, answer a few questions and get a free lunch in return.

We’ll be joined by Hyperkitty — a user-facing Mailman application, Inkscape — a fantastic vector graphics editor, and LibreOffice — a free office suite. A wide variety of projects and such esteemed company! The event takes place on the Friday before LibrePlanet, so we’ll be welcoming the folks who are in town early to start their weekend off with a nice, easy way to contribute to making free software more awesome. We’ll also be welcoming them with pizza, courtesy of our sponsor, the Open Invention Network.

Thanks! Hope to see you there!

(Oh, and by the way, you have checked out our awesome campaign, right?)

by Deb Nicholson at March 13, 2014 04:35 PM

March 12, 2014

FSF Blogs

Get excited for LibrePlanet 2014!

In this post, LibrePlanet volunteer and free software activist Brendan Kidwell shares why he's excited for LibrePlanet 2014.

March 12, 2014 09:02 PM

Replicant developers find and close Samsung Galaxy backdoor

While working on Replicant, a fully free/libre version of Android, we discovered that the proprietary program running on the applications processor in charge of handling the communication protocol with the modem actually implements a backdoor that lets the modem perform remote file I/O operations on the file system.

March 12, 2014 08:55 PM

March 11, 2014

FSF Blogs

The 0th SpinachCon

Sometimes your favorite free software has a piece of spinach in its teeth, and they need you to let them know.

March 11, 2014 05:10 PM

March 09, 2014

German Arias

GNU FisicaLab is requesting your support

bannerCampaign

FisicaLab is requesting your support to give students a free application to learning physics. Don’t allow that educational institutions become a place where companies can promote the dependence to their privative packages.

Help to liberate the schools from using privative software. Students deserve free software in their schools and universities. With your support to FisicaLab you will help to educational establishments for moving in this direction.

The next release is planned to have modules for fluid mechanics and thermodynamics (power cycles), alongside features like read/save problems, filtering of factors in contextual menu and many others. So help FisicaLab to reach $ 7k at March 31, to give students a chance of get an ethical education with free software. What are you waiting for? Make a donation today and spread the word with your friends.


by Germán Arias at March 09, 2014 06:20 PM

March 07, 2014

GNUtls

March 06, 2014

aris @ Savannah

GNU Aris 2.2 Released

The tarballs are available here:

http://ftp.gnu.org/gnu/aris/aris-2.2,tar.gz
http://ftp.gnu.org/gnu/aris/aris-2.2.tar.bz2

and the Windows version is available here:

http://ftp.gnu.org/gnu/aris/aris-w32-2.2.zip

GNU Aris is a logical proof program. It supports both propositional and
predicate logic, in addition to Boolean algebra and arithmetical logic,
the latter of which it
supports through the use of abstract sequences.

GNU Aris' homepage: <http://www.gnu.org/software/aris/>

New in 2.2

* Added undo/redo functionality.

* Fixed up a lot of bugs in copy/cut/paste.

* Fixed up several bugs in configuration file loading.

* Added support for comments.

* Added LaTeX export option.

* Changed default colors for sentences and references.

* Updated to GTK+ 3.

* Fixed up several processing bugs.

* Fixed up compilation bugs.

* Added example proofs.

by Ian Dunn at March 06, 2014 11:51 PM

FSF Blogs

Show your support for LibrePlanet 2014 with our cool Web badge

With LibrePlanet 2014 just weeks away, here's an easy way to show how excited you are.

March 06, 2014 11:35 PM

Volunteer at LibrePlanet 2014

LibrePlanet 2014, produced in partnership by the Free Software Foundation and MIT's Student Information Processing Board (SIPB), is right around the corner! Everyone has been working really hard over the past few months, and I know this year's conference will be the best one yet.

March 06, 2014 09:25 PM

administration @ Savannah

Savannah https SSL Certificates Updated

The http SSL certificates for Savannah have been updated.

by Bob Proulx at March 06, 2014 09:11 AM

March 05, 2014

FSF Blogs

German Arias

Support GNU FisicaLab today!

Banner

GNU FisicaLab is asking for your help today. Students deserve free software in their schools and universities. With your support to FisicaLab you will help to educational establishments for moving in this direction. GNU FisicaLab is an educational application for solving physics problems. This allows students focus in physics concepts when solving problems, leaving aside the mathematical details. The intuitive use of FisicaLab and its extensive documentation, with a lot of examples, help the student to familiarize quickly with the application.

dynamicsWithFisicaLab

Free software is important for education, to not enchain the students in using privative software packages. Using free software, schools and universities save money. But, most important, free software gives users the freedom to control their own computers. Read Why Schools Should Exclusively Use Free Software.

With your support, you will help to expand the range of problems to solve in FisicaLab, in adding new features, in the availability in more languages and in many other things. So help FisicaLab to reach $ 7k at March 31, to give students a chance of get an ethical education with free software. Don’t hesitate, and show your support to free software at schools.


by Germán Arias at March 05, 2014 07:20 PM

GNU Remotecontrol

Newsletter – March 2014

THIS MONTH…..
-TRENDS
-EYE CATCHING
-ANNUAL PLAN
-DISCUSSIONS
-EXISTING CODE
-SECURITY
-LASTLY

-TRENDS
The stuff going on in the big picture now…..

United States Electricity Price per KWH
Current and Past

December January Trend % Change
$0.131 $0.134 Increase 2.29%
Year January Trend % Change % Since
2004 $0.091 Same 0.00% 0.00%
2005 $0.094 Increase 3.30% 3.30%
2006 $0.108 Increase 14.89% 18.68%
2007 $0.113 Increase 4.63% 24.18%
2008 $0.116 Increase 2.65% 27.47%
2009 $0.126 Increase 8.62% 38.46%
2010 $0.124 Decrease -1.59% 36.26%
2011 $0.125 Increase 0.81% 37.36%
2012 $0.128 Increase 2.40% 40.66%
2013 $0.129 Increase 0.78% 41.76%
2014 $0.134 Increase 3.88% 47.25%

United Kingdom Utility Prices
Current and Past

Historical Pricing

-EYE CATCHING
The stuff that has caught our eye…..

Demand Response

  • A press release, announcing the International Electrotechnical Commission (IEC) has approved the OpenADR 2.0b Profile Specification as a Publicly Available Specification (PAS).
  • A press release, announcing the OpenADR Alliance and Wi-SUN Alliance have formed a liaison agreement.
  • An article, considering the impact of Google acquiring Nest and how the acquisition could play out in the Demand Response arena.

Smart Grid – Consumer

  • The results, of the Residential Demand Response Program using the Bring Your Own Thermostat approach.
  • An article, illustrating the complexities and shortage of interoperability when using a smartphone to accomplish home automation.

Smart Grid – Producer

  • A survey, detailing the concerns utility executives struggle with now. The leading concern is old infrastructure.
  • A discussion, considering three perspectives on the future of electric utilities.

Smart Grid – Security

  • An article, reporting Lloyd’s of London has concluded energy firm cyber defense protections are inadequate. They now refuse to issue any policy to any energy firm. SANS provides commentary on this matter. A conclusion causing insurers to turn away an energy firm is resounding proof the current comprehensive strategy is not leading to a more secure energy firm.

-ANNUAL PLAN
Status Update of our 2014 Plan…..

Demand Response

  • Scripting for Unattended Server Side Automation is progressing nicely. We have completed our first script. This script is integral to any Demand Response effort.
  • No other work since the January newsletter.

Unattended Server Side Automation

  • A PHP script to automatically select all thermostats and set their Date/Time is complete. We are finishing the usage instructions. We expect to release the script before the next Blog posting.
  • No other work since the February newsletter.

Power Line Communication

  • Further discussions with the members of the electronics industry.
  • No other work since the January newsletter.

Talk to us with your comments and suggestions on our plan for this year.

-DISCUSSIONS
The stuff we are talking about now…..

CRISIS COMMUNICATION
SANS reports an emerging story, about a cyber attack on Target through those involved with Target’s refrigeration and HVAC systems. The attacker infiltrated Target’s systems, stealing payment card data. It appears the attacker gained a foothold in Target’s systems, by using the access credentials of a refrigeration and HVAC company who worked at several Target locations. There is no evidence, to date, either the refrigeration or HVAC systems were involved in the attack. There is evidence of a phishing attack involving malware.

We bring this story to your attention as a reason to reiterate how we handle our public communication plan. We use:

  • GNU remotecontrol - Mailing Lists as our primary means of crisis and announcement communication. This is the only list, for now. An alias from bug-remotecontrol is in place.
  • GNU remotecontrol – News as our secondary means of crisis and announcement communication.
  • GNU remotecontrol – Newsletter (Blog) as our tertiary means of communication, though we do not use it for crisis or announcement communication. The Blog is a newsletter style format. This format provides the ability to get pertinent information GNU remotecontrol users, though not critically important to them.

We do hope there is never a security concern involving GNU remotecontrol. However, in the event any form of crisis involving GNU remotecontrol does occur, we want to be capable and ready to address the crisis as quickly and effectively as possible. Please note the Key Principles of Choosing Decision Makers and Security Considerations are addressed in the GNU remotecontrol manual, as part of our collective preemptive efforts to avoid a security incident.

OTHER TYPES OF THERMOSTATS?
Many people have asked us about adding other types of thermostats to GNU remotecontrol. There are three questions that need to be answered before we can offer GNU remotecontrol support for any IP thermostat. These questions are:

  • How to CONNECT to it (NETWORK).
  • How to READ from it (CODE).
  • How to WRITE to it (CODE).

It is our hope to have dozens and dozens of thermostat types that work with GNU remotecontrol. Let us know if you designed or manufactured a device and you would like to test it with GNU remotecontrol.

-EXISTING CODE
The stuff you may want to consider…..

BUGS
We have 0 new bugs and 0 fixed bugs since our last Blog posting. Please review these changes and apply to your GNU remotecontrol installation, as appropriate.

TASKS
We have 0 new tasks and 0 completed tasks since our last Blog posting. Please review these changes and apply to your GNU remotecontrol installation, as appropriate.

-SECURITY
The stuff you REALLY want to consider…..

INDUSTRIAL CONTROL SYSTEMS
A presentation from the Black Hat Briefings - 2013 USA Conference, explaining the exploration of the Teridian System on a Chip (SoC), along with scenarios and techniques to attack the Harvard Architecture Smart Grid Systems, demonstrating pathways to gain coveted binary images of firmware and resident code execution.

REMEMBER
GNU remotecontrol relies on OS file access restrictions, Apache authentication, MySQL authentication, and SSL encryption to secure your data. Talk to us you want to find out how you can further strengthen the security of your system, or you have suggestions for improving the security of our current system architecture.

-LASTLY
Whatever you do…..don’t get beat up over your Energy Management strategy. GNU remotecontrol is here to help simplify your life, not make it more complicated. Talk to us if you are stuck or cannot figure out the best option for your GNU remotecontrol framework. The chances are the answer you need is something we have already worked through. We would be happy to help you by discussing your situation with you.

…..UNTIL NEXT MONTH!


by gnuremotecontrol at March 05, 2014 05:25 PM

FSF Blogs

March 04, 2014

Henrik Sandklef

Wanted: a strategy for teaching programming to newbies?

What is a good strategy for teaching a programming language to beginners?

I wasn’t a briliant student in any of the years I studied – I was lazy and better in finding records (vinyl) in record stores than actually studying – but I guess I was ok. Anyhow, I was kind of good in math (and history iirc). So I never encountered the problems that I have discovered among some of our students lately. This does not, and I don’t mean to, imply that I am smart and they are stupid. Studying lambda calculus now I appreciate my students’ problems better – so far I suck at lambda calculus so I cant’t be that smart!

Now, as a teacher, at a University I see a lot of frustration among students wanting, or are requested, to learn to program. Are the students stupid or is there something else that is incorrect? I’ve touched the topic before and will do so more in the future. My belief and my experience say the latter. So how do attack the problem of frustrated students? Tell them that they are doing university studies and they should get used to it? Well, to some extent it is true and perhaps important for students to realise, but I don’t think that’s the only way to go. So I want to get a bit deeper into the problems the students encounter. What are the main problems in learning how to program? Listing and discussing the main problems I think we can ask ourselves the question of what  a good strategy is.

Two main problems. One problem stands out, mathematical skills are required. Another one is the complexity of popular languages. I’ll try to go through the two problems below.

Mathematical background
Most languages, or rather the education (lectures, books, …) of it, require a mathematical background. Concepts like function and variable are assumed to be familiar to the reader.

Given the last two courses I’ve been involved in, where programming has been introduced to students with no thorough mathematical background I have understood via my own experience in supervising and listening to students but mostly via chats (not structured as proper interviews) with students that functions and variables are hard to grasp. How tolve this? I see two solutions

  1. Require a mathematical background for the course/program
  2. Try to find other means as a teacher. Be it the course literature, lecturing methods, dedicated tools.

Perhaps (1) is the only one that will work properly and this is used in programs where you end up as a computer science engineer. Doing (1) in a program for Applied IT or something similar where the students should not become cs engineers would perhaps make my life as a teacher easier but I think we will miss a lot of talented students – I don’t believe in a programming gene! I have met a lot of talents in students with no thorough math background. So for me it is interesting to look into (2). Fact is, I have been totally absorbed by this the last couple of weeks. I will write more about this, lots more… but I need to read, think (yes, sometimes I can think!), discuss and probe students a lot more.

Complexity of programming languages:

I have often showed a small piece of code to exemplify how complex a language is. At a conference in January I saw the same code presented by someone else to exemplify my point.. I can interpret this coincident in two ways – either I am clever or I need to study more literature on the subject since this is the canonical example. I’d go for the latter. Anyhow, lets look at the following piece of code;

int x=1;

Trivial isn’t it. Apart from the fact that isn’t if you were to explain everything behind the scenery. I think it would be fairly easy to postpone r-value and l-values and so forth. But if you tech Java, a popular language since the industry uses it, you have to write all the code below to simply output “Hello” on the stdout.

public class LeoSayer {
    public static void main(String args[]) {
        System.out.println("Hello");
    }
}

Now, this is complex. Ok, we can skip using the public keyword in the class. But still, class? static? public? void? main? String? args? []? System? System.out?

Of the code above I think only the println(“Hello”) would be easy to explain. But the rest?

….. As I see it we now have two options of explaining all the extra code:

  1. Still maintain that Java is easy to learn – but this is too hard to explain so just skip it.
  2. Saying Java is complex – so we need to skip it. Just accept.

How about explaining all the code? The students would leave the room before you’d come to the word static!

Note: I have written a small tool, that is too large to fit in the margin, that would remove most of the problems in the Java code above. More on this tool another day.

So clearly Java is not perfect as the first language. Last term, when introducing programming to students, we switched approach a bit. We started off by teaching some of the basic stuff like variable, function and assignment using Python. And later, after two weeks, switch to Java – when introducing Object Orientation. If Object Orientation is the way to go is another question – for me it has never been natural to think OO. Can’t help to state some other questions: Should the University adapt to industry needs? Should Universities teach the best available languages and make the industry adapt? Can we do both? Should Universities even consider the industry needs?

Anyhow, in Python, to output “Hello” you write:

print "Hello"

… using Python you can choose to use it interactively or execute the code via a script. This piece of code was understandably easier for students to understand than the Java counterpart. With Python you can go from procedural style to OO – but I believe Python’s OO syntax is too different from Java’s so I prefer to leave Python before reaching OO.

Apart from students disliking the syntax differences between Python and Java and having to make a switch between the languages we did see an improvement in results. There was actually less frustration in total compared to the year before. Unfortunately the results are not scientifically backed up – so you have to trust me on this one. Even though the students were frustrated about having to learn two languages I noticed that they asked less questions than the year before when we taught only Java. The frustrations they had is something we (read I, me, myself) have to get rid off – if we decide to keep the Python first and then Java strategy.

So after all this random thoughts, it’s almost time to state the question. But first some limits to the question:

  • The students don’t know mathematics
  • We cant assume that the students are willing to die to learn programming – we should perhaps make them want to do so. Using Free Software would be one strategy since you can explore everything you use. But that is a question about motivation. Another time!
  • The students should know Object Orientation and Java after having finished.

Ok, the question:

Can you recommend/propose a strategy when teaching programming?

I will set out on yet another quest trying to find a strategy. This is perhaps a sub task of the book finding quest or perhaps it is the opposite. Any input is welcome, as long as it is constructive….


by sandklef at March 04, 2014 10:28 AM

denemo @ Savannah

Release 1.1.2 is out now

New features include:

Links to source files can be relative to current score location
Transcribing from MIDI
Play in to a click track.
Enter rhythm afterwards.
Guided MIDI import
Durations can be checked as they are entered.
Support for LilyPond 2.18
Old scores are updated for incompatible syntax.
Re-shaping/Re-positioning Ties
Both WYSIWYG and tweaking width/height/convexity.
LilyPond View Improvements
Bracket Matching.
Line numbering visible.
Cursor position highlighted.

by Richard Shann at March 04, 2014 10:15 AM

GNUtls

March 03, 2014

freeipmi @ Savannah

FreeIPMI 1.4.1 Released

http://ftp.gnu.org/gnu/freeipmi/freeipmi-1.4.1.tar.gz

Major features below, please see NEWS for detailed changes.

- Support new tool ipmi-config.
- Support Intel Data Center Host Interface / Management Engine as
optional driver type for in-band communication.
o Support OEM extensions for Intel Windmill, Wiwynn Windmill, and
Quanta Winterfell motherboards in ipmi-sel and ipmi-sensors.
These motherboards are also know as motherboards for the Open
Compute Project (OCP).
o Support DCMI configuration in ipmi-config.
o Update FreeIPMI for changes in IPMI 2.0 Errata 5.
o Update ipmi-oem Intel Node Manager OEM commands for changes
listed in Intelligent Power Node Manager 2.0 specification.
o Fix portability issues for Apple / OS X.

by Albert Chu at March 03, 2014 09:57 PM

GNU MediaGoblin

Help spread the word on the MediaGoblin campaign!

So the campaign is off to a pretty good start! In just half a week we’re over 20% of the way to meeting our first milestone. Of course, we’d love to do more than just meeting the first goal… we get to the really exciting parts of “decentralizing the web” once we hit the second milestone of our campaign. (See the campaign page for details on this!)

unlock characters

But we need your help. It seems that people who visit the campaign page seem to have a good chance of donating, which is great! That means that if we can get that message out to more people, all the better chance of getting the funding to pull off some really cool and important stuff!

Can you help us spread the word? Here’s several ways you can help:

  • Write about MediaGoblin and post the video to your blog or website!
  • Share the MediaGoblin campaign on your social networks!
  • Try to get us in the news! If you can post about MediaGoblin to news sources you think are interesting, that makes a *huge difference*! Let them know that they can email press@mediagoblin.org if they want to talk!
  • Tell people you know about the campaign! Showing someone personally or sending an email to people you know who care about these issues really helps!

Our best explaination for what we’re doing and working on is our campaign video. Embedding the video is now easy! If you have the ability to embed raw HTML in your blog or website, just copy the text below:

Writing things in your own words is of course always best! But you can also feel free to borrow and modify the following as you see fit:

MediaGoblin is a publishing system for the web, it can host all your media of any kind (like a YouTube + Flickr + SoundClound + more that anyone can run!). Plus it’s free software, so you can run it and adapt it to your needs. Want to help the project towards federation and privacy features? Check out their fundraising campaign!
http://mediagoblin.org/pages/campaign.html

If you’re looking for some images from the campaign, I put together a campaign kit that you are free to use in your blogpost, article, whatever!

Thanks for your help! As always, MediaGoblin is powered by people like you, and we greatly appreciate your support!

goblin force badge for campaign

by Christopher Allan Webber at March 03, 2014 05:45 PM