Lara Nyman

My experiences of technology

EY : Issues On My Mind – Dame Stephanie (Steve) Shirley CH

4th October

I was fortunate to be invited to an event hosted by EY ‘Issues On My Mind’ with Dame Stephanie (Steve) Shirley CH. I found the event incredibly inspirational of how much she has accomplished from setting up her own software company called Freelance Programmers right through to her philanthropic efforts to help others.

There are two key aspects of her life which particularly stood out for me; as a woman in technology, I was drawn to Dame Shirley’s experiences of being a pioneering technologist in the 1950s. How much has the experience for a woman changed over the years to the present day? This is a very pertinent topic in the news – not only for women in IT but extending to women in STEM subjects. The other aspect of Dame Shirley’s life was her philanthropic endeavours particularly in The Shirley Foundation, which is an umbrella for three different charities:

  1. Autism at Kingwood (support)
  2. Prior’s Court Foundation (education)
  3. Autistica (research)
Dame Stephanie (Steve) Shirley CH Presenting

Dame Stephanie (Steve) Shirley CH Presenting

If I was to delve a little deeper into Dame Shirley’s experience of a woman in technology in the 1950s, I am pleased to say that it is different to the present day.  Whilst there are still outstanding discussions around diversity within the workplace, fortunately women have not felt the need to write letters to clients under a male pseudonym; this is how Steve Shirley was born.  Steve received a much better reply rate on the letters than Stephanie acheived.  He was part of Dame Shirley’s company, Freelance Programmers, that she set up in 1962.  This company was profound during this period as out of the first 300 employers, only 3 employees were men!  The aim was to give flexible working to women, especially those with children, by providing the ability to work from home.  Dame Shirley included humour in her presentation by mentioning that her actions soon became against the law and was told that she had to employ more men.  The problem she soon quickly discovered was that men were applying to work in the company for the wrong reasons!

I found it particularly interesting that she called herself an ‘honorary male’. Having done a quick survey at the event, most women describe themselves as being the ‘token female’ on an male dominated team.  Perhaps this is the way women are made to feel so companies can ‘acheive’ equal diversity on teams?

Since Dame Shirley’s ‘retirement’ in 1993, she has focused her efforts on Philanthropy which is another passion of mine.  I don’t believe in altruism, as for me, the definition of altruism is a ‘selfless act’.  I strongly do not believe that it is possible to perform a completely selfless act as one always gets a sense of satisfaction when helping others.  However, this should not detract from the incredible and impressive time and effort (not to mention the staggering £67 million of personal wealth!) that Dame Shirley has dedicated to helping others.    I am in awe and I would love to be in a position to make such an impact.

I am very much looking forward to reading my signed copy of ‘Let It Go’ for a deeper insight into the extraordinary story of the life of Dame Stephanie (Steve) Shirley CH.

LetItGo

Autographed Book – Ready To Read!

IntelliJ : Live Templates

One of the most underutilised tools by a developer is their Intergrated Development Environment (IDE).  The two main common IDE’s in use for professional Java development are Eclipse and IntelliJ; the latter being my preferred choice.  There are many different features and functionalities that an IDE provides to help the developer produce higher quality code in an efficient manner. In my opinion, one of the features not used enough is Live Templating (IntelliJ) or Templates (Eclipse).  I thought I would write a short blog to document and highlight a few templates I have set up in my IntelliJ that are invaluable to my development experience.

With the release of IntelliJ 2018.2, JetBrains have improved their documentation around Live Templates and how to create them.  There are three types of live templates:

  1. Simple Templates
  2. Parameterised Templates
  3. Surround Templates

I shall provide examples of the first two as these are the most commonly used and a visual guide on how to set up your own.

Simple Templates

This is used when there are no dynamic variables to change – the code is static.  As an example, IntelliJ has pre-setup:

Abbreviation Code
sout
System.out.println();

Additional templates to the above that I have setup are:

Abbreviation Code Live Template
main
public static void main(String[] args){

}
public static void main(String[] args){
    $END$ 
}
LiveTemplateMain

Parameterised Templates

This is used when there are variables that require the user input.  The IDE has been programmed to try and calculate these automatically.  As an example, IntelliJ has setup:

Abbreviation Code
fori
for (int i = 0; i < ; i++) { }

 

Additional templates to the above that I have setup are:

Abbreviation Code Live Template
logger
public static final org.slf4j.Logger LOGGER = org.slf4j.LoggerFactory.getLogger(.class)
public static final org.slf4j.Logger LOGGER = org.slf4j.LoggerFactory.getLogger($CLASS_NAME$.class)
test
@org.junit.Test
public void ()
{
}
@org.junit.Test
public void $NAME$()
{
   $END$
}

LiveTemplateLogger TemplateVariable LiveTemplateTest

To save having to set up the above custom live templates, which can be a tedious task, I have attached here a copy of my live template settings to be imported into your local version of IntelliJ.  I might add to this list over time so it is worth checking periodically for updates.

Importing Settings

As wordpress does not allow .jar attachments, upon download, please change the file extension to .jar (from .zip) before proceeding with the below steps directly taken from JetBrains documentation:

  1. On the File menu, click Import Settings.
  2. Specify the path to the JAR file with the exported live template configuration.
  3. In the Import Settings dialog box, select the Live templates check box and click OK.
  4. After restarting IntelliJ IDEA, you will see the imported live templates on the Live Templates page of the Settings / Preferences Dialog.

Attachments

Code(f.) Inaugural Meetup

28th September

Code(f.) members flocked to our host and sponsors, Equal Experts, for our inaugural meetup. We were very fortunate to have an international conference speaker, Katharine Beaumont (@katharineCodes), presenting on “Neural Networks and Artificial Intelligence”.

The presentation got off to a good start with a quote from Ian Goodfellow et al’s book, “Deep Learning” that explains the challenges that are being currently faced by artificial intelligence:

“The true challenge to artificial intelligence proved to be solving the tasks that are easy to perform but hard for people to describe formally – problems that we solve intuitively, that feel automatic, like recognizing spoken words or faces in images.”

So how can we use neural networks to help with artificial intelligence? To help understand this complex challenge , the topic was broken down into the following questions:

  • What are we trying to get from neurons?
  • How can we use information from neurons in artificial intelligence?
  • Why is it important?

In order to fully understand how artificial neurons work, we first need to understand their underlying biology.

Diagram of a neuron and the synapse. Picture taken from https://www.khanacademy.org

In our bodies, we have a plethora of dendrites (nerve endings) that connect to neurons. When dendrites receive excitatory signals, they fire an electrical impulse down the neuron through the axon.  A signal can also be inhibitory which prevents an electrical impulse from being sent.  Neurons are connected to each other by synapses; for communication to occur across theses synapses, a neurotransmitter is passed from the presynaptic cell to the target receptors on the postsynaptic cell. The amount of chemical released depends on the magnitude of the impulse. There is a positive correlation between the size of the impulse and the quantity of chemical transmitted.

What

By studying how neurons function we can help to deduce the following 3 things:

  1. How the brain works.
  2. Style of parallel computation inspired by neurons
  3. Solve practical problems with novel algorithms

How

Artificial neurons are essentially trying to transform input data into output data. We can form mathematical calculations based on the biological explanation where in a mathematical problem the synapses form the weights.  The simplest neural network was invented in 1957 by Frank Rosenblatt; a single neuron which utilises the computational ‘feed-forward’ model.  This became known as a perceptron which consists of one or more inputs, a single processor and an output.

Setup of Artificial Neurons. Picture taken from http://www.global-warming-and-the-climate.com/climate-forcing.html

The above picture shows a neural network where we receive n inputs, each multiplied by its own weighting.  In computational networks, it applies an activation function to get the sum of results.  In artificial neural networks, this is known as a transfer function as the above diagram displays.  An activation function controls whether a neuron is ‘active’ or ‘inactive’, much like our biological electrical impulses being excitatory or inhibitory.  This activation function can take many different types such as linear or sigmoid.  3D graphical representations of non-linear activation functions can be visualised here.  Finally, the artificial neuron, outputs the result.

Why

Google famously uses machine learning with neural networks in its development for voice and image recognitions.  They own various programmes utilising this technique such as DeepDream; a computer vision programme that uses a convolutional neural network.

Katharine provided a visual explanation to help explain this. Our brain is very good at recognising objects such as a rabbit.  On the other hand, computers find it hard to recognise the shape and detail of such objects.  What about the following?  What does it look like?

A Komondor Dog

From a computers’ perspective, it looks very similar to:

A Yarn Mop

We want to build a network of neurons to help figure this information out artificially.

The presentation was concluded with a great visualisation of how neural networks work.

For further reading on this topic, Katharine has recommended the following courses on Coursera: Machine Learning and Neural Networks

We look forward to seeing everyone at our next meetup in October. Please sign up here to not miss out on this opportunity.

Blog post as seen on www.codef.co.uk

Women in Java Meetup Feat. Martijn Verburg and Franziska Sauerwein

18th May

This was the first meetup that I had fully organised from speakers to venue, food to marketing.  PIenty to keep me busy over the past few months so I am pleased to report that everything went without a hitch.   This event was kindly sponsored by the IT Women’s Council (ITWC) at Credit Suisse.

Martijn Verburg – @karianna

Martijn presented on a Java developer’s guide to performance tuning.  He introduced the Performance Diagnostic Methodology (PDM) which focused on how quickly to hone into the root cause of a bottleneck and what steps you can take to fix it.

Martijn Verburg presenting on "A Java Developer's Guide to Performance Tuning"

Martijn Verburg presenting on “A Java Developer’s Guide to Performance Tuning”

The ‘Diabolical Developer’, Martijn’s alter ego, took us through the different tactics that one can take in order to enhance their application which I will definitely be using.  Some of them are listed below:

  1. Know what your ACTUAL resources are
  2. Logical and physical architecture diagrams – draw them
  3. Have a measurement at each entry and exit point into your architecture
  4. What’s your CPU doing?

Franziska Sauerwein – @Singsalad

Franzi talked us through Software Craftsmanship and how it aims to raise the bar of Software Development.

Franziska Sauerwein presenting on an "Introduction to Software Craftsmanship"

Franziska Sauerwein presenting on an “Introduction to Software Craftsmanship”

She took us on a journey of being first taught to program without using a test environment.  She then realised that every time she changed a line of code, this could lead to bugs that might break the function of the system.  This was a very stressful way to work and was not maintainable.  She then discovered Software Craftsmanship and this has led to where she is now.  Working in this community “taught her how to study and teach, how to be humble and brave”.

The Manifesto for Software Craftsmanship can be seen in the above photo; this is a representation of the values within the community to “portray professionalism, technical excellence and personal responsibility”.

Thank you to our speakers and to all those who attended.  Hope to see you all soon!

‘Tis The Season To Be Jolly

As we near the end of the year, I thought I would delve into my ‘box of things’ to create something apt for the festive season;  I came up with Christmas Lights.

What I used

  1. Raspberry Pi (with Raspbian ‘Wheezy’ operating system (OS) on an SD card)
  2. Micro USB cable power supply
  3. Arduino
  4. Breadboard
  5. 8 x 5mm LED’s
  6. 8 x 330Ω resistors
  7. 10 Jumper wires
  8. Either an Arduberry or a Cable A to Cable B USB (to connect the Raspberry Pi to Arduino)
  9. Edimax wifi adaptor ( If wanting to use Raspberry Pi without physical connection to the router )
  10. Ethernet cable ( If network settings have not already been configured on the Raspberry Pi or you do not have a wifi adaptor )
  11. Laptop/PC

Aim

I wanted to create an application that combined the use of my Raspberry Pi with my Arduino; the use of the Raspberry Pi would act as my mini computer whilst the Arduino would be utilised for the output.  I also wanted to use my Raspberry Pi headless i.e. with no keyboard, mouse or monitor.  Therefore I used virtual network computing (VNC) from my laptop to connect to my Raspberry Pi.

Assumptions

I am making the assumption that the OS has already been loaded correctly onto the SD card and inserted into the Raspberry Pi and that the initial setup of the Raspberry Pi has been completed.  As I have a MacBook, these instructions are tailored to a computer with a UNIX environment.

What I did

1.   Configure Raspberry Pi Network Settings

As I connect my Raspberry Pi to the same network each time I use it, I decided to configure the network connection within the wifi protected access (WPA) client and supplicant on my Raspberry Pi; this enables me to get going quickly each time I turn my device on.

To do this, I initially needed to connect the Raspberry Pi directly to the router using the ethernet cable and be able to ssh into the device to be able to configure the correct settings.  However, in order to ssh, I needed to find out what IP address the Raspberry Pi was connecting to.  By running the following command through terminal on my MacBook, I was able to see the different connections:

arp -a

One of the connections showed:

raspberrypi (192.168.1.97) at 74:da:38:54:8c:ae on en0 ifscope [ethernet]

where 192.168.1.97 is the IP address.  The default username on the Raspberry Pi is ‘pi’, so I was able to ssh by running:

ssh pi@192.168.1.97

When connecting to the host for the first time, you might see the following:

The authenticity of host '192.168.1.97 (192.168.1.97)' can't be established. 
RSA key fingerprint is e3:68:b6:5b:27:37:85:57:f6:90:34:81:ae:3b:66:23. 
Are you sure you want to continue connecting (yes/no)?

You should type ‘yes’ in response.  It will then proceed to add the IP address to the list of known trusted hosts.

The default password on a raspberry pi is ‘raspberry’, so when prompted, this should be typed in.

Now that I was connected to my Raspberry Pi, I was able to proceed with editing the WPA settings.

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Inside of the conf, make sure that there is the following making sure to replace {WifiName} and {WifiPassword} with your wifi connection settings:

trl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="{WifiName}"
psk="{WifiPassword}"
}

You should now restart your Raspberry Pi safely using:

sudo reboot

2.   SSH into the Raspberry Pi

On restarting, you should disconnect your device from the ethernet cable and plug in the wifi dongle if you wish.  On startup, you should now be able to SSH into the device through your wireless wifi connection.  A reminder of the commands are:

arp -a
ssh pi@192.168.1.97

3.   Housekeeping and Installation of Software

I used the advanced package tool (APT) in order to install software onto the Raspberry Pi.  For a bit of housekeeping, the following should be run:

sudo apt-get update 
sudo apt-get upgrade

N.B There will be much output from these commands in the terminal.  I was then able to install a VNC server and the Arduino IDE onto my Raspberry Pi:

sudo apt-get install tightvncserver
sudo apt-get install arduino

4.   Start VNC server

tightvncserver

The first time that this is run, a password will be required to access the VNC desktop.

5.   Start VNC session

vncserver :0 -geometry 1920x1080 -depth 24

6.   Check out the VNC desktop

You need to go to a web browser and type the following as the URL replacing {ipaddress} with the IP address you identified earlier when SSH’ing into the Raspberry Pi :

vnc://{ipaddress}

In this example, I would direct my browser to vnc://192.168.1.97 .  A pop up may appear; you need to specify your IP address as your VNC server and your password is what you have set in step 4.

Now that the setup of the Raspberry Pi has been completed, the configuration of the Arduino can be carried out.

7.   Plug Everything In

Christmas Lights Circuit

Diagram from SparkFun

Christmas Lights Setup

8.  Write Code

You should navigate to the Raspberry Pi desktop and open the ArduinoIDE.  In a new sketch, type the following:

int ledPins[] = {2,3,4,5,6,7,8,9};

void setup()
{
  for(int i = 0; i <= 7; i++)
  {
    pinMode(ledPins[i],OUTPUT);
  }
}

void loop()
{
  oneAfterAnotherLoop();  
}

void oneAfterAnotherLoop()
{
  int delayTime = 100; 
  for(int i = 0; i <= 7; i++)
  {
    digitalWrite(ledPins[i], HIGH);
    delay(delayTime);                
  }                                  
  for(int j = 7; j >= 0; j--)
  {
    digitalWrite(ledPins[j], LOW);
    delay(delayTime);
  }               
}

9.   Upload to Arduino

The Arduino needs to be connected to the Raspberry Pi.  This was done using a cable A to cable B USB.  To upload the code to the Arduino, you need to make sure that you have specified what board you want to upload to.  Under Tools, navigate to Board and select the type of Arduino you own.  I selected Arduino UNO.  You also need to choose a serial port under Tools –> Port.  You are now ready to upload via Sketch –> Upload

10.   Watch the magic!

Christmas Lights

Attachments

Facebook

30th November

Who wouldn’t jump at the chance to go to the offices that connects more than 1.7 billion people together in an online network?  I certainly did when I received an invite to go to Facebook offices in London.

This sought out opportunity allowed me to experience firsthand what goes on behind the scenes of the largest social networking site.  I was able to hear from a range of departments; from building bridges between clients and customers through advertisement to protecting and caring for user’s data.  I was also fortunate to learn about the latest trend of augmented reality.  This post is an overview of my experience of what I discovered.

cyig6loxaaeompk-jpg-large

Photo taken by Gen Ashley @coderinheels

Solving Business Challenges Through Technology Bruce Hazan, Head of Solutions Engineering in EMEA

Advertisement on Facebook enables connectivity between businesses and their customers. Facebook encourages this behaviour by using Canvas which allows businesses to provide a full-screen experience.  By using Facebook, the advertisements are superior and more engaging as they use inbuilt technology; it also entitles the user to interact with the product being sold by swiping through a carousel, tilting the screen for a panoramic and zooming.

“What would you do if you weren’t afraid?”, Spencer Johnson

A recent retail study by ATKearney mentions that 90% of sales still happen within the physical presence of a shop rather than online which I found to be very surprising.  With this in mind, businesses try to use advertising on Facebook to gauge popularity.  They want to be able to measure their metrics; they want to be able to measure how popular a product might be in advance of footfall so that their supply can meet their demand.  However, the number of times somebody clicks on a Facebook advert is not a very accurate way to measure this.  I was shown the following humorous video that demonstrates this.

One way of being able to generate more online sales is through the use of bots.  Bots inspire brands to create meaningful connections with their consumers in the hope of converting this to a sale.

fullsizerender

An example of a bot used by Nespresso on Facebook

The Importance Of Data, How It Can Improve The Life Of Your End Users Ankita Vimal, Software Engineer

One of the first things that enters my mind when I heard the phrase ‘Protect and Care of Data’ was security.  Security is always a popular news topic of a major international organisation such as Facebook when there has been a breach from hackers.  The thought of your data being leaked to the public is enough to stop you using a service again; this can be detrimental to a company such as Facebook.  However, there are other aspects to protecting and caring of your data such as your privacy settings and being able to report activity.  I was shocked to learn that 75% of reported requests are manually resolved.  I thought this was a significantly high value and not scalable; indeed they have to hire ~5000 people to be able to deal with such requests.

Data driven development also plays a big role at Facebook.  Facebook looks at how the user interacts with their UI by shadowing the movement of the cursor and clicks.  They are also able to get feedback about the user from logging and surveys which provides Facebook with the opportunity to enhance their application accordingly.

“Stay Hungry, Stay Foolish”, Steve Jobs

Bringing Augmented Reality Tech To The Camera in Your Pocket Sammi Krug, Product Manager

Augmented reality readily gets connected with the term wearable technology.  However, this is most certainly not the case at Facebook.  In March 2016, Facebook acquired MSQRD which is an app that produces filters to rival Snapchat’s.  This is a perfect example of augmented reality in your pocket.

MSQRD uses face detection of the eyes, nose and mouth in order to apply an augmented scene around the face.  There are 3 key steps that Sammi mentioned that helped her manage the product:

  1. Decompose the problem

“It’s not complicated, it is just a lot.” This is a phrase that I definitely try to use when tackling a problem.  In terms of augmented reality, the problem is in 3 parts.  There is the 3D object which is the face, there is the high poly mask that is applied to the face and then there is a screen plane that gets placed on top.

2. Play to your strengths

Facebook does this by reaching out to 1.7 billion users on their phones!

3. Look for inspiration everywhere

“Fortune favours the bold”, Cicero

Much like what I saw scattered around the inside of the Facebook building, I have written some of the same motivational quotes on this blog which I found to be inspiring.

Women In Java Meetup

24th November

Women In Java hosted their first meetup which featured Holly Cummins and Trisha Gee.  This group was founded by Caris Young who has done an incredible job of getting approximately 50 tech females all in one place!

womeninjava

Holly Cummins presented her Cuddly Throwable Application Server; it was a great introduction to the internet of things and how computers such as Raspberry Pi’s and Arduino’s are small enough to hide anywhere.  She talked through all the troubles that she encountered throughout the process.  One quote she mentioned to describe the problems that she ran into was by Thomas Edison , “I have not failed.  I have just found 10,000 ways that won’t work”.  From this, she portrayed that unless you try and are prepared to fail, you are not going to learn.  However, this hobby does not come cheaply!

Trisha Gee demonstrated a live application that consumed a real-time twitter feed using Java 8 and Java 9 in anger.  This data was displayed on a JavaFX dashboard.  Having never experienced JavaFX, it was interesting to learn about how this is so readily pluggable to a Java backend.  It was also refreshing to see some of the upcoming functions in Java 9 that will be very useful seeing as some companies are only just moving to use Java 8!

A big thank you to Caris Young and her team at KnowIt for organising this session.

WeAreTech: Women Conference

23rd November

I had the pleasure of attending my virgin technology conference at Barclays in Canary Wharf.  The invitation said that the conference was to start at 8:30; as I dislike being late, I decided to arrive for 8:20.  However, it turns out that it started from 8:30 and most delegates turned up at 9:00!  Fortunately, there was a lovely lady from Bloomberg who I got chatting to as she had also interpreted the invite the same way as myself.

wearetech

It was a small shock to the system being surrounded by so many female techies as I work in an all-male team as a developer.   Nevertheless, it was very interesting to hear their individual stories and how they chose their career paths into technology.  The introduction speech was made by Nigel Walder, Head of Functions Technology and Business Performance at Barclays.  He stated that women should “be braver, don’t hide on the periphery of jobs”.  This quote in particular resonated with myself as from the concepts in the book “Lean In” by Sheryl Sandberg, females are very good at doing themselves injustice.  They will not go for something, such as apply for a job, if they do not feel that they tick every single box.  On the other hand, males will think they are good enough to apply for the job if they tick just one of the boxes!

The facilitator of the day was BBC click’s Kate Russell and throughout the day we heard from various inspirational leaders of women in technology.  I found Jacqueline de Rojas, Executive Vice President (Europe) at Sage and President of techUK,  particularly motivational when she mentioned to the audience that “having just one woman on the board reduces the risk of company bankruptcy by 20%”.  She also stated that “focussing on strengths is much more empowering than focussing on weaknesses” something which I need to learn from; I have a tendency to ignore the positive feedback that is mentioned to myself.

One other stand out presentation, in my opinion, was from the very enthusiastic Anne-Marie Imafidon, who is the founder of a fabulous company, STEMettes.  The aim of STEMettes is to increase the education of STEM subjects; this for me is poignant as I feel that this is the root cause of why there are limited number of females in technology.  Having spent most of my education in an all female school, I did not have the privilege to  study Computer Science as this was a ‘male’ subject and was only taught in the boy’s school.  Therefore, why would I choose to study this at university if I had no exposure to it when younger and it was a ‘male’ field?  Having read mathematics as part of my joint honours degree at university, I was exposed to C++.  This is where my love of programming started and little did I know that I would be making a career from this.  However, having spent a few years programming, I still feel like I am playing catch up to those that had the opportunity to study from a younger age.

A special thanks to Vanessa Vallely, Managing Director at WeAreTheCity, and her team for organising such a great event.  I found it to be a great networking opportunity to meet like minded females and I left feeling inspired to manage my own career in technology.

© 2024 Lara Nyman

Theme by Anders NorenUp ↑