Switzerland: Warning about “werbesperre.ch” and Geminis Marketing AG / How to stop cold sales calls

If anyone of you (or more likely your parents) runs into a Problem with werbesperre.ch / Geminis Marketing GmbH read this thread:
So my mother recently received a phone call from them promising her to stop all unwanted advertisement / selling phone calls for as simply as 85.- per year!
She said “Yes of course I want that!”…

This is a huge scam. See this article in German on srf.ch.
The verbal contract is not legal.
You can send them a letter here (attention – instant download) where you just have to fill in your address and sign.

Whatever you do – don’t call them. It’s not worth your time. The people are unfriendly and unhelpful and will just make you angry.

Why isnt’ the contract legal?
The person on the phone won’t be telling you that you can do all they do for free. And they won’t tell you the effective cost that will result in saying yes to their services.
All this is against Art. 24 ff. OR (the obligatory right).

If they bother you or someone you know fill in the SECO complaint form: here

You can fight this contract and no one has to pay!

How to do their services yourself in 5 Minutes for free
1. Update your contact data in the Swisscom Directories (local.ch) https://customercenter.local.ch/update (you can add the “Star Entry” = No Ads later in the update process.
2. Put your Phone Number into the “Robinson-List”. A List most Callcenters relay on for not calling those numbers. Of course, this doesn’t count for foreigin call centers but it’s a good start. http://sdv-konsumenteninfo.ch/selbstregulierung/robinsonlisten/

After 14 Days both entries are online. If you will then receive any advertisement / cold sales call, report the company here: SECO Form

If we all do this we can slowly, step-by-step, eliminate most cold sales calls.

How to sensitize people?
What I’ve found works best is to ask “How do you think they got your number?”. Soon they realize sales people just gather all numbers from some unknown point – or just generate them. They will realize that this can’t be serious business.

Apache Maven Installation on Windows with Eclipse

a little handy guide on how to install Maven with Eclipse on Windows for those who are a bit lost.

This Guide will tell you How to Install Maven, How to get it into Eclipse and how to import a Maven Project.

Preparation

1. Download Maven from Apache’s homepage: https://maven.apache.org/download.cgi
Take the Binary ZIP Archive download!

2. Extract the folder to whatever location you want.
I suggest you take c:\Program Files where all other programs are stored.
Navigate to the folder until you see “Bin”, “Boot”, “lib” and the “conf” folder – Copy the folder path into your Clipboard (CTRL+C).

3. Set up the environment variables
Right Click on your Windows Logo (windows 10) -> System -> “Advanced System Settings” on the left -> “Environment Variables” on the bottom.

Under System Variables say “New…”:
Variable Name: M2_HOME
Variable Value: CTRL+V the Path from Step 2
Click OK.

Again, say “New…”:
Variable Name: MAVEN_HOME
Variable Value: CTRL+V the Path from Step 2

Eclipse

Now we have to verify that the Maven Plugin is in Eclipse.

1. Open Eclipse and go to “Help” -> “Installation Details”

Maven is installed within Eclipse

If you see those two m2e plugins, you can skip to “Import Maven Project”. If you don’t see them follow the next steps on how to install the Maven Plugin.

2. Close the “Installed Software” and Click again on “Help” then “Install new Software…”

3. Click on “Add” and add the following Repository:

Name: m2e
Location: http://download.eclipse.org/technology/m2e/releases

4. Now choose that Repo in “Work with” and tick the checkbox that shows up.

5. Click Next until you reach the License Agreements – Accept those and click further next until Eclipse starts the installation. Restart Eclipse on prompt.

Import a Maven Project

  1. Go to “File” -> “Import…”

2. Expand the folder “Maven” and choose “Existing Maven Project”

3. Choose the Directory you have saved your Project (Git or similar)

4. Hit “Next” until Eclipse starts working on importing the Project. All dependencies that are needed are installed with this process.

 

 

Powershell: Send a message to all user within a Citrix Delivery Group

Usage:
send-ctxmessage -DesktopGroupName DG1 -Time "20 Minutes"

You can add different parameters and put them into your message text!
So by adding a $Application parameter you will be able to do the following:
sent-ctxmessage -desktopgroupname DG1 -Time "20 Minutes" -Application "AppXY"
Modify your message:
Send-BrokerSessionMessage -AdminAddress $AdminAddress -InputObject $session -MessageStyle Information -Title "Update of $Application" -Text "In $Time there will be an Update for $Application."

What the User will receive:
Update of AppXY
In 20 Minutes there will be an Update for AppXY

function send-CTXmessage{
    param( 
            [string]$DesktopGroupName,
            [string]$Time,
            $adminAddress = "Insert Name of Controller here!"
         )
    $ErrorActionPreference = "Stop"
    try
    {
 
        Add-PSSnapin Citrix* -ErrorAction Stop
        $arrSrv = get-brokerMachine -adminAddress "$AdminAddress" | where-object {$_.DesktopGroupName -eq "$DesktopGroupName"} | select-object MachineName
        
        
        
            
         foreach ($srv in $arrSrv) {
                
                 $arrSessions = @()
                 $arrSessions = Get-BrokerSession -AdminAddress $AdminAddress -MachineName $srv.machineName | Sort-Object

                 foreach ($session in $arrSessions){
                     
                     Send-BrokerSessionMessage -AdminAddress $AdminAddress -InputObject $session -MessageStyle Information -Title "Insert Message Title here" -Text "In $Time there will be some Update, please log off"                        
                     write-host "User "$session.UserFullName" Message send" -foregroundColor Green
                 }
         }
        
    }
    catch
    {
        write-host "Caught an exception:" -ForegroundColor Red
        write-host "Exception Type: $($_.Exception.GetType().FullName)" -ForegroundColor Red
        write-host "Exception Message: $($_.Exception.Message)" -ForegroundColor Red
    }
    finally
    {
        write-host "--End Script--"
    }
 }


Worst Kickstarter Projects #2: The flying Car attachement

Let’s be honest: you don’t have to look to long for horrendous Kickstarter Projects.
How many people think Kickstarter is where you get money from random people for showing nothing at all?

Yeah I need a bazillion dollars for this Idea. I need to hire NASA scientists to accomplish it. $1000 and I’ll send you a thank you letter

Guys, Kickstarter is for people with real ideas and real products that may hit the market. Show us what you can and not what you thought off while being in the shower.

Anyway, this caught my attention today:

The flying Car attachment

So important it has its own abbreviation! the F C A.

Overview

Ah yes. Who doesn’t love Kickstarter Projects with real and good looking project pictures? You do? Wow then you need to look at this:
KFCA1
Doesn’t that look great. I didn’t knew you can do such fine lines in MS Paint!

The idea is quite nice. The project leader wants to create an attachment for your car so it will be able to fly! well that sounds great. We haven’t yet made skateboards fly but a car should work!
The reason behind this is that after the project has finished (1-2 Years as he stated) you won’t have to buy a new Tesla HoverX no! You can just convert your old Chevy into a Hovercar!
While this may sound nice to a twelve-year-old, you should consider that it probably is a really thigh schedule! I rather trust Elon Musk to come up first with this stuff.

Sounds like he got the blueprints in his pocket and just needs money to fly off right? False!
What he needs is money and a team of Engineers and Scientists!

Risk and Challenges

Well as stated above, the team is not yet complete. Needs some Einsteins for the monkey work.

Also the Project Leader states that the Roads may not be ready for flying cars. But in those 1-2 years project time he will change this with some sort of organizations. Nice right? Finally someone who changes something in the world.

Rewards

$25 – You’ll get updates! On the project that will change how public infrastructure works today! What a steal. (1 Backer)
$50 – You’ll get Pictures! I don’t know if you’ll get updates as well but man some nice Pictures! (0 Backers)
$100 – A thank you letter. Aw that’s nice! And is this real – a 5GB USB Stick with Pictures. Where the heck does he get a 5GB USB Stick? Man he must be magic. (0 Backers)
$250 – A Thank you letter. A magic 5GB USB Stick. Updates on the Project – so yes they were not included in $50 and $100. And you will be the first one to BUY this magical piece of FCA! With Signatures! (1 Backer, we know you are the creator)

Each Reward is limited except for the $25. How much does he want?

Well only One Million Dollars.

… wait a minute
1500 x $ 50 = $ 75’000
2000 x $100 = $200’000
2000 x $250 = $500’000

This adds up to $775’000. He would hit a bit more than three-quarters of the million if all limited Rewards were gone. d’uh. (5500 Backers)
That would mean he’d need an additional 9000 Backers to just gift him $25 for a bit of updates. That’s great math dude, how did you want to design that thing again?

Summary

I don’t even know what to say. Do people open these kickstarters up to see how many dumb people there are? Or did little 12 Year old Johnny get permissions to use the Family Computer all alone?

This can’t be real.

Tales from the IT World – Our Future

So I had a class of about 15 apprentices in IT. It was their first year so most of them were still very lucky to be here and lucky to learn new stuff.
And then there was Tim (name changed).

Tim is 15.
Tim didn’t want to be there. He didn’t want to learn. He had zero interest in IT apart from Let’s Play Youtube Channels and Twitter.

The students had two stations to work from. One to document and research and a lab where they had to patch themselves and install their workstations.
The documentation stations are controlled with a classroom software from which I can turn off the internet on the machines and look at the display from the teacher console.

So after a couple of days of Tim not doing anything at all he was likely to fail if he didn’t start now. I’ve told him several times but he’d done nothing.
So I thought of something different:

STEP 1:
His Twitter feed was quite funny on the projector on front. His Facebook as well. The whole class thought it was funny but Tim didn’t realize he was being published up front. So I closed because I felt a bit ruthless. (How can he not notice?? – Oh well yes he never ever looked up from his monitor the whole course).
STEP 2:
I shut down the internet on his documentation machine.
Tim started to get angry and asked everyone else (they were all in the lab) if they had internet. He got so angry nobody helped him. He sat at another machine that was unlocked and continued surfing.
I shut down his internet there. He went red and angry.
STEP 3:
Tim went to the lab. Angry that the internet was out and happy that the internet still worked there.
I let him surf for a while (just so he doesn’t start throwing tables around) and went to the lab.
I looked at him cheerfully while saying “Tim what does happen if I unplug this patch cable?”. He said “I don’t know.”
I unplugged it.
Tim lost access to the network on his lab machine.

Tim continues to get angry and check his machine if anything is wrong.
… He doesn’t get it that I just have unplugged his cable.

They’re all here voluntary and I’m sure there are so many young adults that would like to be there instead of Tim. This is our future. There are more and more students like Tim.

Powershell: Stress your CPU with some Prime Numbers

#get number of cores
$cpu = Get-WmiObject win32_processor | Select-Object Numberoflogicalprocessors
$cores = [convert]::ToInt32($cpu.Numberoflogicalprocessors, 10)

#define functions
function get-prime($i){
        
     for ($a=3; $a -lt $i; $a++){
        if ($i % $a -eq 0){
            return "no"
        }
        else{}
     }
}
    
#create a task for each core
foreach ($core in 1..$cores){
    start-job -ScriptBlock {
        
        for ($i=1000000; $i -le 10000000; $i++){
            $prime = get-prime($i)
            if ($prime -ne "no"){
                write-output "$i"
                }
            else {}
        }
    }

}

Wait-job *
clear
Receive-Job *
remove-job         

Worst Kickstarter Projects #1: The Breakup Website

Did you ever ask yourself why you should invest time to tell someone you don’t love them anymore?
Do you think all problems can be solved with non-communicating?
Are you an asshole?

Then this Kickstarter Project is made for you!

 

Breakup without ever looking at your significant other

… over a website
… they’ll receive an email..

That’s what you get if you fund this Kickstarter project! A website for assholes!
I’m not kidding. This is what the project is. You enter your soon to be ex’s E-Mail. Get all your hatred out and write up a nice summary on why you break up with them. Your now ex will receive the E-Mail and can cry all night long.

Backing Options

$5 – You’ve done good
$10 – The creators of the site will send you a hateful message.
$25 – You’ll receive a copy of an e-Book “The art of Pain”. That way you can be the asshole you’ve always wanted to be!
(this is where it gets weird)
$50 – PAY THEM to DO THEIR WORK. Really that’s a fucking great deal. For $50 (you pay them) you can send them a logo you have designed yourself, with your time. It may be chosen. But probably not. Waste the best $50 of your life! /s
$100 – DOUBLE your time and enter TWO logos! If you don’t win you will at least get a fucking $100 ebook.
$250 – The E-Book and for $250 THEY WILL LISTEN TO YOUR IDEAS. Fucking awesome isn’t it??? But only for 3 Months. This must be a new business model!
$500 – E-Book and 6 Months “Access” for saying your opinion. You’re rich and nobody want’s to listen to you? This is YOUR option.

Here comes the clue. At $500 you can use the website forever at no charge! There’s a fee you ask? Seemingly so!

Risk and Challenges

It starts off with “We’re a team of professionals”. Professionals in what? No screenshots on the site. The Picture is really bad. A “professional” could have build the site in max. 2 hours. Why would they need the money? ($9000 by the way).

Summary

If this isn’t a money laundering operation I’m speechless.

This is a site you will be paying money for to break up.
A simple site you can build yourself with like 5 hours of training in codecademy.com (if you’re an absolute rookie).
And they want money for it.

It’s clearly just about that ebook. This is the worst marketing idea for a book.

Powershell: Get Weather Function (Working with XML and API’s)

Some more fun with Invoke-Webrequest’s and API’s.
OpenWeatherMap (http://openweathermap.org) offers a free service for their API key.
They offer many different ways on how to access their weather.

Like last time, I chose XML.
The API Request looks like this:

Invoke-WebRequest "api.openweathermap.org/data/2.5/weather?q=$City,$country&APPID=$api&mode=xml"

you add a q= Query with the City Name and for accuracy the Country. Then you give it an APPID. This is your own personal API Key that I won’t publish. You can get yours for free on the openweathermap site. Then you specify the mode, the way the request returns it’s values.

If I run the request you get the following in return:
xmlapiweather1

these are really mostly stuff we won’t need. What I am interested in is the content.
To get the content of the XML, we need to tell Powershell that the return values are in fact in XML format. Like this:

$City = "Lucerne"
$country = "CH"
[ xml ]$wr = Invoke-WebRequest "api.openweathermap.org/data/2.5/weather?q=$City,$country&APPID=$api&mode=xml"

Remove the spaces in xml in front of $wr – my script displaying engine does not like the term like that 🙂

Now, to be able to search through the XML, we need to see which member contains all the Information.
That’s easy to find out since the only member with the Type “Property” is the one we are looking for. (Or the ones, if you query several days / cities)
xmlapiweather2

Well – if we put in $wr.current we’ll see that this is exactly what we want.
city : city
temperature : temperature
humidity : humidity
pressure : pressure
wind : wind
clouds : clouds
visibility :
precipitation : precipitation
weather : weather
lastupdate : lastupdate

These are all the properties we can use for our weather.
If you want to see what’s inside of Temperature you can do the following:

$wr.current.temperature

It will return something like this:
xmpapiweather3
to just get one of these you can do this:

$wr.current.temperature.value

(or min, max and unit for that example)

Now we have a query that returns us one single response. That’s great we can work with that.

Since it’s a bit redundant to always have to enter $wr.current we give it another $Variable

 $data = $wr.current 

Now we need to build our response.
I want it like that:
City:
Weather:
Temp. NOW:
Temp. MAX:
Temp. MIN:
Humidity:
Clouds:
Rain:
Wind:
Pressure:

To achieve this I first browse through all the properties and write down the values I want.
Then I simply build a write-host construct.

    write-host "City:          " $data.city.name $data.city.country
    write-host "Weather:       " $data.weather.value
    write-host "Temp. NOW:     " ([math]::Round(($data.temperature.value - 273.15),2))"°C"
    write-host "Temp. MAX:     " ([math]::Round(($data.temperature.max - 273.15),2))"°C"
    write-host "Temp. MIN:     " ([math]::Round(($data.temperature.min - 273.15),2))"°C"
    write-host "Humidity:      " $data.humidity.value $data.humidity.unit
    write-host "Clouds:        " $data.clouds.name
    write-host "Rain:          " $data.precipitation.mode
    write-host "Wind:          " $data.wind.Value
    write-host "Pressure:      " $data.pressure.value

Remember when we were displaying the temperature values? They were in Kelvin. To get Celsius simply subtract 273.15 (like we learned in school a long time ago :))
But the values are really exact. – I’ve rounded them with the C# lib “math” to two digits after the comma.

Next step is to make a function out of it. This needs parameters. I added default values for my most searched city:

function get-weather {
    param(
        [string]$City = "Lucerne",
        [string]$country = "CH"
    )
...
}

you can get the weather with
get-weather Washington US
If you don’t specify the country it will always be the one you entered as $country in your params.

Now the whole script:

function get-weather {
    param(
        [string]$City = "Lucerne",
        [string]$country = "CH"
    )

    $api = "get your API at openweathermap.org"
    
    [ xml ]$wr = Invoke-WebRequest "api.openweathermap.org/data/2.5/weather?q=$City,$country&APPID=$api&mode=xml"
    $data = $wr.current
    
    
    write-host "City:          " $data.city.name $data.city.country
    write-host "Weather:       " $data.weather.value
    write-host "Temp. NOW:     " ([math]::Round(($data.temperature.value - 273.15),2))"°C"
    write-host "Temp. MAX:     " ([math]::Round(($data.temperature.max - 273.15),2))"°C"
    write-host "Temp. MIN:     " ([math]::Round(($data.temperature.min - 273.15),2))"°C"
    write-host "Humidity:      " $data.humidity.value $data.humidity.unit
    write-host "Clouds:        " $data.clouds.name
    write-host "Rain:          " $data.precipitation.mode
    write-host "Wind:          " $data.wind.Value
    write-host "Pressure:      " $data.pressure.value
}

Remove the spaces in xml in front of $wr – my script displaying engine does not like the term like that 🙂

Snoverisms: POSH – Like programming with hand grenades Sticker

I stumbled upon a post in /r/powershell which linked to this site: http://snoverisms.com/
I liked the first quote so much that I made a sticker with a Silhouette printer!
Here’s the PNG (In Silhouette you have to insert PNG’s and later convert them to svg like files … whatever): powershell

The stickers look like this
here’s the positive:
positive

and here’s the negative (already on my notebook sorry!):
negative

Quick Spellcheck with PowerShell

I’m a person that always needs to google words just to see if they even exist. I made a quick Powershell for that just to check whether or not the word even exists (by using the Wikipedia API – Which normalizes most inputs by itself)

The wikipedia API query will look like this:

https://$lang.wikipedia.org/w/api.php?action=query&titles=$word&format=xml

It’s really easy – at the beginning of the link you set the language your word will be. I’ll set that with the var $lang.
After the domain you’ll tell it to use the public API (Documentation here. )
I want to do a query (action=query) on all sites that have a title containing my $word variable. (titles=$word) and I want it in XML because it’s quite easy to handle in Powershell (format=xml).

Now I’ll need some input for my variables:

function check-word {

    Param(
      [string]$word,
      [string]$lang
    )
...
}

That way the quick spellchecker can now be used like that: check-word wordpress de. This tells the API to look for German pages containing the word “wordpress”.

Next thing is to get the Data from the API:

$url = "https://$lang.wikipedia.org/w/api.php?action=query&titles=$word&format=xml"
$webq = Invoke-WebRequest $url

You could do this in one line but for troubleshooting and understanding it’s better to keep it separated.

$webq will look like this:
webq-output1

In content you’ll see it normalized the query.

If I mistype the query it will look like this:
webq-output2

As you see here Content contains the word missing. That’s the API’s way of telling you that it doesn’t exist.
Now we can work with that.
Next step is to check for that word missing:

$webqc = $webq | select-object content
$exists = $webqc -match "missing"

No here comes the tricky thing: $exits will either contain $true or $false. But it will contain $true if the word DOES NOT exist. And it will contain $false if the word exists.

It’s so important because we want to see a little output and have to think reversed:

if ($exists) {Write-Output "Not Correct"} else {"Correct"}

So after all this there’s not much left to do, here’s the full script:

function check-word {
    Param(
      [string]$word,
      [string]$lang
    )
    
    $url = "https://$lang.wikipedia.org/w/api.php?action=query&titles=$word&format=xml"
    $webq = Invoke-WebRequest $url
    $webqc = $webq | select-object content
    # Variable will contain $true if word does not exist - $false if word exists
    $exists = $webqc -match "missing"
    
    if ($exists) {Write-Output "Not Correct"} else {"Correct"}
}

Put it in your $profile and you’ll always have quick quick spellcheck handy if you just need to see if you wrote that word correctly.
If you want to use it in a work environment make sure to check out how to authenticate your shell against a proxy here: Automatic Proxy Authentication from $Profile

If you got any questions or tips and tricks on how to make this script better, leave a comment!