Dec 8, 2011

About "Convergence" TV/Computer Devices

From my G+ post: https://plus.google.com/u/0/117788095721240811664/posts/gurPTpYzMGm


The problem is: if you have a general-purpose computer doublying as your TV set, the interactions for some computer-like usage scenarios become a lot harder:
Have you ever tried to type on a full keyboard standing on your lap on a common sofa, or worse to mouse-around with no plain surface or having to stretch your arm to touch on a far away big screen, not even Siri can help you while you interact with office suites, drawing programs, email clients, sophisticated web apps/sites, and other high complexity applications.

You really need simpler more focused apps, like you have in mobile, to work in such a configuration, and that is the whole point, it is really software that is holding up the "Convergent" (to use the old word) TV+Computer.

We need a base platform that uses news interaction mechanisms like Siri, Kinect, remote touching, etc... And more focused apps to exploit those mechanisms to bring it truly to live. 

I'm working on it, as many others, but I don't think even Apple can really make it happen in the next year, and I would say it could cause a bad 'First Impression' to launch a not up-to-the-task device...



Commenting on a Chris Davies post citing Apple TV-enabled iMac tipped for 2012 television attack - SlashGear

Oct 24, 2011

NugetCracker 0.10

Screenshot on MacOSX
Reengineered the BumpVersion command:

Now it bumps all dependent versions numbers and only after that, it builds all needed projects so that a build error can be fixed and the build be restarted without have inconsistent version numbers.

Sep 11, 2011

NugetCracker building/bumping itself on Linux, Version 0.6.1


laptop:~/Projects/active/NugetCracker$ ./nugetcracker 
NugetCracker 0.6
See https://github.com/monoman/NugetCracker


Using /home/rafael/Projects/active/NugetCracker/MetaProject.NugetCracker
Scanning '.' > '/home/rafael/Projects/active/NugetCracker'
.
Scanned 144 directories
Found 2 components
Sorting...
Finding dependents...


Ready > l
    Listing all components...
    [0001] Commons.Prevalence.1.0 - Minimal prevalence support for .NET [C# Nuget Project]
    [0002] NugetCracker.0.6 - A builder for versioned nugets within a web of dependencies [C# Project]


Ready > help
    Available Commands:
        BumpVersion     Bumps up a version for a component
        Help, ?         Show this list of commands or an specific command help
        List            List components, optionally filtered by regular expression
        Quit, Exit      Stops interactive mode
        Rebuild         Rebuilds current version for a component


Ready > r Commons
    Rebuilding component Commons.Prevalence.1.0
        XBuild Engine Version 2.11.0.0
        Mono, Version 2.11.0.0
        Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2011.
        Build started 9/11/2011 2:13:20 PM.
        __________________________________________________
        Project "/home/rafael/Projects/active/NugetCracker/Commons.Prevalence/Commons.Prevalence.csproj" (default target(s)):
        Done building project "/home/rafael/Projects/active/NugetCracker/Commons.Prevalence/Commons.Prevalence.csproj".
        Build succeeded.
        Time Elapsed 00:00:00.8898590




Ready > r Nug   
    Rebuilding component NugetCracker.0.6
        XBuild Engine Version 2.11.0.0
        Mono, Version 2.11.0.0
        Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2011.
        Build started 9/11/2011 2:13:46 PM.
        __________________________________________________
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj:  warning : Cannot import project '/usr/lib/mono/4.0/Microsoft.CSharp.targets' again. It was already imported by '/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj'. Ignoring.
        Project "/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj" (default target(s)):
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj:  warning : Cannot import project '/usr/lib/mono/4.0/Microsoft.CSharp.targets' again. It was already imported by '/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj'. Ignoring.
        /usr/lib/mono/4.0/Microsoft.Common.targets:  warning : Found a conflict between : 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Using 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' reference.
        Done building project "/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj".
        Build succeeded.
        Warnings:
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj:  warning : Cannot import project '/usr/lib/mono/4.0/Microsoft.CSharp.targets' again. It was already imported by '/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj'. Ignoring.
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj (default targets) ->
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj (default targets) ->
        /usr/lib/mono/4.0/Microsoft.Common.targets (ResolveAssemblyReferences target) ->
        Time Elapsed 00:00:04.7531090


Ready > help bumpversion
    Usage:


    BumpVersion [options] pattern


Bumps up the [AssemblyVersion]/Package Version of the component and rebuilds/repackages. 
The [AssemblyFileVersion] attribute also is kept in sync with the [AssemblyVersion].
If component generates a Nuget it is not automatically published unless the --cascade 
or --publish options were specified.


Options
-part:major|minor|build|revision|none
Increments the major, minor, build, revision version number. 
If option is ommitted the default is to increment build number.
-dontcascade
Update all dependent components to use the new build/package, and them their dependent 
components and so on. If some components generate a Nuget, the Nuget is published to 
a temporary output 'source' and the dependent components have their package references 
updated, if all goes successfully packages are them published to the default or specified
source.
-publish
Specifies that package should be published if successful.
-to:
Specifies source other than the default to publish nugets to. 


Ready > b nug
    Bumping component 'NugetCracker' version from 0.6 to 0.6.1
    ==== cascading
    Setting new version to 0.6.1
    Building NugetCracker.0.6.1
        XBuild Engine Version 2.11.0.0
        Mono, Version 2.11.0.0
        Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2011.
        Build started 9/11/2011 2:15:27 PM.
        __________________________________________________
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj:  warning : Cannot import project '/usr/lib/mono/4.0/Microsoft.CSharp.targets' again. It was already imported by '/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj'. Ignoring.
        Project "/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj" (default target(s)):
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj:  warning : Cannot import project '/usr/lib/mono/4.0/Microsoft.CSharp.targets' again. It was already imported by '/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj'. Ignoring.
        /usr/lib/mono/4.0/Microsoft.Common.targets:  warning : Found a conflict between : 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Using 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' reference.
        Done building project "/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj".
        Build succeeded.
        Warnings:
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj:  warning : Cannot import project '/usr/lib/mono/4.0/Microsoft.CSharp.targets' again. It was already imported by '/home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj'. Ignoring.
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj (default targets) ->
        /home/rafael/Projects/active/NugetCracker/NugetCracker/NugetCracker.csproj (default targets) ->
        /usr/lib/mono/4.0/Microsoft.Common.targets (ResolveAssemblyReferences target) ->
        Time Elapsed 00:00:04.2109010


Ready > q



Sep 9, 2011

Pinta needs help, and I decided to lend a hand...

Pinta is a nice bitmap editing tool, simple and yet powerful, for Linux/MacOSX/Windows

http://www.pinta-project.com/

Jonathan Pobst it's creator and maintainer is focusing his energy on some other ventures and left it untouched for some time know.

Cameron White forked and started to make it tick again, and now Robert Nordan and other people in the project discussion list http://groups.google.com/group/pinta?hl=en, including me , are starting to organize a full project team around it, at github (my fork https://github.com/monoman/Pinta).

I approach this with a more systemic view to have something like the MonoMagic App Wall (chose another name because a store would emphasize a commercial offering), with apps that may be easily installable/usable on any of the miriad platforms where Mono/.NET is available, Pinta could just be the forerunner.

Imagine an iPad/Android version of Pinta, with your drawings/photos synced to your personal cloud storage, so that you can take your editing session back at your Linux notebook later...

Wild ideas...



Sep 7, 2011

NugetCracker 0.5 - Runs on Mono 2.11 on Ubuntu

Kind of self-explanatory...

monoman:~/Projects/NugetCracker$ mono NugetCracker/bin/Debug/NugetCracker.exe -c list
NugetCracker 0.4
See https://github.com/monoman/NugetCracker


Using /home/rafael/Projects/active/NugetCracker/MetaProject.NugetCracker
Scanning '.' > '/home/rafael/Projects/active/NugetCracker'
.
Scanned 128 directories
Found 2 components
Sorting...
    Listing all components...
    [0001] Commons.Prevalence.1.0 - Minimal prevalence support for .NET [C# Nuget Project]
    [0002] NugetCracker.0.4 - A builder for versioned nugets within a web of dependencies [C# Project]
Done!
monoman:~/Projects/NugetCracker$ mono NugetCracker/bin/Debug/NugetCracker.exe -c bumpversion -part:minor nu
NugetCracker 0.4
See https://github.com/monoman/NugetCracker


Using /home/rafael/Projects/active/NugetCracker/MetaProject.NugetCracker
Scanning '.' > '/home/rafael/Projects/active/NugetCracker'
.
Scanned 128 directories
Found 2 components
Sorting...
    Bumping component 'NugetCracker' version from 0.4 to 0.5
    Setting new version to 0.5
    Building NugetCracker.0.5
Done!
monoman:~/Projects/NugetCracker$ mono NugetCracker/bin/Debug/NugetCracker.exe -c list
NugetCracker 0.5
See https://github.com/monoman/NugetCracker


Using /home/rafael/Projects/active/NugetCracker/MetaProject.NugetCracker
Scanning '.' > '/home/rafael/Projects/active/NugetCracker'
.
Scanned 128 directories
Found 2 components
Sorting...
    Listing all components...
    [0001] Commons.Prevalence.1.0 - Minimal prevalence support for .NET [C# Nuget Project]
    [0002] NugetCracker.0.5 - A builder for versioned nugets within a web of dependencies [C# Project]
Done!

Sep 2, 2011

NugetCracker 0.4

Version 0.4 - BumpVersion now increments version, builds project and packs nuget 
Uses new color-capable indenting console-logger


Sample session:

NugetCracker 0.4
See https://github.com/monoman/NugetCracker

Using C:\Projects\MetaProject.NugetCracker
Scanning '.' - 'C:\Projects'
..........................
Scanned 6454 directories
Found 36 components
Sorting...
Ready - l inad
    Listing components filtered by 'inad' ...
    [0001] ManagementPluginAD.2.5.35 - ActiveDirectory Management Plugin [C# Nuget Project]
Ready - help
    Available Commands:
        BumpVersion     Bumps up a version for a component
        Help, ?         Show this list of commands or an specific command help
        List            List components, optionally filtered by regular expression
        Quit, Exit      Stops interactive mode
Ready - help b
    Usage:

    BumpVersion [options] pattern

        Bumps up the [AssemblyVersion]/Package Version of the component and rebuilds/repackages.
        The [AssemblyFileVersion] attribute also is kept in sync with the [AssemblyVersion].
        If component generates a Nuget it is not automatically published unless the --cascade
        or --publish options were specified.

        Options
        -part:[major, minor, build, revision}
                Increments the major, minor, build, revision version number.
                If option is ommitted the default is to increment build number.
        -cascade
                Update all dependent components to use the new build/package, and them their dependent
                components and so on. If some components generate a Nuget, the Nuget is published to
                a temporary output 'source' and the dependent components have their package references
                updated, if all goes successfully packages are them published to the default or specified
                source.
        -publish
                Specifies that even if not cascaded package should be published if successful.
        -to:
                Specifies source other than the default to publish nugets to.
Ready - b -part:revision inad
    Bumping component 'ManagementPluginAD' version from 2.5.35 to 2.5.35.1
    Setting new version to 2.5.35.1
    Building ManagementPluginAD.2.5.35.1
    Packaging ManagementPluginAD.2.5.35.1
        Attempting to build package from 'ManagementPluginAD.csproj'.
        Packing files from 'C:\Projects\ManagementPluginAD\bin\Debug'.
        Using 'ManagementPluginAD.nuspec' for metadata.
        Found packages.config. Using packages listed as dependencies
        Successfully created package 'C:\Projects\ManagementPluginAD\ManagementPluginAD.2.5.35.1.nupkg'.
Ready -

Sep 1, 2011

NugetCracker 0.3

Committed to Github version 0.3 of NugetCracker now with Help command, and some real parsing of project files:

Sample run:

NugetCracker 0.3
See https://github.com/monoman/NugetCracker

Using C:\Projects\xxx\MetaProject.NugetCracker
Scanning '.' > 'C:\Projects\xxx'
..........................
Scanned 6454 directories
Found 36 components
Sorting...
Ready > help
Available Commands:
    BumpVersion  Bumps up a version for a component
    Help         Show this list of commands or an specific command help
    List         List components, optionally filtered by regular expression
    Quit, Exit   Stops interactive mode
Ready >


Jul 14, 2011

Starting a new project: NugetCracker

Well lately I've been a heavy user of NuGet packaging, trying to tame versioning issues in some proprietary projects I work on that evolve, and partly reuse, near to a hundred libraries (many of them in vertically-dependent sets aligned to 'plugins' in the applications).

Let's put it bluntly: IT'S A NIGHTMARE.

First of all, we have many solutions as it is unfeasible to load and work with a single one containing hundreds of projects.
Also we needed to organize source in a hierarchy of folders, for subsystems, for specific plugin trees, for product, separating test projects, etc... So it means we have tree of folders with projects in leafs, nested 3,4, or more levels down from the solution that uses them.
Finally, we have solutions that share some projects (one of the purposes of adopting NuGet is to avoid this pattern, but we aren't there yet).

Summing up the above points, we are very very far from the NuGet assumption of a single-solution, with all projects nested just one level, and mainly using external NuGets from the standard source feed.

<digression>
The standard NuGet feed is rarely used by us, because most packages there just don't support .NET 2.0, which our projects are still bound to, the sole package we could use from there was log4net, which is stable for some years, The rest we needed to cook our own versions of nugets for  Npgsql, nHibernate 1.2, Castle.ActiveRecord 1.0RC3, and so on. All of this is published on a server shared folder, as we doesn't have time allowance to setup a NuGet server
</digression>


Let's just exemplify what all that means...

A contrived and simplified scenario:

Library NugetCracker.Core 1.0.0.0  depends only on framework assemblies.
Library NugetCracker.CLI 1.0.0.0 depends on NugetCracker.Core 1.0.0.0 and framework assemblies
Library NugetCracker.Web 1.0.0.0 depends on NugetCracker.Core 1.0.0.0 and NancyFX and framework assemblies
Program NugetCracker 1.0.0.0 depends on NugetCracker.CLI 1.0.0.0 and NugetCracker.Web 1.0.0.0

Now if we allow the Package Manager to get away with forcing bindingRedirects in the app.config (or web.config), we could publish a new nuget for NugetCracker.Core 1.0.1.0 and update just the NugetCracker program. Now, this may work if the changes are non-breaking, but if, for example, you need to add a new method to some interface in core that the other libraries must implement and the program uses, we will have to update the intermediary nugets, build and publish new nugets, and them update the program.

I think that now you can easily extrapolate that for my real scenario that means many iterations of building/publishing/updating across many solutions.

Well time to fast-forward to what I expect to be able to do when my newest project NugetCracker 1.0 is done:

In the command line:

> NugetCracker
Scanning for solutions in .
Found NugetCracker.sln
-- Project NugetCracker.Core generates nuget for version 1.0.0.0
-- Project NugetCracker.CLI generates nuget for version 1.0.0.0 depends on NugetCracker.Core
-- Project NugetCracker.Web generates nuget for version 1.0.0.0 depends on NugetCracker.Core, NancyFx
-- Project NugetCracker generates program for version 1.0.0.0 depends on NugetCracker.CLI, NugetCracker.Web
No nugets sources specified using default feed
No publishing feed/share specified, publishing to folder .\NugetPackages
Command > BumpVersion --minor --cascade NugetCracker.Core
Bumping version of package NugetCracker.Core to 1.1.0.0
Building NugetCracker.Core
Packaging NugetCracker.Core.1.1
Publishing NugetCracker.Core.1.1 to .\NugetPackages
Updating Package Dependency on NugetCracker.Core to 1.1 in NugetCracker.CLI, NugetCracker.Web
Bumping version of package NugetCracker.CLI to 1.1.0.0
Building NugetCracker.CLI
Packaging NugetCracker.CLI.1.1
Publishing NugetCracker.CLI.1.1 to .\NugetPackages
Bumping version of package NugetCracker.Web to 1.1.0.0
Building NugetCracker.Web
Packaging NugetCracker.Web.1.1
Publishing NugetCracker.Web.1.1 to .\NugetPackages
Updating Package Dependency on NugetCracker.CLI to 1.1 in NugetCracker
Updating Package Dependency on NugetCracker.Web to 1.1 in NugetCracker
Bumping version of program NugetCracker.Core to 1.1.0.0
Building NugetCracker
Packaging .\NugetCracker.1.1.zip for zip installation
Command > PublishTo -Apikey xxxxxxx -Source http://nuget.mycompany.com/
Publishing NugetCracker.Core.1.1 to http://nuget.mycompany.com/
Publishing NugetCracker.CLI.1.1 to http://nuget.mycompany.com/
Publishing NugetCracker.Web.1.1 to http://nuget.mycompany.com/

Becoming reality soon...

May 11, 2011

Tiny Membership Providers

Tiny Membership Providers

I've needed to move an ASP.NET MVC project away from using SQL Server for logon (SQLMembershipProvider).

Searching for 'membership' on Nuget's "Add Package Library Reference" dialog, I've stumbled upon Artem.XmlProviders40 package that implement the trio of providers (memebership, roles, profiles) using xml files as storage. Nicer, the Nuget even updated the web.config to add the providers in the application.

Dumbly I deleted the SQL providers lines and tried to run, after inspecting the users file to find the password for some user there, and pressed F5 to run the app. Clicked on "Log On", and CRASH!!!

Needed to peruse the Web.config of the SampleWebSite project in the sources (http://tinyproviders.codeplex.com/SourceControl/changeset/view/6d50b098f088#SampleWebSite%2fWeb.config).

To find out that I needed to add the defaultProvider attribute to the membership element (and the other two), naming the specific provider to use as being the Xml... part, as named in the providers/add child element.

Also I needed to set the applicationName attribute to "/", as this is an MVC app able to deal with all paths...

Why do I need to get hid of SQL Server, on these days of SQL Compact marveldom? To be able to run in Linux, of course.

Also as the system has just one non-anonymous user: the famous "admin", it is just overkill to have a database even when deployed on a Windows server...


Apr 18, 2011

littlelover. A sequencer in "click-your-notes" easiness


Guy Kawasaki sent me to Holy Kaw for this "Mesmerizing music gizmo" and in a couple of minutes I've came up with this kind of "Caribbean-dreamy" pair of musical phrases.

Entertaning...


Apr 8, 2011

Blogger Dynamic Views are HOT, but doesn't work on this blog :( . Yet?

I followed all the steps to enable the dynamic views for this blog but it isn't showing...

Brings a temporary alert page:

Sorry, dynamic views aren't available for this blog.
You'll be redirected to the blog homepage momentarily. Learn more

And then gets back to the old home view... :(

MoonVorbis - monogatari

MoonVorbis - monogatari

Learning a bit more for doing the WebM on Moonlight project.
Thanks to the commenters that pointed me to this other project.

Update: It is Atsushi Enomoto, from Mono's team who is behind that blog and project. Nice to know...