Här är historian om Stefan, en robot jag och barnen har jobbat på under den senaste månaden. I en sann DIY-anda vill jag skriva om vårt projekt på bloggen och förhoppningsvis inspirera andra att utforska det. I och med projektet innebär en hel del pyssel, så är det lämpat i princip för alla åldrar.
Även om allting togs fram parallellt och stegvis (“i iterationer”), kommer projektet presenteras det i förenklad ordning
Idé, hur allting uppstod
Hårdvara, material som vi använt
Pyssel, utklippning, måleri etc
Mjukvara (och elektroniken)
Lärdomar, diverse insikter vi har fått på vägen
Idé
Vi har en microbit v2 som vi har letat användning för. Microbit v2 har en mikrofon och en liten högtalare, definitivt en enorm fördel om man vill få barn med på pysslandet med elektronik. Jag hade sett någonstans på nätet om figurer man kunde göra av mjölkkartonger. “Stefan” då, varför just det namnet? Min fyraåriga dotter brukade skylla på Stefan om det var “någon” som stökade till, råkade trampa på någon annans fötter och sånt. “Det var inte jag, det var Stefan” brukade hon säga ett tag. Så vi kände att vi behövde ge Stefan en kropp, ett ansikte för att göra en rolig grej av det. Under arbetet med roboten har betydelsen av Stefan minskat dock. Roboten behöll sitt fina namn – Stefan – i alla fall.
en enklare gif
Hårdvara
Det här var vad vi använde. Det finns miljontals andra material-kombinationer som kan funka. Tipset är att se vad man har hemma.
Ingredienser
Mjölkkartong, 1,5 L
Microbit v2
1 Servo-motor (180 grader)
2 Krokodilklämmor
1 batterihållare för 2xAAA-batterier för att driva microbiten
1 batterihållare för 4xAAA-batterier för att driva servon
Diverse sladdar
Hobbyfärg
Elastisk tråd (pärlarmbandstråd)
Batterier 6xAAA (vi har laddningsbara och kan ladda dem då och då när roboten blir “trött”)
Verktyg:
Sax
Limpistol
Pensel
Microsoft MakeCode för Microbit (gratis som webbapplikation eller Windows-app). Windows-app har fördelen att man kan skriva till microbiten direkt, utan att ladda ner det först, plus att det kommer ihåg dina senaste projekt
Pyssel
Roboten Stefan skulle säga “Hej” och han måste kunna öppna munnen. Det första vi gjorde var just att klippa ut munnen. Vi klistrade fast servon (efter långa undersökningar i vilken vinkel och hur mycket den rörde sig). Vi använde limpistol för att sätta fast servon. För att munnen skulle stängas, följa med servon tillbaka, knöt vi läppen till servon med en rosa elastisk tråd (den har man för att göra pärlarmband bland annat).
Vi satte fast servon med limpistol.
Roboten Stefan skulle också kunna visa med sin “näsa”. Vi gjorde ett fyrkantigt hål för microbitens ledlampor. För knapparna och A och B gjorde vi små hål. På det sättet kunde man jacka in microbiten in i de hålen så att det höll sig fast. Knapparna blev irisar i Stefans ögon senare.
På baksidan gjorde vi ett runt hål för att Stefan kunde gå på toa 💩. (Det var inte min idé 😜).
Stefan behövde också ett större hål på baksidan för att stoppa in elektroniken.
Målningen var väldigt kul och det gjorde vi i många omgångar (ibland med en hel veckas mellanrum, så länge tålamodet räckte och när lusten att måla var på topp). Prototypen på ansiketet skissade vi först på papper.
Prototypen på Stefans ansikte
Stefan skulle ha stora tänder, röda läppar och blå ögon. 🤩
Frost-fantasten målar Stefan.
Elektroniken kopplade vi med några krokodilklämmor och sladdar. Vi försökte följa samma färgkodning. PIN 1 använde vi för att styra. GND delades av microbiten, servon och servons batteripack.
Här kan man se hur sladdarna är kopplade.
Mjukvaran
Vi använde MakeCode for micro:bit, en app från Microsoft Store.
MakeCode i Microsoft Store
Projektet döpte vi till Stefan, kort och gott.
Projektet Stefan
Vi använde blockprogrammering. Det är kul även för mig som “skriv”-programmerar på jobbet. What-You-See-Is-What-You-Get (nästan i alla fall) är såklart toppen för barn.
Blockprogrammering i MakeCode
Nackdelen med blockprogrammering är att det inte är så lätt att återanvända koden eller spara koden. Som tur är kan man bara öppna den i python eller javascript. Vi (jag) satsade på python, för att det är vackert och koncist. Den aktuella koden är sparad på github, den kan dock ändras och justeras i framtiden:
Låt oss gå igenom blocken lite grann. Programmet består av tre huvudkomponenter:
Vid start (det som händer när Stefan slås på): Den visar “STEFAN” med rullande bokstäver, spelar upp ljudet Mysterious.
För alltid (det Stefan gör under sin vakna tid, huvudprogrammet): den spelar upp 6 gånger “Hello” och öppnar munnen samtidigt, lika många gånger. Om ljudet runtomkring tyst/lågt, tystnar även Stefan. Om Stefan hör högre ljud (någon kommer in i rummet och pratar eller någon ropar “hej”), börjar Stefan säga “Hej” från början igen, och öppna munnen, och detta 6 gånger igen. Så fortsätter det tills man stänger av Stefan.
Vid knapptryck (möjligheten att styra Stefan med knappar, ifall inget annat funkar): när man trycker på A-knappen, börjar Stefan hälsa och prata, när man trycker på B-knappen, slutar Stefan.
Stefan vaknar – “vid start”Huvudmomentet – “för alltid”
Så knapparna användes mest för felsökning och återställning i början. Även om de inte används idag, har vi behållit funktionen för säkerhets skull.
Knapparna A och B sätter och stänger av Stefan.
Lärdomar
Den sista bilden med knapptrycken får vara den första lärdomen. Vi hade flera variabler: paus, running, cycles. Så småningom hade vi endast “cycles” – cykler för hälsningar. En cykel är en munöppning och Hello-fras. Den börjar på 1 och slutar efter 6 gånger. Upptäcker en högre ljudnivå, börjar den från början. Vi skulle kunna ha nedräkning istället, men det blev uppräkning istället.
Hakan vikte vi först, men det var trögt, så vi skära långa sträck i vecket för att göra munöppningen lite smidigare.
Servon drevs först av microbit, det var oväsen även när munnen var stängd, servon “darrade” och väsnades. Vi kopplade in ett extra batteripack endast för servon, då blev det tyst. GND delas av microbiten och servons batteripack.
Vi fick experimentera ganska mycket med servons grader, och hittade bra vinklar till slut. Lite mer än 90 grader: 180 och 60. Detta beror främst på själva servons placering och elastiska tråden, man fick ta i lite mer för att den skulle spänna tråden och stänga munnen.
Tidigt i projektet hade vi en powerbank som drev det hela. Tyvärr stängde den av sig vid inaktivitet. En bra funktion för mobilladdning, men dåligt för Stefan.
Powerbanken fick plats men klarade inte uppgiften.
Mjölkkartongen kändes lite skum när man målade på den med hobbyfärg, som om den inte riktigt ville fastna i. Men vi tänkte att Stefan inte skulle trivas i att vara perfektionist, så det syns igenom att det inte är mjölk, utan en laktosfri mjölkdryck på vissa ställen.
“Vid högt ljud” fungerar inte. Det upptäcktes inte eller var det i osynk, så vi fick skriva om det till att mäta ljudnivån i varje körning i huvudmomentet, alltså i “för alltid”.
Det finns “döda vinklar” i systemet. Ljudnivån mäts, och sedan är det vissa pauser då ljudnivån inte mäts. Det har hänt att högt ljud har passerat förbi. Det vore bättre med ett event – “vid högt ljud”, men det fungerade tyvärr inte. Även med “döda vinklar” (sekunder) är det förvånansvärt pålitligt. Helt enkelt att vi tilltalar Stefan med högre röst, och inte använder Stefan som en supermaskin kapabel att upptäcka varenda ljudnivåhöjning. Vår tolerans för Stefans tillkortakommanden är helt enkelt mycket högre.
In case you published a news in SharePoint Online and you now want to “downgrade” it to a regular page, I have a solution for you.
The reasons why you would like to demote a News might vary:
You publish an important message, perhaps a note about an operational disturbance. It might not relevant anymore, but you still want to keep the page in case someone wants to access the information.
You accidentally create a page as a news.
…
An example of a news of a temporary character
The News “Promotion” is controlled through the field called “Promoted State”. You cannot edit, but you can include it in a view to check the current state of it.
“0” means a regular site page
“2” means News
Show the “Promoted State” and ID to check the current status and identify pages and news
So in order to convert a news to a regular page, you need to update the list item’s field “Promoted State” from 2 to 0.
Unfortunately, the Promoted State field is read only. Hence we need to make it editable first, edit it, and in the end, reset the field.
Det här är en enkel guide på svenska om hur du kan ladda in data från två eller fler listor i SharePoint och lägga ihop dem till en.
Scenariot är följande. Du har två eller fler sajter i SharePoint Online som har var sin lista (med samma kolumner). Du vill ladda in data från båda och se en aggregerad/summerad version. Alternativet är att ha en delad lista, men ibland (av behörighetskäl eller av behovet för smärre anpassningar av enskilda listor), ligger det i separata listor/sajter.
För enkelhetens skull, har jag följande demouppsättning:
Två enkla listor i samma sajt:
ShapesA
ShapesB
Listorna innehåller två exakt likadana kolumner
Shape
Color
Första listanAndra listan
Målet är att addera raderna ifrån två listorna till en större lista.
Power BI
Att läsa in SharePoint-listor in i Power BI är ganska enkelt. Starta Power BI Desktop på din Windows-dator.
Man börjar med Get Data…Filtrera på SharePoint och välj SharePoint Online ListKlistra in länken till din sajtVälj listornaViktigt! Tryck på “Transform Data” förstRadera alla kolumner du inte behöver. Gör det på båda listorna.
Nästa steg är det vikigaste i den här guiden: Kombinera de här två listorna: Append Queries
Append QueriesVälj “Append Queries as New”Välj lista 1 och lista 2 och klicka på OKNär den är färdig, klicka på Close & Apply
Den kombinerade datan ligger i “Append1”
Append1
Resten är “bara” visualisering. “Bara”, eftersom det hårdaste jobbet (Tranformation, kombinering) är redan bakom oss. Testa olika alternativ.
Visualisering
Ett exempel är Treemap:
TreemapFör att få till Treemap i det här exemplet behövde jag ha Title (=Shape) både i Group och Values
Summering och reflektion
Den här guiden visar hur man kombinerar (lägger på) två listor och jobbar med dem som om de vore en lista. Hör av dig om det har varit till hjälp eller om du har frågor eller funderingar.
Själva behovet är verkligt. I SharePoint har det alltid varit en utmaning att samla ihop datan från olika sajter och listor. Vi har använt oss av söken (med Sökcenter och DisplayTemplates) och andra tekniker. Visst vore det enklare att ha det samlat i en central databas eller en lista. Det är dock en viss frihet att låta olika organisatoriska enheter “äga” sina delar (användare kan justera sina vyer, ordna formatering, lägga till extrakolumner och annat trevligt). Aggregeringsbehovet kan nu, med Power BI, lösas på ett relativt smidigt och användarvänligt sätt.
Today I needed to add a security group to “People who can associate sites with this hub” through PowerShell. Here is quick how-to. I usually say “hubbers” instead of the long “People who….”. By the way, if you want to know what prerequisites there are for being a hubber, read my other blog post
While reading the Teams News recap from December 2020, I found one thing that caught my attention particularly: Custom Praise Badges in Teams. Let’s try this. But first, those badges are the default ones:
They are good starting point. But to take it a step further, to really engage people and praise, you need some specific badges that mean something for your company.
To add a new badge all you have to do is to go to Teams Admin (obviously it requires you having the Teams Administrator Role):
Click on Teams Apps –> Manage Apps
Search for “Praise” and open it
Click on Settings and scroll down to Custom Badges
Click on “Create a custom badge”
Give it a name, upload a picture, define the text color and the background color.
That’s how you add a new custom badge as a Teams Administrator.
That’s it! When I added my little construction worker badge, it took seconds (but be patient if takes more time).
You can select the new badge when you are about to praise someone.
Custom badges might be this little “extra” that make difference for better adoption and better collaboration in your team and your organization.
Here I praise my colleague Adele Vance. Well you know Adele Vance, she works in every demo Office 365 environment 😜
Of course, for those who has not tried the Praise feature in Teams yet, I highly recommend it. Next time you want to say “Thanks” to someone or show your appreciation, just hit this tiny badge button within the “New Conversation” in Teams.
These are two workarounds to see documents / list items in a view that exceeds the listview threshold of 5000 items.
Overcoming the listview threshold is as fun as succeeding in the limbo games.
This is changing all the time. When you read this, it might have changed. Today, 2021-01-05, me and my colleague found following two workarounds for listing over 5000 items in a list view in SharePoint Online:
Sorting by name in a view
Adding a shortcut to OneDrive
Both methods require the Modern UI in SharePoint Online.
In our case we have a migrated document library with many items. In the source, the threshold was much higher, in SharePoint Online some folders didn’t show anything. It showed only “Something went wrong”:
The classic view had a better error message, but no solution for that:
This view cannot be displayed because it exceeds the list view threshold (5000 items) enforced by the administrator. To view items, try selecting another view or creating a new view. If you do not have sufficient permissions to create views for this list, ask your administrator to modify the view so that it conforms to the list view threshold.
Sorting by Name
We will split those big folders into smaller ones. But while trying things out, we found that having Sorting by name, suddenly showed the documents in the big folders.
As a user you have to scroll a lot to find your document (because of the infinite scroll), but still, now you are able to see your documents!
Also, you can start selecting files and re-organizing them by using “MoveTo”.
Adding shortcut to OneDrive
Another workaround (or I’d rather say trick) is to open the folder from within your personal OneDrive by adding a shortcut:
With that you’ll get the folder linked in your OneDrive.
Even with a big number of files, OneDrive will list the folder. Why is that? Maybe, Microsoft treats personal OneDrives differently, more gently, in a more forgiving way.
On your computer you’ll see the linked OneDrive folder, too.
Incoming webhooks in Teams are great, indeed. Last week I saw this tweet, which inspired me to share one of our webhooks.
There are many scenarios where it can be used, I would also like to share one of our scenarios: notifying our DevOps team about performance issues in SharePoint Online, detected through Exoprise.
This adaptive card (in Swedish) shows an alarm from Exoprise about login problems.
It’s simple and scalable:
On the Exoprise end you can define any combination of larms and connect it to a Teams Incoming Webhook.
On the Teams end, you can invite all the people who need to be notified, and you can also set up push notifications if you have Teams installed on your mobile.
This is just a little “demo”. We use Exoprise Larms, Teams and Adaptive Cards. I can share more technical details if you are interested, but in that case, leave a comment below.
This post is about my setup of the popular MagicMirror2 application. I show the steps needed to set it up on a Raspberry Pi Zero W and connect it to a TV set. As a bonus, I share my thoughts on the Chuvash localization work.
MagicMirror2 is a DIY project and an open-source application, voted to number one of the best Raspberry Pi Projects. In essence, it shows information of your choice (weather, calendar, news) on a screen that is embedded in a mirror.
I was introduced to MagicMirror2 by my colleague, who uses it in another way: rather than having it in a mirror, he has it on his smart tv. The customisability is the beauty of the whole DIY and the Raspberry Pi.
Installation
I also decided to use it on my tv, through the built-in web browser. My raspberry pi zero w required some special steps due to its processor architecture. Fortunately, I found a guide for MagicMirror2 and Raspberry Pi Zero W which I used as a starting point.
After trying it, I found that I needed those steps for my server-only magic:
Creating a bookmark on the TV browser.My tv screen with MagicMirror2 localized into Chuvash
Chuvash
Every time I work with software I try to think: can I help to translate/localize it to Chuvash. Chuvash is a “little” language, it is only spoken by 1.5 million people. Almost in all cases, it is hard to even to register the Chuvash as such (like in Windows, or macOS), and it is even harder to localize applications, because they tend to have thousands or sometimes millions of strings to translate (and maintain!).
With MagicMirror I experienced how work from the past can help today, how small pieces can become connected parts of a bigger picture.
MagicMirror uses momentjs, a javascript library for datetime. In matter of fact, that’s exactly something that I already have worked on:
That was nice! I changed language to “cv” in the config/config.js and the most of the interface turned into Chuvash. (cv – is the iso code for Chuvash language). What a feeling of joy!
Why that excitement? Well, almost everything in the Chuvash IT (UX, localization, keyboard layouts, speech recognition, machine translation etc) is driven and sponsored by volunteers and a community. That’s why it is a special joy to see pieces come together, even though it is a small DIY project.
The MagicMirror2 itself does a minimal set of strings to translate. I translated it and submitted a Pull Request, which has been already merged to the develop branch.
We have had troubles updating site icons in SharePoint Online. It might be related to one of the following:
It occures only on hub sites
The sites have a custom theme
The error message:
We experienced a problem updating the icon. Please try again in a few minutes.
But what I found is that there are two places where you change the site icon. If the first does not work, try the second one, that was what worked for us:
Cog wheel -> Site Information -> Site logo
Cog wheel -> Change the look -> Header -> Site Logo
Changing the logo through “Site Information”Changing the site logo through “Change the look”
There are others who have encountered the problem. I hope the workaround I happened to find here can help.
It seems that Work from Home (WFH) is here to stay, it’s okay. I’d say, Work from a Smart Home is even more okay. To me, Home Automation (HA) and Work from Home (WFH) are really two peas in a pod.
Today’s “guest” is a tiny application that I’ve set up on my raspberry pi to listen to my presence (status) in Teams and show it with colors of my smart RGB light (IKEA Trådfri).
Wow! I thought immediately: that would be a cool challenge, I wanted to set up this, too. Although, with some adjustments for my smart home:
I wanted to run the whole application on one raspberry pi only, because I don’t have the second one, neither I have HomeBridge installation (maybe something for future projects, though).
I wanted to have as little code as possible, maintenance should be kept to minimal.
I wanted to use python in order to learn more python and because python seems to be the most supported language on the pi.
I wanted to use IKEA Trådfri lights (with a gateway and a remote) that I already have invested into.
I omit the configuration steps for Trådfri lights and Raspberry Pi, you can see them in my previous blog post:
Elio wrote his blog post in April this year – in the times of the lockdown in Belgium. In Sweden, we hadn’t a real lockdown, but it seems that it might come times when my children would need to be at home more while I work. In that case a superclear system that shows when I have important meetings is just awesome. Maybe, with that I am prepared for such times.
But to be really honest, the main driving factor is the fact that it is very satisfying to tinker around with this DIY stuff 😜😎
Lessons learned
There is a python wrapper for MSGraph which is awesome, but it needs more contributors:
In your Azure AD App Registration you can specify auth flow type as public, with that you don’t need to store a client secret for delegated access. That was a kind of a new thing to me.
Presence endpoint in MSGraph is in beta, make sure you call the beta endpoint. The scope is ‘https://graph.microsoft.com/Presence.Read’ and you need an admin consent for that permission grant.
Recent Comments