{"id":8568,"date":"2019-08-31T07:07:48","date_gmt":"2019-08-31T05:07:48","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=8568"},"modified":"2023-06-18T18:23:09","modified_gmt":"2023-06-18T16:23:09","slug":"cloudbased-image-transformation","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/08\/31\/cloudbased-image-transformation\/","title":{"rendered":"Cloudbased Image Transformation"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>As part of the lecture \u201eSoftware Development for Cloud\nComputing\u201c, we had to come up with an idea for a cloud related project we\u2019d like\nto work on. I had just heard about Artistic Style Transfer using Deep Neural\nNetworks in our \u201eArtificial Intelligence\u201c lecture, which inspired me to choose\nimage transformation as my project. However, having no idea about the cloud\nenvironment at that time, I didn\u2019t know where to start and what is possible. A\nfew lectures in I had heard about Infrastructure as a Service (IaaS), Platform\nas a Service (PaaS) and Function as a Service (FaaS). Out of those three I\nliked the idea of FaaS the most. Simply upload your code and it works. Hence, I\nwent with Cloud Functions in IBMs Cloud Environment. Before I present my project\nI\u2019d like to explain what Cloud Functions are and how they work.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What are Cloud Functions?<\/h2>\n\n\n\n<p>Choose one of the supported programming languages. Write\nyour code. Upload it. And it works. Serverless computing. That\u2019s the theory\nbehind Cloud Functions. You don\u2019t need to bother with Infrastructure. You don\u2019t\nneed to bother with Load Balancers. You don\u2019t need to bother with Kubernetes. And\nyou definitely do not have to wake up at 3 am and race to work because your servers\nare on fire. All you do is write the code. Your Cloud Provider manages the\nrest. Cloud provider of my choice was IBM. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why IBM Cloud Functions?<\/h2>\n\n\n\n<p>Unlike Google and Amazon, IBM offers FREE student\naccounts. No need to deposit any kind of payment option upon creation of your\nfree student account either. Since I have no experience using any cloud\nenvironment, I didn\u2019t want to risk accidentally accumulating a big bill. Our\ninstructor was also very familiar with the IBM Cloud, in case I needed support\nI could have always asked him as well.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What do IBM Cloud Functions offer?<\/h2>\n\n\n\n<p>IBM offers a Command Line Interface (CLI), a nice User Interface on their cloud website, accessible using the web browser of your choice and very detailed Documentation. You can check, and if you feel like it, write or edit your code using the UI as well. The only requirement for your function is: It has to take a json object as input and it has to return a json as well. You can directly test the Function inside the UI as well. Simply change the Input, declare an example json object you want to run it with, then invoke your function. Whether the call failed or succeeded, the activation ID, the response time, results, and logs, if enabled, are then displayed directly. You can add default input Parameters or change your functions memory limit, as well as the timeout on the fly as well. Each instance of your function will then use the updated values. <\/p>\n\n\n\n<p>Another nice feature of IBM Cloud Functions are Triggers.\nYou can connect your function with different services and, once they trigger\nyour function, it will be executed. Whether someone pushed new code to your\nGitHub repository or someone updated your Cloudant Database, IBMs database\nservice. Once invoked by this trigger, your function executes.<\/p>\n\n\n\n<p>You can also create a chain of Cloud Functions. The\noutput of function 1 will then be the input of function 2.<\/p>\n\n\n\n<p>IBM Cloud Function use the Apache OpenWhisk service,\nwhich packs your code into a Docker Container in order to run it. However, if\nyou have more than one source file, or dependencies you need, you can pack it\nin a docker image or, in some cases, like Python or Ruby, you can also zip\nthem. In order to do that in Python, you need a virtual environment using\nvirtualenv, then zip the virtualenv folder together with your python files. The\nresulting zip files and Docker images can only be uploaded using the CLI.<\/p>\n\n\n\n<p>You can also enable your function as Web Action, which\nallows it to handle HTTP Events. Since the link automatically provided by\nenabling a function as web action ends in .json, you might want to create an\nAPI Definition. This can be done with just a few clicks. You can even import an\nOpenAPI Definition in yaml or json format. Binding an API to a function is as\nsimple as defining a base path for your API, giving it a name and creating an\noperation. For example: API name: Test, Base path for API: \/hello and for the\noperation we define the path \/world select our action and set response content\ntype to application\/json. Now, whenever we call &lt;domain&gt;\/hello\/world, we\ncall our Cloud Function using our REST-API. Using the built-in API-Explorer we\ncan test it directly. If someone volunteers to test the API for us, we can also\nshare the API Portal Link with them. Adding a custom domain is also easily\ndone, by dropping the domain name, the certificate manager service and then\nCertificate in the custom domain settings.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Finally, my Project<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"350\" data-attachment-id=\"8582\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/08\/31\/cloudbased-image-transformation\/architecture-4\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Architecture.png\" data-orig-size=\"750,350\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Architecture\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Architecture.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Architecture.png\" alt=\"\" class=\"wp-image-8582\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Architecture.png 750w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Architecture-300x140.png 300w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><figcaption>Architecture of the Image Transformation Service<\/figcaption><\/figure>\n\n\n\n<p>The idea was:<\/p>\n\n\n\n<p>A user interacts with my GitHub Page, selects a filter, adds an Image, tunes some parameters, then clicks confirm. The result: They receive the transformed image.<\/p>\n\n\n\n<p>The GitHub Page has been written with HTML, CSS and JavaScript.\nIt sends a POST request to the API I defined, which is bound to my Cloud\nFunction, written in Python. It receives information about the chosen filter,\nthe set parameters and a link to the image (for the moment, only jpeg and png\nare allowed). It then processes the image and returns the created png byte64\nencoded. The byte64 encoded data will then be embedded in the html site and the\nuser can then save the image. <\/p>\n\n\n\n<p>The function currently has three options: <\/p>\n\n\n\n<p>You can transform an image into a greyscale\nrepresentation. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"512\" data-attachment-id=\"8575\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/08\/31\/cloudbased-image-transformation\/blackwhite\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/BlackWhite.jpg\" data-orig-size=\"1280,640\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"BlackWhite\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/BlackWhite-1024x512.jpg\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/BlackWhite-1024x512.jpg\" alt=\"\" class=\"wp-image-8575\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/BlackWhite-1024x512.jpg 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/BlackWhite-300x150.jpg 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/BlackWhite-768x384.jpg 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/BlackWhite.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption> Left: Original Image by Johannes Plenio,  Right: black and white version <\/figcaption><\/figure>\n\n\n\n<p>You can upscale an image by a factor of two, three or four<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-attachment-id=\"8574\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/08\/31\/cloudbased-image-transformation\/upscale\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Upscale.jpg\" data-orig-size=\"1920,1280\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"Upscale\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Upscale-1024x683.jpg\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Upscale-1024x683.jpg\" alt=\"\" class=\"wp-image-8574\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Upscale-1024x683.jpg 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Upscale-300x200.jpg 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Upscale-768x512.jpg 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/Upscale.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Left: Original Image by Johannes Plenio, Right: Upscaled by a factor of 2<\/figcaption><\/figure>\n\n\n\n<p>and you can transform an image into a Cartoon\nrepresentation.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"385\" data-attachment-id=\"8573\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/08\/31\/cloudbased-image-transformation\/cartoonfilter\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/CartoonFilter.jpg\" data-orig-size=\"1280,481\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"CartoonFilter\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/CartoonFilter-1024x385.jpg\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/CartoonFilter-1024x385.jpg\" alt=\"\" class=\"wp-image-8573\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/CartoonFilter-1024x385.jpg 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/CartoonFilter-300x113.jpg 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/CartoonFilter-768x289.jpg 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/CartoonFilter.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Left: Original Image by Helena Lopes, Right: Cartoon version<\/figcaption><\/figure>\n\n\n\n<p>Cartoon images are characterized by clear edges and homogenous\ncolors The Cartoon Filter first creates a grayscale image and median blurs it,\nthen detects the edges using adaptive Threshold, which currently still has a\npredefined window size and threshold. It then median filters the colored image\nand does a bitwise and operation between every RGBA color channel of our median\nfiltered color image and the found edges.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dis-\/ Advantage using (IBM) Cloud Functions<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"203\" data-attachment-id=\"8569\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/08\/31\/cloudbased-image-transformation\/advantages\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/advantages.jpg\" data-orig-size=\"1652,328\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;samesame&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1567227951&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"advantages\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/advantages-1024x203.jpg\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/advantages-1024x203.jpg\" alt=\"\" class=\"wp-image-8569\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/advantages-1024x203.jpg 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/advantages-300x60.jpg 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/advantages-768x152.jpg 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/08\/advantages.jpg 1652w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Serverless Infrastructure was fun to work with. No need to\nmanually set up a server, secure it, etc. Everything is done for you, all you\nneed is your code, which scales over 10.000+ parallel instances without issues.\nFunction calls themselves don\u2019t cost that much either. IBMs base rate is\ncurrently $0,000017 per second of execution, per GB of memory allocated. 10.000.000\nExecutions per month with 512MB action memory and average execution time of\n1.000ms only cost $78,20 per month, including the 400,000 GB-s free tier.\nAnother good feature was being able to upload zip packages and docker images. <\/p>\n\n\n\n<p>Although those could only be uploaded using the CLI. As a\nWindows user it\u2019s a bit of a hassle. But one day I\u2019ll finally set up the 2nd\nboot image on my desktop pc. One day. Afterwards, no need for my VM anymore.<\/p>\n\n\n\n<p>The current code size limit for IBM Cloud Functions is <a href=\"https:\/\/cloud.ibm.com\/docs\/openwhisk?topic=cloud-functions-limits#limits_actions\">48 MB<\/a>. While this seems plenty, any modules you used to write your code, not included by default in IBMs runtime, needs to be packed with your source code. OpenCV was the module I used before switching over to Pillow and numpy, since OpenCV offers a bilateral filter, which would have been a better option than a median filter on the color image creation of the Cartoon filter. Sadly it is 125 MB large. Still 45 MB packed. Which was, according to the real limit of 36 MB after factoring in the base64 encoding of the binary files, sadly still too much. Neither would the 550 MB VGG16 model I initially wanted to use for an artistic style transfer neural network as possible filter option. I didn\u2019t like the in- and output being limited to jsons either. Initially, before using the GitHub Page, the idea was to have a second Cloud Function return the website. This was sadly not possible. There being only a limited selection of predefined runtimes and modules are also more of a negative point. One could always pack their code with modules in a docker imag\/zip, but being able to just upload a requirements.txt and the cloud automatically downloading those modules as an option would have been way more convenient. My current solution returns a base64 encoded image. Currently, if someone tries to upscale a large image and the result exceeds 5 MB, it returns an error, saying \u201eThe action produced a response that exceeded the allowed length: &#8211;size in bytes&#8211; &gt; 5242880 bytes.\u201c<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s the Issue?<\/h2>\n\n\n\n<p>Currently, due to Github\nPages not setting Cross Origin Resource Sharing (CORS) Headers, this does not work currently. CORS is a\nmechanism that allows web applications to request resources from a different\norigin than its own. A workaround my instructor suggested was creating a simple\nnode.js server, which adds the missing CORS Headers. This resulted in just GET\nrequests being logged in the Cloud API summary, which it responded to with a Code\n500 Internal Server Error. After reading up on it, finding out it needs to be\nset by the server, trying to troubleshoot this for&#8230; what felt like ages,\nadding headers to the ajax jquery call, enabling cross origin on it, trying to\nworkaround by setting the dataType as jsonp. Even uploading Cloud Function and\nAPI again. Creating a test function, binding it to the API (Which worked by the\nway. Both as POST and GET. No CORS errors whatsoever&#8230; till I replaced the\ncode). I\u2019m still pretty happy it works with this little workaround now, thank\nyou again for the suggestion!<\/p>\n\n\n\n<p>Other than that, I spent more\ntime than I\u2019m willing to admit trying to find out why I couldn\u2019t upload my\nprevious OpenCV code solution. Rewriting my function as a result was also a\nrather interesting experience. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Future Improvements?<\/h2>\n\n\n\n<p>I could give the user more options for the Cartoon Filter.\nthe adaptive Threshold has a threshold limit, this one could easily be managed\nby the user. An option to change the window size could also be added, maybe in\nsteps?<\/p>\n\n\n\n<p>I could always add new filters as well. I like the resulting\nimage of edge detection using a Sobel operator. I thought about adding one of\nthose.<\/p>\n\n\n\n<p>Finding a way to host a website\/find a provider that adds\nCORS Header, allowing interested people to try a live-demo and play around with\nit, would be an option as well.<\/p>\n\n\n\n<p>What i\u2019d really like to see would be the artistic style\ntransfer uploaded. I might be able to create it using IBM Watson, then add it as\nsequence to my service. I dropped this idea previously because i had no time\nleft to spare trying to get it to work.<\/p>\n\n\n\n<p>Another option would be allowing users to upload files,\ninstead of just providing links. Similar to this, I can also include a storage\nbucket, linked to my function in which the transformed image is saved. It then\nreturns the link. This would solve the max 5 MB response size issue as well.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Cloud Functions are really versatile, there\u2019s a lot one can\ndo with them. I enjoyed working with them and will definitely make use of them\nin future projects. The difference in execution time between my CPU and the CPUs\nin the Cloud Environment was already noticeable for the little code I had. Also\nbeing able to just call the function from wherever is pretty neat. I could create\na cross-platform application, which saves, deletes and accesses data in an IBM\nCloudant database using Cloud Functions.<\/p>\n\n\n\n<p>Having no idea about Cloud Environments in general a\nsemester ago, I can say I learned a lot and it definitely opened an\ninteresting, yet very complex world I would like to learn more about in the\nfuture.<\/p>\n\n\n\n<p>And at last, all Code used is provided in my <a href=\"https:\/\/github.com\/t-brandl\/t-brandl.github.io\">GitHub repository.<\/a> If you are interested, feel free to drop by and check it out. Instructions on how to set everything up are included.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction As part of the lecture \u201eSoftware Development for Cloud Computing\u201c, we had to come up with an idea for a cloud related project we\u2019d like to work on. I had just heard about Artistic Style Transfer using Deep Neural Networks in our \u201eArtificial Intelligence\u201c lecture, which inspired me to choose image transformation as my [&hellip;]<\/p>\n","protected":false},"author":929,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[652,120],"tags":[46,7,129,285,202],"ppma_author":[796],"class_list":["post-8568","post","type-post","status-publish","format-standard","hentry","category-artificial-intelligence","category-cloud-technologies","tag-bluemix","tag-cloud","tag-ibm-bluemix","tag-python","tag-serverless"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":926,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/07\/26\/socialcloud-configure-all-the-things-part-6\/","url_meta":{"origin":8568,"position":0},"title":"SocialCloud &#8211; Configure all the things! &#8211; Part 6","author":"ew033","date":"26. July 2016","format":false,"excerpt":"One of the requirements of the system is that organizations should be able to set up and deploy the HumHub system on their own. For this purpose, we have designed the Configtool. To meet this requirement we have to use different tools, procedures and interfaces from Bluemix. In the following\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/socialCloud.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/socialCloud.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/socialCloud.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/socialCloud.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/07\/socialCloud.jpg?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":2360,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2017\/06\/11\/analyzing-text-with-ibm-watson-services-on-bluemix\/","url_meta":{"origin":8568,"position":1},"title":"Analyzing text with IBM Watson services on Bluemix","author":"Patrick Kleindienst","date":"11. June 2017","format":false,"excerpt":"You might have already heard of IBM's artificial intelligence \"Watson\", which beat two former champions of the american television game show \"Jeopardy!\" back in 2011. What you probably don't know is that today lots of predefined Watson services are publicy available on IBM's cloud platform \"Bluemix\". These services cover different\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/06\/postman-watson-result.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/06\/postman-watson-result.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/06\/postman-watson-result.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/06\/postman-watson-result.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":2157,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2017\/03\/09\/of-apache-spark-hadoop-vagrant-virtualbox-and-ibm-bluemix-services-part-4-big-data-engineering\/","url_meta":{"origin":8568,"position":2},"title":"Of Apache Spark, Hadoop, Vagrant, VirtualBox and IBM Bluemix Services &#8211; Part 4 &#8211; Big Data Engineering","author":"bh051, cz022, ds168","date":"9. March 2017","format":false,"excerpt":"Our objective in this project was to build an environment that could be practical. So we set up a virtual Hadoop test cluster with virtual machines. Our production environment was a Hadoop Cluster in the IBM Bluemix cloud which we could use for free with our student accounts. We developed\u2026","rel":"","context":"In &quot;Student Projects&quot;","block_context":{"text":"Student Projects","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/student-projects\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/03\/dev-env-spark-768x512.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/03\/dev-env-spark-768x512.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/03\/dev-env-spark-768x512.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":899,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/07\/23\/socialcloud-you-got-cloudified-part-3\/","url_meta":{"origin":8568,"position":3},"title":"SocialCloud \u2013 You got cloudified \u2013 Part 3","author":"ag","date":"23. July 2016","format":false,"excerpt":"At the beginning of our project we had little experience in \u201cthat cloud thing everyone is talking about\u201d. Just like Gary Klinman from Hewlett Packard pointed out, we already knew that it is possible to \u201cback things up to the cloud\u201d, but in our imagination \u201cthe cloud\u201d seemed more like\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/200.gif?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2651,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2017\/08\/28\/how-we-integrated-ibm-watson-services-into-a-telegram-chat-bot\/","url_meta":{"origin":8568,"position":4},"title":"How we integrated IBM Watson services into a Telegram chat bot","author":"Adrian Steinert, Oliver Speck, Megan Klaiber","date":"28. August 2017","format":false,"excerpt":"Introduction IBMs artificial intelligence \u2018Watson\u2019 on the IBM Bluemix platform offers a wide range of cognitive services like image and audio analysis among other things. During our semester project in the lecture \u2018Software Development for Cloud Computing\u2019 we integrated useful Watson services into a Telegram chat bot to provide a\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/08\/12-factor.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/08\/12-factor.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/08\/12-factor.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":4395,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/01\/17\/radcup-a-socialmedia-beerpong-app\/","url_meta":{"origin":8568,"position":5},"title":"Radcup &#8211; a socialmedia beerpong App","author":"Immanuel Haag","date":"17. January 2019","format":false,"excerpt":"Written by: Immanuel Haag, Christian M\u00fcller, Marc R\u00fcttler Radcup adds a bit of social media to the well-known game Beerpong. With Radcup the user has the possibility to register or login. Afterwards he can display\/localize already existing games and join them if possible or create new games. As soon as\u2026","rel":"","context":"In &quot;System Designs&quot;","block_context":{"text":"System Designs","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/01\/Screen-Shot-2019-01-06-at-15.09.35.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/01\/Screen-Shot-2019-01-06-at-15.09.35.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2019\/01\/Screen-Shot-2019-01-06-at-15.09.35.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":796,"user_id":929,"is_guest":0,"slug":"tb130","display_name":"tb130","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/d363f225e5a1b5ba6ab0a10ad1720dc2acee6164807d13b680ffff9fcc2f7b9d?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/8568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/929"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=8568"}],"version-history":[{"count":7,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/8568\/revisions"}],"predecessor-version":[{"id":8585,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/8568\/revisions\/8585"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=8568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=8568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=8568"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=8568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}