<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Sandra Ahlgrimm</title>
    <description>The latest articles on Forem by Sandra Ahlgrimm (@sandraahlgrimm).</description>
    <link>https://forem.com/sandraahlgrimm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F271812%2F4f716f1e-ee13-49e0-8149-ef0a0baae518.jpeg</url>
      <title>Forem: Sandra Ahlgrimm</title>
      <link>https://forem.com/sandraahlgrimm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sandraahlgrimm"/>
    <language>en</language>
    <item>
      <title>Java in VS Code - Learn directly from the core engineers</title>
      <dc:creator>Sandra Ahlgrimm</dc:creator>
      <pubDate>Tue, 01 Mar 2022 14:11:02 +0000</pubDate>
      <link>https://forem.com/azure/java-in-vs-code-learn-directly-from-the-core-engineers-3h3f</link>
      <guid>https://forem.com/azure/java-in-vs-code-learn-directly-from-the-core-engineers-3h3f</guid>
      <description>&lt;p&gt;Hi! Welcome to this ongoing interview series with the core engineering team of Java in VS Code! Please let us know in the comments, for which extension or feature you want to have the next interviews! Also, what features do you miss for your java coding experience within VS Code?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack"&gt;Get started with VS code Java Extension Pack&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Basics of Java editing and refactoring in VS Code
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/eLiiDIlom5E"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In this session, we explore VS code Java editing and refactoring, and you get to meet one of its engineers - Jinbo Wang!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://code.visualstudio.com/docs/java/java-refactoring"&gt;Java refactoring and Source Actions docs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Debug your Java Code
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/bccB3IhQhSg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;VS Code's Java debugger extension helps accelerate your edit, compile, and debug loop. This session introduces you to the extension, its incredible features, and you get to meet one of its engineers - Jinbo Wang!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug"&gt;Java debug extension&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Runner Extension
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/AulgIP9P8Cw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The VS Code Java extensions are among the first to adopt the new Testing API from Visual Studio Code to provide a better testing experience. With the release of VS Code 1.59 as well as our Java Test Runner extension (included in the Java Extension pack), we have made significant improvements to Java testing experience in terms of features, capabilities, and ease of use. This session introduces you to the extension and you get to meet one of its engineers - Sheng Chen!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-test"&gt;Test Runner for Java&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Gradle Extension
&lt;/h2&gt;

&lt;p&gt;Meet Shi Chen, Software Engineer, working full time on Java and Gradle in VS Code. Learn all the tips and tricks of the Gradle extension for VS Code!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;a href="https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-gradle"&gt;Gradle extension&lt;/a&gt; is not part of the Java Extension package. Remember to add it separately 😊&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-gradle"&gt;Gradle Extension for Java Developers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/dfiaqZX-504"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  More Resources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://code.visualstudio.com/docs/java/java-tutorial"&gt;Official documentation for Java in VS Code&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/microsoft/vscode-java-pack"&gt;Java Pack on VS Code - GitHub project&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=uNnsP6nS49M"&gt;Video for Spring development within GitHub Codespaces&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>java</category>
    </item>
    <item>
      <title>Stop struggling with git, finally!</title>
      <dc:creator>Sandra Ahlgrimm</dc:creator>
      <pubDate>Mon, 03 May 2021 16:41:32 +0000</pubDate>
      <link>https://forem.com/azure/stop-struggling-with-git-finally-4ng0</link>
      <guid>https://forem.com/azure/stop-struggling-with-git-finally-4ng0</guid>
      <description>&lt;p&gt;Maybe you are new to coding and want to start your #100DaysOfCode challenge, or you are an experienced software developer and your biggest secret is, that git can be frightening to you. &lt;strong&gt;WE GOT YOU!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There's a full &lt;a href="https://docs.microsoft.com/learn/paths/intro-to-vc-git/?WT.mc_id=java-10007-sakriema" rel="noopener noreferrer"&gt;learning path&lt;/a&gt; that will guide you through git at your pace, for free.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://aka.ms/az-learn" rel="noopener noreferrer"&gt;MS Learn Path&lt;/a&gt; consists of three modules.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The first module is an &lt;a href="https://docs.microsoft.com/learn/modules/intro-to-git/?WT.mc_id=java-10007-sakriema" rel="noopener noreferrer"&gt;introduction to version control and git&lt;/a&gt; in particular. It's setting the base for this learning path by ensuring the local execution and usage of git commands. You'll be guided through commands and all the basics of git. It's a &lt;em&gt;learning by doing&lt;/em&gt; exercise.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1vxho48i0z0ytar6aq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1vxho48i0z0ytar6aq1.png" alt="Intro to git module"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;a href="https://docs.microsoft.com/learn/modules/collaborate-with-git/?WT.mc_id=java-10007-sakriema" rel="noopener noreferrer"&gt;second module, &lt;strong&gt;Collaborate with Git&lt;/strong&gt;,&lt;/a&gt; you'll learn how git helps you to better work together. First, we configure our access to a git repository, then you'll create a pull request by using a fork. All within the command-line tool of your choice!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9hid6benkho0t8n6kxp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9hid6benkho0t8n6kxp.png" alt="Collaborate with Git"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;a href="https://docs.microsoft.com/learn/modules/branch-merge-git/?WT.mc_id=java-10007-sakriema" rel="noopener noreferrer"&gt;third module, &lt;strong&gt;Edit code through branching and merging in Git&lt;/strong&gt;,&lt;/a&gt; teaches you all you need to know about branches and merges.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jg2w5vuwt7nmgr5ezzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jg2w5vuwt7nmgr5ezzk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After you finish this &lt;a href="https://docs.microsoft.com/learn/modules/intro-to-git/?WT.mc_id=java-10007-sakriema" rel="noopener noreferrer"&gt;learning path&lt;/a&gt;, you'll receive a batch you can share. But more importantly, you can easily start working together, and don't forget to add a new skill to your CV! 😉&lt;/p&gt;

&lt;p&gt;Did you finish this learning experience? Please share your batch in the comments! I am also interested in your feedback.&lt;/p&gt;

&lt;p&gt;Finally, do you know other great resources to learn git for free? Please share them in the comments as well or join the discussions on Twitter. 💜&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1388080769898356743-137" src="https://platform.twitter.com/embed/Tweet.html?id=1388080769898356743"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1388080769898356743-137');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1388080769898356743&amp;amp;theme=dark"
  }



&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>100daysofcode</category>
      <category>git</category>
      <category>programming</category>
    </item>
    <item>
      <title>Microsoft Java got released</title>
      <dc:creator>Sandra Ahlgrimm</dc:creator>
      <pubDate>Tue, 06 Apr 2021 16:29:31 +0000</pubDate>
      <link>https://forem.com/azure/microsoft-java-is-out-12j2</link>
      <guid>https://forem.com/azure/microsoft-java-is-out-12j2</guid>
      <description>&lt;p&gt;Yes, you read correctly. We just announced the Preview of Microsoft Build of OpenJDK on Twitter and on &lt;a href="https://aka.ms/microsoft-java" rel="noopener noreferrer"&gt;the official announcement&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Microsoft Build of OpenJDK is a new no-cost Long-Term Support (LTS) distribution of OpenJDK. It is open source and available for free for anyone to deploy anywhere.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1379451227482644485-910" src="https://platform.twitter.com/embed/Tweet.html?id=1379451227482644485"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1379451227482644485-910');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1379451227482644485&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;It includes binaries for Java 11, based on OpenJDK 11.0.10+9, on x64 server and desktop environments on macOS, Linux, and Windows. We are also publishing a new Early Access binary for Java 16 for Windows on ARM, based on the latest OpenJDK 16+36 release.&lt;/p&gt;

&lt;p&gt;Visit &lt;a href="https://msopenjdk.azurewebsites.net/?WT.mc_id=java-0000-sakriema" rel="noopener noreferrer"&gt;aka.ms/msopenjdk&lt;/a&gt; to download packages and installers.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1379509928335974414-918" src="https://platform.twitter.com/embed/Tweet.html?id=1379509928335974414"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1379509928335974414-918');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1379509928335974414&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Learn more here at the official announcement: &lt;a href="https://aka.ms/microsoft-java" rel="noopener noreferrer"&gt;https://aka.ms/microsoft-java&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please use the comments for your thoughts and questions, or share them directly at the GitHub repository. &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/microsoft" rel="noopener noreferrer"&gt;
        microsoft
      &lt;/a&gt; / &lt;a href="https://github.com/microsoft/openjdk" rel="noopener noreferrer"&gt;
        openjdk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Microsoft Build of OpenJDK
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Microsoft Build of OpenJDK&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;To learn more about this distribution, visit &lt;a href="https://www.microsoft.com/openjdk" rel="nofollow noopener noreferrer"&gt;microsoft.com/openjdk&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Releases&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Visit the &lt;a href="https://github.com/microsoft/openjdk/releases" rel="noopener noreferrer"&gt;Releases&lt;/a&gt; page for the latest versions of the Microsoft Build of OpenJDK.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Source Code&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The source code of our builds are hosted on the following repositories:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/openjdk-jdk11u" rel="noopener noreferrer"&gt;microsoft/openjdk-jdk11u&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/openjdk-jdk17u" rel="noopener noreferrer"&gt;microsoft/openjdk-jdk17u&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/openjdk-jdk21u" rel="noopener noreferrer"&gt;microsoft/openjdk-jdk21u&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The source code of our container images are hosted on the following repository:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/openjdk-docker" rel="noopener noreferrer"&gt;microsoft/openjdk-docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contribute&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Feel free to open Issues in this repository, or any of the repositories above, as well as initiating conversations through GitHub Discussions.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Jobs&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Looking for open jobs in the Microsoft Java Engineering Group? See &lt;a href="https://github.com/microsoft/openjdk./JOBS.md" rel="noopener noreferrer"&gt;./JOBS.md&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;License&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;MIT&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; Why is the license for this repo MIT as opposed to GPLv2+CE?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Because &lt;em&gt;this&lt;/em&gt; repo doesn't contain actual OpenJDK source code. We only use this repository for general issues, discussions and possibly GitHub Actions workflows.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Feedback&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;If you have any thoughts about our binaries, please &lt;a href="https://github.com/microsoft/openjdk/discussions" rel="noopener noreferrer"&gt;share them here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/microsoft/openjdk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Also, have a look at the Open Source Repository!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/microsoft" rel="noopener noreferrer"&gt;
        microsoft
      &lt;/a&gt; / &lt;a href="https://github.com/microsoft/openjdk-aarch64" rel="noopener noreferrer"&gt;
        openjdk-aarch64
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Microsoft builds of OpenJDK for AArch64 Platforms
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;OpenJDK for Windows on ARM64&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This project holds the documentation for Microsoft's port of OpenJDK for Windows on ARM64 devices.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;See our &lt;a href="https://github.com/microsoft/openjdk-aarch64CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;.  &lt;strong&gt;Please note&lt;/strong&gt; source code contributions are welcome through the &lt;a href="https://openjdk.java.net/contribute/" rel="nofollow noopener noreferrer"&gt;OpenJDK project&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Our &lt;a href="https://github.com/microsoft/openjdk-aarch64CODE_OF_CONDUCT.md" rel="noopener noreferrer"&gt;Code of Conduct&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;The Microsoft Build of OpenJDK&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;General Access (GA) binaries can be downloaded from &lt;a href="https://docs.microsoft.com/en-us/java/openjdk/download" rel="nofollow noopener noreferrer"&gt;the official release page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A number of older builds can be found under the &lt;a href="https://github.com/microsoft/openjdk-aarch64/releases" rel="noopener noreferrer"&gt;releases&lt;/a&gt; tab.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;JDK Enhancement Proposal&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The JEP can be found at &lt;a href="https://openjdk.java.net/jeps/388" rel="nofollow noopener noreferrer"&gt;https://openjdk.java.net/jeps/388&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The work was tracked under the &lt;a href="https://bugs.openjdk.java.net/browse/JDK-8248496" rel="nofollow noopener noreferrer"&gt;JDK-8248496&lt;/a&gt; item and has been delivered in OpenJDK 16. The work was later backported to JDK 11.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Source Code&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Source code changes required to implement this port were tracked under &lt;a href="https://bugs.openjdk.java.net/browse/JDK-8248238" rel="nofollow noopener noreferrer"&gt;JDK-8248238&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The port was merged into OpenJDK 16 and since then has been part of the &lt;a href="https://github.com/openjdk/jdk" rel="noopener noreferrer"&gt;OpenJDK mainline&lt;/a&gt;. Like previously stated, the port was later backported to JDK 11.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/microsoft/openjdk-aarch64" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>microsoft</category>
      <category>java</category>
      <category>opensource</category>
      <category>openjdk</category>
    </item>
    <item>
      <title>Why should I care about Azure App Service Environment version 3?</title>
      <dc:creator>Sandra Ahlgrimm</dc:creator>
      <pubDate>Thu, 07 Jan 2021 17:55:43 +0000</pubDate>
      <link>https://forem.com/azure/why-azure-app-service-environment-version-3-2ae1</link>
      <guid>https://forem.com/azure/why-azure-app-service-environment-version-3-2ae1</guid>
      <description>&lt;p&gt;Join Julien Dubois asking Christina Compy all the questions about the new in public preview third version of the Azure App Service Environment ASE. It is not only easier to secure but also less pricy. Find out more in our YouTube video.&lt;br&gt;
 &lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Y889W9aiGW4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The v3 version's got many improvements, mainly regarding network access. So, instead of having outbound traffic. Now, everything is inside your virtual network. Before, you used to have outbound dependencies and even inbound dependencies for your App Service Environment.&lt;/p&gt;

&lt;p&gt;With v3, there are no dependencies via inbound or outbound, that are inside your Azure virtual network. This makes it a lot easier to secure, to pass security reviews compliance, etc. Where people can just take a quick look at the system and realize, that it's as isolated as, say, a virtual machine running inside your virtual network. It's all under your control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you want to put up Network Security Groups to secure the entire thing? You can!&lt;/li&gt;
&lt;li&gt;If you want to route the outbound traffic through your own firewall device You can!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically, the network is totally under your control.&lt;/p&gt;

&lt;p&gt;More details, also about pricing at &lt;a href="https://aka.ms/az-env3"&gt;https://aka.ms/az-env3&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ama</category>
      <category>azure</category>
      <category>security</category>
      <category>network</category>
    </item>
    <item>
      <title>How Microsoft contributes to Java - an Interview with Monica Beckwith</title>
      <dc:creator>Sandra Ahlgrimm</dc:creator>
      <pubDate>Fri, 06 Nov 2020 14:12:31 +0000</pubDate>
      <link>https://forem.com/azure/how-microsoft-contributes-to-java-an-interview-with-monica-beckwith-jfg</link>
      <guid>https://forem.com/azure/how-microsoft-contributes-to-java-an-interview-with-monica-beckwith-jfg</guid>
      <description>&lt;h3&gt;
  
  
  Don't miss Rory Preddy, Java Advocate, interviewing Monica Beckwith - Java Champion and Principal Software Engineer at Microsoft.
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/6yRQwtVm96I"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;You can watch the full interview on the embedded YouTube - Or you go with the summary, written by &lt;a href="https://twitter.com/skriemhild" rel="noopener noreferrer"&gt;Sandra&lt;/a&gt; underneath.&lt;/p&gt;




&lt;h4&gt;
  
  
  Monica, tell us a little bit about yourself and your career so far!
&lt;/h4&gt;

&lt;p&gt;Hi everyone! I'm Monica. I am a Java Champion and I work behind the scenes of your virtual machine. So basically, I work with HotSpot primarily, which is the OpenJDK virtual machine for Java. I've been doing stuff all the way from JIT compilation optimization of generated code and garbage collection performance improvements, especially with G1 GC (Garbage-First). That's my baby. And now I'm just looking at pretty much the entire HotSpot VM and improvements in the OpenJDK, that can benefit Azure as well as anything, any learning, any of first party, third party customers and their applications, their workloads, their use case patterns. That can benefit the OpenJDK ecosystem. To make it a win-win for everybody.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/mon_beck" rel="noopener noreferrer"&gt;Find Monica on Twitter&lt;/a&gt; | &lt;a href="https://openjdk.java.net/groups/hotspot" rel="noopener noreferrer"&gt;OpenJDK Hotspot&lt;/a&gt; | &lt;a href="https://aka.ms/cloud-java" rel="noopener noreferrer"&gt;Java on Azure&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  You said before the interview; You're not a Java developer. So tell me, how did you get into the Java Champion program?
&lt;/h4&gt;

&lt;p&gt;I started my career with Java, but I was actually behind the scenes. So I started looking at OpenJDK. Back then, it was SunJDK like in 2002-ish. I was basically trying to understand how to optimize generated code. Back then X86-64(AMD64) was a new platform and it's a 64-bit platform. So what I was trying to do, is optimize the regenerative code and make sure, that we're using the right instructions - the pipeline up - so basically from the architecture, you're running Java code on. Back then, we just used some industry-standard benchmarks and we're going to make sure, that the underlying architecture can run and maybe like vectorization is an improvement we could do. We could get rid of redundant code. Also, try to speak the language of the underlying hardware architecture;&lt;br&gt;
So optimizations for cache, prefetching all these things. &lt;/p&gt;
&lt;h4&gt;
  
  
  What's the best way to write a GC-optimized code?
&lt;/h4&gt;

&lt;p&gt;I am always in awe of each program that I see out there. I never judge! I NEVER JUDGE. If you understand your allocations, if you understand the rate and the size of the objects, that's what matters! Right? In the end, you shouldn't worry about certain redundancies. It's my job. There are so many optimizations, that have gone into the JVM.&lt;/p&gt;
&lt;h4&gt;
  
  
  How would you describe Microsoft's role with the OpenJDK and the Java community?
&lt;/h4&gt;

&lt;p&gt;I work on improving industry benchmarks and providing real-world use cases. This is a data-driven process where you find data patterns, and identify common cases.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How are the patterns for in-memory databases?&lt;/li&gt;
&lt;li&gt;How does caching of caching affect different GC algorithms?&lt;/li&gt;
&lt;li&gt;Why should we talk about G1 GC as which is the default GC?&lt;/li&gt;
&lt;li&gt;Why should we keep our past times to this?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that's, if you think about, before this job at Microsoft, that was kind of my goal in every job, that I did. There's got to be these defaults that will work for many people and that's, why they're called "Out of the box", because literally; You plug in your JVM, the GC that you get, the past time goals, that you get or whatever; It should work for average or even above average users out there. I always want to learn and improve the JVM. - So to speak.&lt;/p&gt;
&lt;h4&gt;
  
  
  Any further kind of news and exciting events, that you want to discuss on the JVM front?
&lt;/h4&gt;

&lt;p&gt;Yeah, first of all, it's a big privilege for me. This opportunity is something, that you know people dream of. Where I see the future is; Java will always like the JVM is always going to evolve. Evolving into the next best thing out there. There's this vector API, that just is coming out as an incubator in JDK 16. We recently did a port to bringing Java to Windows ARM on Surface Pro X. Today, you can download the bits from Microsoft's GitHub repository.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/microsoft" rel="noopener noreferrer"&gt;
        microsoft
      &lt;/a&gt; / &lt;a href="https://github.com/microsoft/openjdk-aarch64" rel="noopener noreferrer"&gt;
        openjdk-aarch64
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Microsoft builds of OpenJDK for AArch64 Platforms
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;OpenJDK for Windows on ARM64&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This project holds the documentation for Microsoft's port of OpenJDK for Windows on ARM64 devices.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;See our &lt;a href="https://github.com/microsoft/openjdk-aarch64CONTRIBUTING.md" rel="noopener noreferrer"&gt;Contributing Guide&lt;/a&gt;.  &lt;strong&gt;Please note&lt;/strong&gt; source code contributions are welcome through the &lt;a href="https://openjdk.java.net/contribute/" rel="nofollow noopener noreferrer"&gt;OpenJDK project&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Our &lt;a href="https://github.com/microsoft/openjdk-aarch64CODE_OF_CONDUCT.md" rel="noopener noreferrer"&gt;Code of Conduct&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;The Microsoft Build of OpenJDK&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;General Access (GA) binaries can be downloaded from &lt;a href="https://docs.microsoft.com/en-us/java/openjdk/download" rel="nofollow noopener noreferrer"&gt;the official release page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A number of older builds can be found under the &lt;a href="https://github.com/microsoft/openjdk-aarch64/releases" rel="noopener noreferrer"&gt;releases&lt;/a&gt; tab.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;JDK Enhancement Proposal&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;The JEP can be found at &lt;a href="https://openjdk.java.net/jeps/388" rel="nofollow noopener noreferrer"&gt;https://openjdk.java.net/jeps/388&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The work was tracked under the &lt;a href="https://bugs.openjdk.java.net/browse/JDK-8248496" rel="nofollow noopener noreferrer"&gt;JDK-8248496&lt;/a&gt; item and has been delivered in OpenJDK 16. The work was later backported to JDK 11.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Source Code&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Source code changes required to implement this port were tracked under &lt;a href="https://bugs.openjdk.java.net/browse/JDK-8248238" rel="nofollow noopener noreferrer"&gt;JDK-8248238&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The port was merged into OpenJDK 16 and since then has been part of the &lt;a href="https://github.com/openjdk/jdk" rel="noopener noreferrer"&gt;OpenJDK mainline&lt;/a&gt;. Like previously stated, the port was later backported to JDK 11.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/microsoft/openjdk-aarch64" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;We at Microsoft make sure, that Java is available to every developer out there and that's Microsoft's goal as well every developer on every platform.&lt;/p&gt;

&lt;h4&gt;
  
  
  We want to keep up empowering every person in every organization to achieve more. Monica, thank you so much for your time today.
&lt;/h4&gt;

&lt;p&gt;Cool, thank you for having me. I appreciate that.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/6yRQwtVm96I"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/microsoft/openjdk-aarch64" rel="noopener noreferrer"&gt;OpenJDK on ARM&lt;/a&gt; | &lt;a href="https://aka.ms/az-free" rel="noopener noreferrer"&gt;Get your 200$ free on Azure&lt;/a&gt; | &lt;a href="https://aka.ms/cloud-java" rel="noopener noreferrer"&gt;Java on Azure&lt;/a&gt;&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Do you have more questions about Microsoft's engagement with Java? Please use the comments. 📝&lt;/li&gt;
&lt;li&gt;For more interviews, subscribe to our &lt;a href="https://www.youtube.com/channel/UCySRyO_0qCXxnHb6p7vMFnQ" rel="noopener noreferrer"&gt;Java on Azure YouTube channel&lt;/a&gt; or show us some claps 👏 and love 💜 in the comments here.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Thanks, the Java Developer Advocates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/rorypreddy" rel="noopener noreferrer"&gt;Rory&lt;/a&gt;, &lt;a href="https://twitter.com/skriemhild" rel="noopener noreferrer"&gt;Sandra&lt;/a&gt;, &lt;a href="https://twitter.com/juliendubois" rel="noopener noreferrer"&gt;Julien&lt;/a&gt; &amp;amp; &lt;a href="https://twitter.com/yoshioterada" rel="noopener noreferrer"&gt;Yoshio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>openjdk</category>
      <category>interview</category>
      <category>azure</category>
    </item>
    <item>
      <title>Connect your Java App with Power Apps</title>
      <dc:creator>Sandra Ahlgrimm</dc:creator>
      <pubDate>Fri, 10 Jul 2020 06:59:59 +0000</pubDate>
      <link>https://forem.com/azure/connect-your-java-app-with-power-apps-15m7</link>
      <guid>https://forem.com/azure/connect-your-java-app-with-power-apps-15m7</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fre5ybsg7o16to65ydrif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fre5ybsg7o16to65ydrif.png" alt="Powerfuldevs Speakercard with Sandra and Dawid"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  #PowerfulDevs Conference
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;THANKS FOR ATTENDING JULY 15:&lt;/code&gt; &lt;br&gt;
&lt;a href="https://aka.ms/powerfuldevsconf" rel="noopener noreferrer"&gt;https://aka.ms/powerfuldevsconf&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The &lt;a href="https://aka.ms/powerfuldevsconf" rel="noopener noreferrer"&gt;Powerful DEVs Conference&lt;/a&gt; is the first virtual conference of its kind. We will showcase how developers can leverage the Power Platform to build applications faster and with far less effort. Connect with industry-recognized ProDev influencers, Microsoft Cloud Advocates, trusted and diverse community leaders, and members of the Power Platform Team. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;BOOKMARK THIS FOR RESOURCES AND DISCUSSION WITH SPEAKERS&lt;/code&gt; &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/azure" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F512%2F64ce0b82-730d-4ca0-8359-2c21513a0063.jpg" alt="Microsoft Azure"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F422403%2F5e52a938-ac03-4919-afca-d684c4a3e39a.jpg" alt=""&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/azure/powerfuldevs-conference-join-us-on-july-15th-online-fe3" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;#powerfuldevs Conference: Join us on July 15th Online!&lt;/h2&gt;
      &lt;h3&gt;JennyMEvents for Microsoft Azure ・ Jul 10 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#powerfuldevs&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#powerplatform&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#prodev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
 

&lt;p&gt;Revisit this page during the event to engage in live (and post-event) discussions on those topics with both speakers and community. The speakers will be here for a live Q&amp;amp;A for at least 30 minutes immediately after their session concludes. After the event, come back to find additional slides, videos, and resources for this session. &lt;/p&gt;


 

&lt;h2&gt;
  
  
  About This Session:
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;July 15, 2020: 08:30 PDT - 08:55 PDT&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Power Platform provides next to the almost 400 preconfigured connectors for external tools via API. But also self-developed applications can be easily integrated with custom connectors. Let’s dive through the power of custom connectors of the Power Platform using OpenAPI to communicate with a Java Application. In this session I will connect a simple Spring Boot application generated by jhipster with Power Apps.&lt;/p&gt;

&lt;p&gt;For more information about Power Apps please check &lt;a href="https://docs.microsoft.com/connectors/custom-connectors/?WT.mc.id=events_powerfuldevs-blog-sakriema" rel="noopener noreferrer"&gt;https://aka.ms/PowerCustomConnectors&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://www.youtube.com/watch?v=-Xj7dJcp6ng" rel="noopener noreferrer"&gt;find the recorded session here&lt;/a&gt;. Feel free to keep asking your questions down here.&lt;/p&gt;

&lt;h2&gt;
  
  
  About the Speakers:
&lt;/h2&gt;

&lt;p&gt;Sandra Ahlgrimm is a Cloud Developer Advocate @ Microsoft for Java. Follow &lt;a href="https://twitter.com/sKriemhild" rel="noopener noreferrer"&gt;@skriemhild&lt;/a&gt; on Twitter. &lt;/p&gt;

&lt;p&gt;Dawid van Heerden is a Microsoft MVP for Power Apps and a true Power Apps Champion. Follow &lt;a href="https://twitter.com/davestechtips" rel="noopener noreferrer"&gt;@davestechtips&lt;/a&gt; on Twitter.&lt;/p&gt;

</description>
      <category>ama</category>
      <category>powerfuldevs</category>
      <category>powerplatform</category>
      <category>java</category>
    </item>
    <item>
      <title>Learn to automatically analyze your images using AI services to find keywords, title and other useful metadata</title>
      <dc:creator>Sandra Ahlgrimm</dc:creator>
      <pubDate>Mon, 16 Dec 2019 15:57:04 +0000</pubDate>
      <link>https://forem.com/azure/learn-to-automatically-analyze-your-images-using-ai-services-to-find-keywords-title-and-other-useful-metadata-3n6i</link>
      <guid>https://forem.com/azure/learn-to-automatically-analyze-your-images-using-ai-services-to-find-keywords-title-and-other-useful-metadata-3n6i</guid>
      <description>&lt;p&gt;This article is part of &lt;a href="https://25daysofserverless.com"&gt;#25DaysOfServerless&lt;/a&gt;. New challenges will be published every day from Microsoft Cloud Advocates throughout the month of December. Find out more about how Microsoft Azure enables your &lt;a href="https://docs.microsoft.com/azure/azure-functions/?WT.mc_id=25days_devto-blog-cxa"&gt;Serverless functions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Have an idea or a solution? &lt;a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=I'm%20joining%20the%20@azureadvocates%20%2325DaysOfServerless%20challenge!!%20Learn%20more%20at%20https://aka.ms/25daysofserverless%20or%20see%20solutions%20at%20https://dev.to/search?q=25DaysOfServerless!%20Join%20me!"&gt; Share your thoughts on Twitter! &lt;br&gt;
&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Do you want to allow your app to see, hear, listen, speak and even to begin to reason? No worries! You don't need to have a degree in Machine Learning. Nowadays, you can choose betweeen different AI services. One of them are &lt;a href="https://docs.microsoft.com/azure/cognitive-services?WT.mc_id=25days_devto-blog-sakriema"&gt;Azure Cognitive Services&lt;/a&gt;, available as APIs, SDKs and services. They help developers build intelligent applications. Cognitive Services are grouped. Each Group support different, generalized prediction capabilities. Computer Vision is the service to choose to process and analyse images.&lt;/p&gt;

&lt;p&gt;The usage of the &lt;a href="https://westcentralus.dev.cognitive.microsoft.com/docs/services/5adf991815e1060e6355ad44/operations/56f91f2e778daf14a499e1fa?WT.mc_id=25days_devto-blog-sakriema"&gt;Computer Vision API&lt;/a&gt; allows to analyse and describe images, to detect objects, recognize texts and more. You can either upload your image to the service or pass the image url.&lt;/p&gt;

&lt;p&gt;In this blog post I want to demonstrate the usage of the Cognitive Services API by solving one of the &lt;a href="https://25daysofserverless.com"&gt;#25DaysOfServerless&lt;/a&gt; challenges.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here in Munich, Germany, Felix is excited to go to a traditional Weihnachtsmarkt, a holiday market! He keeps texting photos to his friend Anna about all the fun things he's doing: drinking hot mulled Glühwein, going ice skating, shopping for presents. But Anna can't find her glasses, and can't clearly see what's in the pictures!&lt;/p&gt;

&lt;p&gt;For today's challenge, Anna needs a service that, given an image, describe the image and gives some keywords about what it contains.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To solve this &lt;a href="https://25daysofserverless.com/calendar/15"&gt;15th challenge&lt;/a&gt; we need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find an image randomly or by keywords using an image API.&lt;/li&gt;
&lt;li&gt;Process and Analyse the given image to give a matching description for the given picture.&lt;/li&gt;
&lt;li&gt;(Optional) Display the image with the caption and keywords.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Author's Solution 🔥
&lt;/h2&gt;

&lt;p&gt;This challenge can be seen as a continuation of challenge 7. Feel free to extend your own solution or you can use the &lt;a href="https://github.com/SandraAhlgrimm/serverlesschallenge"&gt;author's solution&lt;/a&gt; which is written in Java.&lt;/p&gt;

&lt;p&gt;We will use Cognitive Services and integrate Computer Vision to calculate the description and tags for the images. Therefore, enter the &lt;a href="https://portal.azure.com"&gt;portal&lt;/a&gt;&lt;br&gt;
and search for &lt;em&gt;Computer Vision&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cnoxU-ys--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/x38im9ky6900cvptky1h.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cnoxU-ys--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/x38im9ky6900cvptky1h.JPG" alt="Screenshot of the Azure Portal, search for Computer Vision and choose it from Azure Marketplace" title="Screenshot Computer Vision Search"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The free Tier allows you to execute 20 Calls per minute or 5000 per month. That is way more than we need for the challenge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8RGiLA6B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jqie9jszkvt1elg8yuep.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8RGiLA6B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jqie9jszkvt1elg8yuep.JPG" alt="Price Tier Screenshot" title="Price Tier Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All you need is the Key1 and your API Endpoint that you can find in the portal at &lt;code&gt;Quick start&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_yTbKHo9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/k9s8x16d90g46gggu3bh.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_yTbKHo9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/k9s8x16d90g46gggu3bh.JPG" alt="Computer Vision Screenshot" title="Computer Vision Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the source code, all we need to do is to authenticate with the generated keys and then let the API do it's work 🐱‍🏍. Therefore, think which &lt;code&gt;VisualFeatureTypes&lt;/code&gt; are interesting for the specific usecase as we want to keep it as &lt;em&gt;kiss&lt;/em&gt;💋 as possible. For this challenge, we only need the description and tags, explaining what you can see on the image passed. To receive the image analysis call the Computer Vision service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;
    &lt;span class="c1"&gt;// Get environment variables and authenticate with computer vision&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="no"&gt;CV_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getenv&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"COMPUTER_VISION_SUBSCRIPTION_KEY"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="no"&gt;CV_API&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getenv&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"COMPUTER_VISION_ENDPOINT"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="nc"&gt;ComputerVisionClient&lt;/span&gt; &lt;span class="n"&gt;compVisClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ComputerVisionManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;authenticate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;CV_KEY&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withEndpoint&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;CV_API&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// This list defines the features to be extracted from the image.&lt;/span&gt;
    &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;VisualFeatureTypes&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;extractDescriptionAndTags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
    &lt;span class="n"&gt;extractDescriptionAndTags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;VisualFeatureTypes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;DESCRIPTION&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;extractDescriptionAndTags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;VisualFeatureTypes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TAGS&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Call the Computer Vision service and tell it to analyze the loaded image.&lt;/span&gt;
    &lt;span class="nc"&gt;ImageAnalysis&lt;/span&gt; &lt;span class="n"&gt;analysis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;compVisClient&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;computerVision&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;analyzeImage&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;withUrl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imageUrl&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withVisualFeatures&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extractDescriptionAndTags&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Good to know:&lt;/strong&gt; What we will get in return are not only the captions and descriptions but also the matching confidence values. That can be very useful for scenarios where we do need to know with specific certainty whether the random image displays, for instance, a Christmas tree or it does not.&lt;br&gt;
For this challenge, we will just print our findings with the confidence values in the console to satisfy our developers curiosity.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;    &lt;span class="c1"&gt;// Display image captions and confidence values.&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nCaptions: "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;captionString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ImageCaption&lt;/span&gt; &lt;span class="n"&gt;caption&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;analysis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;captions&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;captionString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;caption&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\'%s\' with confidence %f\n"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;caption&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;caption&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;confidence&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// Display image tags and confidence values.&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\nTags: "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="nc"&gt;StringBuilder&lt;/span&gt; &lt;span class="n"&gt;keywords&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StringBuilder&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ImageTag&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;analysis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;keywords&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="n"&gt;keywords&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\'%s\' with confidence %f\n"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;confidence&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we return the image with the matching caption and keywords to complete the challenge. ✨&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createResponseBuilder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpStatus&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OK&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Search for image with keywords:%s. You can see on this picture: %s. With the keywords %s. Got url: %s"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;resultText&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;captionString&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;keywords&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;imageUrl&lt;/span&gt;&lt;span class="o"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  In Conclusion
&lt;/h3&gt;

&lt;p&gt;We learned what Cognitive Services are and looked in particular into the artificial comprehension of images.&lt;br&gt;
Therefore, we have seen an example how to use the &lt;a href="https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/quickstarts/java-analyze?WT.mc_id=25days_devto-blog-sakriema"&gt;Computer Vision Service&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Register your service to receive your API keys.&lt;/li&gt;
&lt;li&gt;Create a list of visual feature types you want to extract.&lt;/li&gt;
&lt;li&gt;Analyze the image. 🐱‍👤&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Want to submit your solution to this challenge? Build a solution locally and then &lt;a href="https://github.com/microsoft/25-days-of-serverless/issues/new?assignees=&amp;amp;labels=challenge-submission&amp;amp;template=challenge-solution-submission.md&amp;amp;title=%5BCHALLENGE+SUBMISSION%5D+"&gt;submit an issue&lt;/a&gt;. If your solution doesn't involve code you can record a short video and submit it as a link in the issue desccription. Make sure to tell us which challenge the solution is for. We're excited to see what you build! Do you have comments or questions? Add them to the comments area below.&lt;/p&gt;




&lt;p&gt;Watch for surprises all during December as we celebrate 25 Days of Serverless. Stay tuned here on dev.to as we feature challenges and solutions! Sign up for a &lt;a href="https://azure.microsoft.com/free/?WT.mc_id=25days_devto-blog-cxa"&gt;free account on Azure&lt;/a&gt; to get ready for the challenges!&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>tutorial</category>
      <category>java</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Miguel needs our help - Day 7 of the #25DaysOfServerless Challenge</title>
      <dc:creator>Sandra Ahlgrimm</dc:creator>
      <pubDate>Sun, 08 Dec 2019 20:56:04 +0000</pubDate>
      <link>https://forem.com/azure/miguel-needs-our-help-day-7-of-the-25daysofserverless-challenge-4jg0</link>
      <guid>https://forem.com/azure/miguel-needs-our-help-day-7-of-the-25daysofserverless-challenge-4jg0</guid>
      <description>

&lt;p&gt;This article is part of &lt;a href="https://25daysofserverless.com"&gt;#25DaysOfServerless&lt;/a&gt;. New challenges will be published every day from Microsoft Cloud Advocates throughout the month of December. Find out more about how Microsoft Azure enables your &lt;a href="https://docs.microsoft.com/azure/azure-functions/?WT.mc_id=25days_devto-blog-cxa"&gt;Serverless functions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Have an idea or a solution? &lt;a class="twitter-share-button" href="https://twitter.com/intent/tweet?text=I'm%20joining%20the%20@azureadvocates%20%2325DaysOfServerless%20challenge!!%20Learn%20more%20at%20https://aka.ms/25daysofserverless%20or%20see%20solutions%20at%20https://dev.to/search?q=25DaysOfServerless!%20Join%20me!"&gt; Share your thoughts on Twitter! &lt;br&gt;
&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;So, an evil grinch has stolen all the servers in the world, and we have to visit many countries to set things right! Now we are in Guatemala, and here, December 7 marks the first day of the official Christmas season. Everybody is scrambling to get ready for the big la quema del diablo (burning of the devil) tonight — at 6pm sharp, everyone will start a bonfire to burn rubbish and items they don't need to cleanse their homes of evil.&lt;/p&gt;

&lt;p&gt;Our friend Miguel is concerned about the environmental impact! The past few years, people have been burning a lot of rubber and plastic that makes the air dirty. Some places are switching to burning paper piñatas of the devil, but Miguel still wants to let people metaphorically cleanse their houses of specific items they don't want.&lt;/p&gt;

&lt;p&gt;Let's help Miguel by building a web API that lets his neighbors search for images of things they want to get rid of. Build an application (e.g. a cloud function with a single endpoint) that takes text as an input and returns an image found on unsplash or another image platform.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xUlTtQnl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/mpcghxq551l01nwpyx0b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xUlTtQnl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/mpcghxq551l01nwpyx0b.jpg" alt="Burning Challenge7 Image"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h2&gt;Tip&lt;/h2&gt;

&lt;p&gt;Make sure to keep your keys private. You can profit from environment variables to do so;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;export UNSPLASH_ACCESS_KEY="your_access_key"&lt;br&gt;
export UNSPLASH_SECRET_KEY="your_secret_key"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;A Solution&lt;/h2&gt;

&lt;p&gt;As a Java Developer I created my &lt;a href="https://docs.microsoft.com/azure/azure-functions/functions-create-first-java-maven/?WT.mc_id=25daysofserverless-devto-sakriema"&gt;Azure Function with Java&lt;/a&gt;&lt;br&gt;
 and maven using Java8. Starting this way, an example http trigger plus test will be generated automatically which can be used and adapted to the challenge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IbLwiRWI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/36t75x8drxluh7go5acx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IbLwiRWI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/36t75x8drxluh7go5acx.png" alt="Use Powershell to create a Java Function"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The generated Http-Trigger provides an easy "Hello Name" example where &lt;em&gt;Name&lt;/em&gt; changes due to the given parameters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.microsoft.azure.functions.annotation.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.microsoft.azure.functions.*&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/**
 * Azure Functions with HTTP Trigger.
 */&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Function&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="cm"&gt;/**
     * This function listens at endpoint "/api/HttpTrigger-Java". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpTrigger-Java&amp;amp;code={your function key}
     * 2. curl "{your host}/api/HttpTrigger-Java?name=HTTP%20Query&amp;amp;code={your function key}"
     * Function Key is not needed when running locally, it is used to invoke function deployed to Azure.
     * More details: https://aka.ms/functions_authorization_keys
     */&lt;/span&gt;
    &lt;span class="nd"&gt;@FunctionName&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"HttpTrigger-Java"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;HttpResponseMessage&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
            &lt;span class="nd"&gt;@HttpTrigger&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"req"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nc"&gt;HttpMethod&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GET&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;HttpMethod&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;POST&lt;/span&gt;&lt;span class="o"&gt;},&lt;/span&gt; &lt;span class="n"&gt;authLevel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
                &lt;span class="nc"&gt;AuthorizationLevel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FUNCTION&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nc"&gt;HttpRequestMessage&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Optional&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
            &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;ExecutionContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getLogger&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Java HTTP trigger processed a request."&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Parse query parameter&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getQueryParameters&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBody&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;orElse&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createResponseBuilder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpStatus&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BAD_REQUEST&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Please pass a name on the query string or in the request body"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createResponseBuilder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpStatus&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OK&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before you begin modifying your generated function, register on &lt;a href="//unsplash.com"&gt;unsplash.com&lt;/a&gt; and declare your function app at &lt;a href="https://unsplash.com/oauth/applications"&gt;the developer section&lt;/a&gt; to get the keys necessary. Those keys got stored in my environment variables for local testing via the command line tool as well as in the &lt;em&gt;local.settings.json&lt;/em&gt; following the format.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"IsEncrypted"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Values"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"AzureWebJobsStorage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"FUNCTIONS_WORKER_RUNTIME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"java"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"UNSPLASH_ACCESS_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your unsplash access key"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"UNSPLASH_SECRET_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your unsplash secret key"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the deployment in Azure, make sure to &lt;a href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings"&gt;set the keys as environment variables&lt;/a&gt; as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_hIiIZr1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/tqhwstuawe5mjczei1ua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_hIiIZr1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/tqhwstuawe5mjczei1ua.png" alt="Add the variables to our deployed function"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, let's get back to our generated function. To extract the query from the Http-Trigger some minor adjustments are necessary. As we want to allow the people to search not only for one but also for more than one keywords, we need to replace all blanks with the URL-readable format "%20". In order to keep the query for a human readable output, save the keywords in another variable separated by commas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getQueryParameters&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBody&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;orElse&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;resultText&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createResponseBuilder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpStatus&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BAD_REQUEST&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Please pass a text on the query string or in the request body to search for"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;resultText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;", "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;replace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"%20"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;resultText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Concatenate the url to access the unsplash api with your keys.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;BufferedReader&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;StringBuilder&lt;/span&gt; &lt;span class="n"&gt;responseContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StringBuilder&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Get environment variables and access unsplash&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="no"&gt;ACCESS_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getenv&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"UNSPLASH_ACCESS_KEY"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="no"&gt;SECRET_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getenv&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"UNSPLASH_SECRET_KEY"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="nc"&gt;StringBuilder&lt;/span&gt; &lt;span class="n"&gt;urlBuilder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;StringBuilder&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;urlBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://api.unsplash.com/search/photos?client_id="&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;urlBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;ACCESS_KEY&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;urlBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;amp;client_secret="&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;urlBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;SECRET_KEY&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;urlBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;amp;query="&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;urlBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;urlBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&amp;amp;count=1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Having the url we just need to open a connection and read the response content. Make sure to set timeouts to prevent your http request running forever and to disconnect your connection afterwards. Yes, with a newer JavaSDK you can also use &lt;a href="https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient"&gt;the apache http client&lt;/a&gt; but in this solution we are showcasing a working solution also for Java8.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="no"&gt;URL&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="no"&gt;URL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;urlBuilder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
    &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpURLConnection&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;openConnection&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setRequestMethod&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"GET"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setConnectTimeout&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setReadTimeout&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;responseCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResponseCode&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;responseCode&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;299&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BufferedReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;InputStreamReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getErrorStream&lt;/span&gt;&lt;span class="o"&gt;()));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BufferedReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;InputStreamReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInputStream&lt;/span&gt;&lt;span class="o"&gt;()));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readLine&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="n"&gt;responseContent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;append&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;IOException&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printStackTrace&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;disconnect&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we need to parse the response of our unsplash api request. In this solution JSONObject and JSONArray from the &lt;a href="https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.json%22%20AND%20a%3A%22json%22"&gt;org.json library&lt;/a&gt; are used. Another well known and good used JSON parser would be &lt;a href="https://code.google.com/archive/p/json-simple/"&gt;json-simple&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;JSONObject&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;JSONObject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;responseContent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="nc"&gt;JSONArray&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getJSONArray&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"results"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;smallImageUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getJSONObject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getJSONObject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"urls"&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"small"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Last but not least, give back the image or the image url to the people from Guatemala.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// return image url&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createResponseBuilder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpStatus&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OK&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Search for image with keywords:  "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;resultText&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;". Got url: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;smallImageUrl&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thank you for saving the environment by not letting them burn the stuff they want to get rid of but saving their cultural integrity with this alternative.&lt;/p&gt;

&lt;p&gt;We wish you a peaceful holiday season and a happy new year.&lt;/p&gt;




&lt;p&gt;Want to submit your solution to this challenge? Build a solution locally and then &lt;a href="https://github.com/microsoft/25-days-of-serverless/issues/new?assignees=&amp;amp;labels=challenge-submission&amp;amp;template=challenge-solution-submission.md&amp;amp;title=%5BCHALLENGE+SUBMISSION%5D+"&gt;submit an issue&lt;/a&gt;. If your solution doesn't involve code you can record a short video and submit it as a link in the issue desccription. Make sure to tell us which challenge the solution is for. We're excited to see what you build! Do you have comments or questions? Add them to the comments area below.&lt;/p&gt;




&lt;p&gt;Watch for surprises all during December as we celebrate 25 Days of Serverless. Stay tuned here on dev.to as we feature challenges and solutions! Sign up for a &lt;a href="https://azure.microsoft.com/free/?WT.mc_id=25days_devto-blog-cxa"&gt;free account on Azure&lt;/a&gt; to get ready for the challenges!&lt;/p&gt;

</description>
      <category>25daysofserverless</category>
      <category>azure</category>
      <category>java</category>
      <category>functional</category>
    </item>
  </channel>
</rss>
