Tuesday, August 12, 2014

Provision SharePoint ClientWebPart custom properties through PowerShell

Currently developing on projects where a lot of SharePoint provider hosted apps are involved. App parts with custom properties are used to integrate them on SP webpages and I needed to provision those properties through PowerShell.
Not really rocket science, but couldn't find anything on the web and needed to decompile to find the solution, so decided to drop it here. The ClientWebPartProperty does the job:

$webpart = New-Object Microsoft.SharePoint.WebPartPages.ClientWebPart
$newProperty = New-Object Microsoft.SharePoint.WebPartPages.ClientWebPartProperty
$newProperty.Name = "nameoftheproperty"
$newProperty.Value = "valueoftheproperty"
$webpart.Properties.Add($newProperty)

Don't forget the set the FeatureId, WebPartName and ProductWebId properties as explained here.

Saturday, March 2, 2013

Livestamp Your SharePoint Items

Last week I came across a small, nifty jQuery plugin, called Livestamp. It provides an auto-updating timeago text for timestamped HTML. In other words, a much more human readable representation for a datetime value. You can see some demo's here. I'm aware that there're some other similar projects, but in my opinion Livestamp is the most simple and active one at the moment.

SharePoint is loaded with less readable datetime values, so I searched for some nice Livestamp integration. Unfortunately I couldn't find a ready-to-roll, packaged solution and since I think some neat integration could be useful, I decided to build one.

It's a custom field for SharePoint 2010. When the solution is deployed there's an option to create a Livestamp column in your lists. When creating a new column you need to select a related date column. If the date column holds a date or datetime value, the Livestamp column will render the related, auto-updating, timeago text.

Solution package and source code are available at Codeplex.


v0.1.1:
- Added support for Calculated and Lookup columns with DateTime output
- Sorted column selection (alphabetically)

v0.1.0:
- Initial release

Saturday, February 23, 2013

JsRender Your Google Gadget

During a couple of my last projects I used JsRender as HTML templating engine. Although it isn't even in beta, the results are very satisfying. It's fast, featured, easy/readable syntax and very active in development.

Now I needed some templating Gadgets for my personal Google Site, but unfortunately couldn't find any JsRender based solution. Since it was for personal use only and I didn't want to learn another syntax for this, I decided to build one. Using external gadgets resulted in too much clutter.



The gadget allows you to bind a JSON or XML webservice to a HTML template. All the gadget needs is the datasource and template URL's and optionally a CSS link.

In this example I used a Last.fm webservice that returned my 10 latest played tracks with some extra info. 

The returned data looks like this:



Based on this structure I created a simple template that shows the first 5 tracks with artist and link in a list. If you're not familiar with the JsRender syntax, more info and demos. The gadget supports Livestamp.

<ul>
{{for recenttracks.track}}
{{if #index < 5}}
<li>
<a target="_blank" href="{{>url}}">
{{>name}}
</a>
<br/>
{{>artist["#text"]}}
</li>
{{/if}}
{{/for}}
</ul>

I saved the file with a .tmpl.html extension and uploaded it somewhere. After this, I added a new gadget by url to a page and used this url:

https://sites.google.com/a/achappey.nl/achappey-nl/home/develop/data2html/sources/Data2HTML.xml

This option screen appears:


























TypeFormat of the datasource (JSON or XML)
DatasourceURL of the datasource
Template URL of the JsRender template
JavascriptURL of custom Javascript files that needs to be loaded, for example for JsRender helper 
functions (optional) 
CSS URL of CSS file 
Disable cachingNormally, the template and the data are cached for about an hour, but with this option 
enabled the template and data will be refreshed every request.
Linkify Enable this if you want to Linkify. Wrap the content that needs to be linkified in 
linkify css class
Hashtag search prefix URL prefix that's used  to Linkify hashtags (optional)


The options I used for this demo:


Type JSON
Datasource http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=achappey&api_key=80b1326fb347ed61e59f65a782480c3e&format=json
Template https://sites.google.com/a/achappey.nl/achappey-nl/home/develop/data2html/sources/tracksDemo.tmpl.html

You can see this demo in action here. And more here and here.

Sunday, February 17, 2013

Racen tegen de machines

Origineel is het niet, maar het dekt wel de lading hoop ik.
Naar aanleiding van het gelijknamige boek, Race Against The Machine van Erik Brynjolfsson en Andrew McAfee en de recente blogpost op Techcrunch Get Ready To Lose Your Job.

Bovengenoemden leggen een relatie tussen de huidige technologische revolutie en een veranderende arbeidsmarkt/herverdeling van kapitaal via het mediaan inkomen.

Gemiddeld vs mediaan

Het mediaan is de middelste waarde van een aantal getallen. Om het verschil met het gemiddelde duidelijk te maken: Er zitten 10 arbeiders in een kroeg. Als de arbeider met het laagste inkomen de kroeg verlaat en Bill Gates loopt naar binnen, zal het gemiddeld inkomen stijgen, maar het mediaan inkomen blijft gelijk.

Tijdens de industriele revolutie waren het gemiddeld inkomen en het mediaan inkomen met elkaar in evenwicht. Dat wil zeggen, zodra het gemiddeld inkomen steeg, steeg het mediaan inkomen evenredig mee. De grote massa profiteerde als de totale productiviteit steeg. Die trend is veranderd, het gemiddeld en het mediaan inkomen zijn losgekoppeld.

Het totaal inkomen wordt verdiend door een kleinere groep mensen. Iets wat redelijk goed uit te leggen is aan de douanebeambte op Schiphol die de zakelijke passagiers langs een irisscanner ziet lopenObers. Machinisten. Chauffeurs. Fabrieksarbeiders.

De cijfers zijn allemaal gebaseerd op de Verenigde Staten. Over Nederlandse cijfers/trends kon ik weinig vinden, dus heb geprobeerd zelf wat bij elkaar te speuren bij het CBS.

Ben geen economoon, maar heb simpelweg het gemiddelde en het mediaan inkomen naast elkaar gelegd. En het lijkt er dus op dat ook in Nederland, heel voorzichtig, een zelfde trend zichtbaar is. Het gemiddeld inkomen stijgt harder dan het mediaan inkomen.

Volgens mij staan we staan dus niet voor niets op nummer 15 in de lijst Robot Takeover.

Wednesday, February 13, 2013

Wereldwijd WiFi, maar alleen op je plank

Een aantal weken geleden werd ik wakker met een Google Alert waar ik lang op zat te wachten:
Wereldwijd WiFi komt ook naar Nederland! En dan ook nog KPN, de grootste speler op onze markt.
Het heeft 3 koffie geduurd voordat ik het geloofde, er verschenen meer dan 2 miljoen nieuwe WiFi hotspots aan de Nederlandse horizon. M'n dure 3G verbinding slaakte een zucht van verlichting.

Die aantal weken waren verheugend. Ziggo gaat overal in hun dekkingsgebied WiFi aanbieden en Fon/KPN volgen hand in hand. En wat zou het partnerschap voor aanzuigende werking hebben op de overige potentiele Fon leden (lees: klanten van Ziggo/UPC/de rest) bedacht ik me nog.......

Die vraag is vandaag dus beantwoord: niet. Fon routers zijn niet meer te bestellen in Nederland. Hun antwoord is veranderd in een KPN advertentie. Iets wat toch enigzins indruist tegen hun principe (update:  principe is inmiddels verwijderd van hun site):

"When we say: "Anyone with a broadband connection can join Fon", we mean it. "

KPN wil dit voorkomen en blokkeert de verkoop.
Zou het registreren van de routers nog wel blijven werken in Nederland? Of heeft Fon hun principes echt verkocht?

Afgelopen feestmaand heb ik een aantal routers kado gegeven. Niet geheel onverwacht, het is immers Fon's grootste probleem, zijn enkele hiervan naar de plank verwezen. Een 'kastje' installeren is 'moeilijk' en zonder alledaagse voordeel heeft het weinig haast.

Had nooit durven denken dat ik ooit blij zou zijn dat ze op die plank liggen....

Sunday, September 16, 2012

Overal onbeperkt internet, utopisch of sneller dan we denken?

Overal kunnen internetten. Snel en onbeperkt in elk bewoond deel op aarde. Zonder een rekening achteraf te krijgen. Klinkt utopisch. Maar we zouden zoiets sneller voor elkaar kunnen krijgen dan we denken.

It's all about sharing.

Delen, we doen het tegenwoordig bijna allemaal. De een iets teveel, de ander iets te weinig. Maar het delen heeft de wereld met elkaar verbonden. Van hersenspinsels via leedvermaak en vakantiefoto's naar de revoluties in het Midden Oosten.
Waarom niet een internetverbinding? Als dit op een veilige manier gebeurd is dit een prima manier om ons wereldwijd onbeperkt met elkaar te verbinden. Zonder dat een regime dit kan controleren. En zonder dat je last hebt van hoge rekeningen en/of datalimieten.

Fon is bezig met het bouwen van een wereldwijd WiFi netwerk door het veilig delen van je eigen thuisverbinding. Je koopt eenmalig een WiFi router, sluit deze aan en je hebt 2 nieuwe draadloze netwerken. 1 voor jezelf en 1 gastnetwerk. Van dit gastnetwerk kan iedereen gebruik maken die thuis hetzelfde doet. Je buren kunnen hun verbinding dus niet opzeggen. En zelf heb je toegang tot alle andere, inmiddels meer dan 7 miljoen, hotspots wereldwijd. Engeland, Belgie en deze straat in Alphen a/d Rijn hebben al behoorlijke dekking weten te bereiken, dus het is mogelijk.

Veilig, je deelt alleen je eigen internetverbinding, niet je eigen apparaten, en alleen met andere ingelogde gebruikers. Bij misbruik worden deze mensen afgesloten. Standaard deel je onbeperkte snelheid, maar mocht je er last van krijgen kan je dit eventueel beperken of helemaal uitzetten.

Een ander initiatief om overal over internet te kunnen beschikken is Open Garden. Deze app zorgt ervoor dat alle apparaten onbeperkt aan elkaar geknoopt kunnen worden zodat je altijd beschikt over de snelste weg naar het internet. Hiermee kan je dus ook het bereik van je eigen WiFi netwerk makkelijk vergroten, door middel van je eigen laptops, tablets en/of smartphones.
Omdat de app via een nagenoeg onbeperkt aantal apparaten de weg kan zoeken is het ook prima geschikt om druk bevolkte evenementen, zoals congressen, stadions, etc. te voorzien van internet.
De app werkt erg simpel, 1 keer installeren en klaar. Je hoeft verder niets te configureren. Is momenteel verkrijgbaar voor Android, Windows en Mac.

1 router bestellen/aansluiten en een paar apps installeren x (2 miljard - 7 miljoen), dus toch een utopie. Of.....

Saturday, September 8, 2012

Taxi's op de rem

Technologie is markten aan het verstoren als nooit tevoren. De muziek/film industrie behoorden tot de eerste slachtoffers. Ik zal het rijtje verder besparen, maar de taxiwereld gaat het er ook zwaar mee krijgen.

Er zijn de afgelopen maanden veel verschillende apps beschikbaar gekomen. Apps die het makkelijk maken om een taxi te vinden, maar ook om een taxi te zijn. Gewoon een paar uurtjes bijklussen met een app en een auto. Makkelijker kunnen ze het niet maken. Goedkoper ook niet.
Daarnaast zijn er tal van andere innovatieve oplossingen, je kiest zelf welke taxi, je weet continu hoe lang het nog duurt, mobiel betalen, kosten delen, auto's delen etc etc.

Veiligheid is natuurlijk een issue. We kennen de snorders. Echter dit gaat verder dan de vage 06 nummers en krakende BMW's. Via technologie is veel mogelijk, ook het opbouwen van vertrouwen via netwerken. Mensen helpen elkaar lekkere restaurants, leuke kroegen te vinden en een bed om in te slapen. Waarom geen betrouwbare chauffeur/auto? Louche types zouden geen kans meer hebben.

De tussenhandel is aan het protesteren. In New York is de Uber app verboden. In San Francisco zijn ze ook al aan het tegensputteren. Nederland kent tot nog toe geen ander beleid. Gaan we ook hier vooruitgang afremmen en huidige posities beschermen?
Ik zou juist zeggen, grijp je kans, voordat de auto helemaal geen chauffeur meer nodig heeft. En als we dit soort ontwikkelingen juist stimuleren/verder ontwikkelen verdienen we er ook nog wat aan.

Nog niet alles is in Nederland beschikbaar, maar een (zeer kleine) greep uit het assortiment:
ZabKab
Uber
TaxiMagic
GoMyWay