tag:blogger.com,1999:blog-226223162024-03-13T01:06:52.626-05:00Joseph Fluckiger's BlogCranking out good codeJoseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.comBlogger116125tag:blogger.com,1999:blog-22622316.post-68145359240849726812023-11-09T15:21:00.000-06:002023-11-09T15:21:57.451-06:00Github Copilot Latest Features<p> </p><p><a href="https://github.com/features/copilot">Github Copilot</a> is an AI-powered developer tool that has revolutionized the software development process. With its latest features, Copilot has become an indispensable tool for developers around the world. In this article, we will explore the new capabilities of Copilot and how it is changing the way developers work.</p><p><br /></p><p><b>Introduction</b></p><p>Github Copilot has come a long way since its inception. It started as a code completion tool, but it has evolved into much more. With the power of natural language processing and machine learning, Copilot can now assist developers in various aspects of the software development life cycle.</p><p><br /></p><p><b>The Genesis of Copilot</b></p><p>The journey of Copilot began in 2020 when a group of talented engineers got their hands on a raw version of OpenAI's GPT-3 model. They wanted to explore whether an automated pair programmer could be a reality. To their surprise, the model was able to solve 93% of the programming exercises they fed into it. This was the moment that won over even the most skeptical developers.</p><p><br /></p><p><b>The Rise of Copilot</b></p><p>Since its launch, Copilot has gained immense popularity among developers. It is now the most widely adopted AI developer tool in history, with over 1 million paid users across 190 countries. Copilot has been embraced by open source maintainers, students, teachers, and Fortune 500 companies. Its productivity gains have been unprecedented, with developers coding 55% faster.</p><p><br /></p><p><b>Introducing Copilot Chat</b></p><p>One of the most exciting features of Copilot is the introduction of Copilot Chat. With Copilot Chat, developers can now interact with Copilot using natural language. They can ask questions, seek explanations, and get suggestions right within their favorite editor. Copilot Chat is available in Visual Studio Code, Visual Studio, and now in JetBrains IDEs.</p><p><br /></p><p><b>Copilot Chat on Mobile</b></p><p>Github is taking Copilot Chat to the next level by bringing it to mobile devices. With Copilot Chat on your iOS or Android device, you can get answers to programming questions, access your repositories, and interact with Copilot on the go. Whether you're waiting in line at a coffee shop or procrastinating in bed, Copilot Chat is there to assist you.</p><p><br /></p><p><b>Co-pilot Enterprise</b></p><p>Github is also introducing Copilot Enterprise, a new product that brings the power of Copilot to organizations. With Copilot Enterprise, companies can customize Copilot to their specific codebase and coding conventions. This allows developers to have an expert on their organization's codebase at their fingertips, making development faster and more efficient.</p><p><br /></p><p><b>Code Scanning Autofix</b></p><p>Github is taking code scanning to the next level with the introduction of code scanning autofix. This feature automatically suggests fixes for security vulnerabilities found in your code. With the power of AI, Copilot can analyze your code and provide the necessary changes to fix the vulnerabilities. This ensures that your code is secure and compliant with best practices.</p><p><br /></p><p><b>AI-Powered Secret Scanning</b></p><p>Github is also introducing AI-powered secret scanning, a tool that helps you find secrets in your code that don't have patterns. This tool scans your code for passwords and other sensitive information that may be stored in source control. By identifying and removing these secrets, you can prevent potential security breaches.</p><p><br /></p><p><b>Conclusion</b></p><p>Github Copilot has transformed the way developers work. With its latest features, Copilot has become an essential tool for developers around the world. From code completion to code scanning and beyond, Copilot is revolutionizing the software development process. With Copilot, developers can code faster, write better code, and collaborate more effectively. The future of software development is here, and it's powered by AI.</p><p><br /></p><p><b>FAQs</b></p><p>How does Copilot improve developer productivity?</p><p>Copilot improves developer productivity by providing code suggestions, explanations, and fixes right within the developer's favorite editor. It saves time by automating repetitive tasks and providing accurate and efficient solutions to coding problems.</p><p><br /></p><p>Can Copilot be customized to fit an organization's coding conventions?</p><p>Yes, with Copilot Enterprise, organizations can customize Copilot to their specific codebase and coding conventions. This ensures that Copilot understands the organization's unique coding style and can provide accurate suggestions and solutions.</p><p><br /></p><p>Is Copilot available for mobile devices?</p><p>Yes, Copilot Chat is available on iOS and Android devices. Developers can access Copilot's features and interact with it using natural language on their mobile devices.</p><p><br /></p><p>How does Copilot ensure code security?</p><p>Copilot helps ensure code security by providing code scanning autofix, which automatically suggests fixes for security vulnerabilities found in the code. It also offers AI-powered secret scanning to identify and remove sensitive information from the codebase.</p><p><br /></p><p>Can Copilot be integrated with other tools and services?</p><p>Yes, Copilot can be integrated with other tools and services using APIs. Developers can extend Copilot's capabilities and integrate it with their existing workflows to enhance productivity and collaboration.</p><p><br /></p><p><br /></p>Joseph Fluckigerhttp://www.blogger.com/profile/05994810276665721883noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-44758580496648347812023-11-01T10:57:00.010-05:002023-11-09T15:48:52.327-06:00How to Create and Run Tableau Bridge on Linux Containers<p><span style="background-color: white; color: #334155; font-family: arial; font-size: 14px;">Tableau Bridge is <a href="https://www.tableau.com/support/releases/bridge">now availble</a> on Linux Containers. Yay! Now what does this mean and how do I build and run Linux Containers?</span></p><p><span style="background-color: white; color: #334155; font-family: arial; font-size: 14px;">We will discuss the advantages of running Bridge on Linux Containers the steps to build them, and finally, we will provide some automation script ideas for monitoring and scaling Linux Bridge agents.</span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;"><b>Tableau Bridge Today</b></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;">Until recently, Tableau Bridge was only available as a Windows application running on a Windows VM. It supported only one bridge agent per Virtual or Physical Machine.</span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><br /></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;"><b>Advantages of Bridge in Containers</b></span></p><ol style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; list-style-image: initial; list-style-position: initial; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse))); padding: 0px 0px 0px 1.57143em;"><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;">Better Hardware Utilization: Linux containers are more efficient than Windows VMs, requiring only about 1/50th of the disk space.</span></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;">Ability to Spin Up Multiple Bridge Agents: With Linux Containers, it becomes easier to spin up multiple bridge agents on a single machine, improving scalability and resource utilization.</span></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;">Infrastructure Automation: Linux Containers enable easier automation of provisioning bridge agents and upgrading Tableau Bridge, the operating system, and database drivers.</span></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;">Scaling Automation: Linux Containers allow for the automated scaling of bridge agents, spinning up additional agents as needed and scaling down when the demand decreases.</span></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;">Container Orchestration Compatibility: Linux Containers can be executed inside Kubernetes, providing container orchestration capabilities for Tableau Bridge.</span></li></ol><span style="font-family: arial;"><span style="background-color: white; color: #334155; font-size: 14px;">Additional addvantages are found in this presentation from </span><a href="https://docs.google.com/presentation/d/12BiVU-aoTAwIanxJv7fzycmUbG67rIr2lTE3XVhxJz8/edit#slide=id.g2608f862060_0_0" style="background-color: white; font-size: 14px;">Tableau Data Dev Days 2023</a><span style="background-color: white; color: #334155; font-size: 14px;">.</span></span><br /><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="color: #334155; font-family: arial; font-size: 14px;"><b><br /></b></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="color: #334155; font-family: arial; font-size: 14px;"><b>High-Level Steps to Build a Tableau Bridge on Linux Container</b></span></p><ol style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; list-style-image: initial; list-style-position: initial; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse))); padding: 0px 0px 0px 1.57143em;"><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;">Collect the required information: tableau cloud site_name, pool_id, user email, and PAT token.</span></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;"><a href="https://www.tableau.com/support/releases/bridge">Download</a> the Bridge Linux .rpm installer file.</span></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;">Download the required database drivers from the vendor websites.</span></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;">Define a Dockerfile and create a Bridge container image.</span></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: 0.285714em; margin-top: 0.285714em; padding-left: 0.428571em;"><span style="font-family: arial;">Run the Bridge container with the collected information.</span></li></ol><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;"><b><br /></b></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;"><b>Step by Step Instructions</b></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="color: #334155; font-family: arial; font-size: 14px;">You can also refer to this github repository </span><span style="background-color: transparent; font-size: 14px;"><span style="color: #334155; font-family: arial;"><a href="https://github.com/josephflu/datadevdays23">https://github.com/josephflu/datadevdays23</a> for code examples of how to build bridge on Linux containers. Please see the README for explanation of contents.</span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="color: #334155; font-family: arial; font-size: 14px;">See also the </span><a href="https://help.tableau.com/current/online/en-us/to_bridge_linux_install.htm" style="font-family: arial; font-size: 14px;">official Tableau documentation</a><span style="color: #334155; font-family: arial; font-size: 14px;"> for how to build a Tableau Bridge Linux container.</span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;"><b><br /></b></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;"><b>Automation Scripts</b></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;">There are several ways you may want to automate your Bridge agents with scripts to</span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"></p><ul style="text-align: left;"><li><span style="color: #334155; font-family: arial; font-size: 14px;">Build your bridge container</span></li><li><span style="color: #334155; font-family: arial;"><span style="font-size: 14px;">Scale run and scale up or down the number of running bridge Agents</span></span></li><li><span style="color: #334155; font-family: arial; font-size: 14px;">Monitoring bridge status and health</span></li><li><span style="color: #334155; font-family: arial;"><span style="font-size: 14px;">Collect Tableau Cloud Metadata required to start up bridge agents</span></span></li></ul><p></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;">Some of these <a href="https://github.com/josephflu/datadevdays23/tree/dev#readme">automation script examples</a> are demonstrated in the github repo.</span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><b style="font-family: arial;">Conclusion</b></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><span style="font-family: arial;">The future of Tableau Bridge lies in running on Linux Containers, offering better hardware utilization, scalability, and automation capabilities. By following the steps provided, you can build a Tableau Bridge on a Linux Container and leverage better automation for monitoring and scaling Bridge agents.</span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-family: "Noto Sans", ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));"><br /></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-space-y-reverse: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border: 0px solid rgb(226, 232, 240); box-sizing: border-box; color: #334155; font-family: "Noto Sans", ui-sans-serif, system-ui, -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 14px; margin-bottom: calc(1rem*var(--tw-space-y-reverse)); margin-left: 0px; margin-right: 0px; margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));">written by <a href="https://www.linkedin.com/in/josephflu/">Joseph Fluckiger</a></p>Joseph Fluckigerhttp://www.blogger.com/profile/05994810276665721883noreply@blogger.com1tag:blogger.com,1999:blog-22622316.post-12945362852388144012023-10-22T15:21:00.003-05:002023-10-22T15:47:17.186-05:00Unlimited Memory to GPT, A Big Step to AGI?<p>Imagine talking to someone who forgets half of what you said a minute ago. Frustrating, right? This is the challenge many artificial intelligence models face today.</p><p>Artificial Intelligence and LLMs have made significant advancements in 2023, but one significant limitation is the Context window size limits. Context window is analogous to short term memory. When you ask a question to an LLM, it can only remember so much about the context of your question. A recent research paper introduces memGPT, which aims to provide AI with unlimited short term memory.</p><p><br /></p><p><b>The Challenge of Limited Memory in AI</b></p><p>AI models have a fixed context window that restricts the amount of information they can process. While improvements have been made, these models still have limitations. MemGPT proposes a system inspired by the memory hierarchy in traditional operating systems.</p><p><br /></p><p><b>Introducing memGPT: Towards LLMs as Operating Systems</b></p><p>MemGPT effectively manages its own memory through function calls, allowing the AI model to make more effective use of its context. MemGPT introduces a memory hierarchy consisting of three components: the main context, the external context, and the llm processor. It autonomously manages memory through function calls.</p><p><b>Applications of memGPT</b></p><p>MemGPT has implications for long-term chat and document analysis. It can retain and recall past conversations and analyze extensive documents without being constrained by the context window.</p><p><br /></p><p><b>Advantages and Limitations of memGPT</b></p><p>MemGPT provides an illusion of infinite context but consumes a portion of the token budget for system instructions. It currently relies on GPT 4, which may limit its scalability.</p><p><br /></p><p><b>Conclusion</b></p><p>MemGPT is a significant step towards addressing the AI memory problem. It enables AI models to have unlimited memory and shows promise for enhancing long-term chat and document analysis. As we continue to refine and optimize these models, the possibilities appear limitless.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhrx8pEoNqz0mmx3msI-xgc6BoBplhtxphYyK5RyIQOW02C0ebm0MJF-6wzEI1B19SIIzyECoT8hFHjL82wh9zkGb5YTcmgAVKb5EML6RNoj746koN4w5PokWZ3GkH8aTUlV8trPCRwVu3tBBaxxdlpZrHHTMt78vVK-uB1003CelKyfATZDbZ4kw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1086" data-original-width="2204" height="291" src="https://blogger.googleusercontent.com/img/a/AVvXsEhrx8pEoNqz0mmx3msI-xgc6BoBplhtxphYyK5RyIQOW02C0ebm0MJF-6wzEI1B19SIIzyECoT8hFHjL82wh9zkGb5YTcmgAVKb5EML6RNoj746koN4w5PokWZ3GkH8aTUlV8trPCRwVu3tBBaxxdlpZrHHTMt78vVK-uB1003CelKyfATZDbZ4kw=w590-h291" width="590" /></a></div><br /><br /><p></p><p><b>Frequently Asked Questions</b></p><p>How does memGPT overcome the limited memory problem in AI?</p><p></p><ul style="text-align: left;"><li>It introduces a memory hierarchy and management system.</li></ul><p></p><p>What are memGPT's advantages in long-term chat?</p><p></p><ul style="text-align: left;"><li>It can retain and recall past conversations, ensuring conversational consistency.</li></ul><p></p><p>How does memGPT improve document analysis?</p><p></p><ul style="text-align: left;"><li>It allows for comprehensive analysis with its unlimited memory.</li></ul><p></p><p>What are memGPT's limitations?</p><p></p><ul style="text-align: left;"><li>It consumes tokens for system instructions and relies on specific AI models.</li></ul><p></p><p>What are memGPT's future plans?</p><p></p><ul style="text-align: left;"><li>Support for more user workflows and reducing reliance on specific AI models.</li></ul><div><br /></div><div><br /></div><div><b>References</b></div><div>Most of the material for the blog post came from the below referenced youtube video. Chat GPT 4 was also used to help highlight the main principles and organize this blog post.</div><div><ul style="text-align: left;"><li>Matt Berman, "MemGPT, Giving AI Unlimited Prompt Size (Big Step Towards AGI?)", <a href="https://www.youtube.com/watch?v=QQ2QOPWZKVc">https://www.youtube.com/watch?v=QQ2QOPWZKVc</a>, Oct 20, 2023</li><li>Charles Packer, Vivian Fang, Shishir G. Patil, Kevin Lin, Sarah Wooders, Joseph E. Gonzalez, "MemGPT Towards LLMs as Operating Systems", UC Berkeley, Oct 2023, <a href="https://memgpt.ai">https://memgpt.ai</a></li></ul></div><div><br /></div><div><br /></div><p></p>Joseph Fluckigerhttp://www.blogger.com/profile/05994810276665721883noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-56204479512834184522023-10-01T17:59:00.006-05:002023-10-08T17:32:11.617-05:00Python Meets Excel: A New Era of Data Analysis<p>I've used Excel for over 20 years. I've used Excel for everything from personal finance, to data center capacity planning. I even wrote a reporting program based off of Excel which used Excel formulas to render data and images! The application was TraceFinder and was used in the 2016 Olympics in which our ThermoFisher Analytical Chemestry instruments and reporting software were use to ensure that Usain Bolt and Michael Phelps and the rest of the Olympic athletes were drug free during the competition. This was an awesome application made possible by the power of Excel. But Excel formulas are a pain to write, and nowhere near as powerful as a fully turing complete language like Python which is the workhorse of DataScience. </p><p><br /></p><p>If you've used Microsoft Excel, you're among the 750 million people across the globe who rely on this powerhouse productivity app. The recent integration of Python into Excel, announced by Microsoft, is an exciting development that is poised to elevate Excel's capabilities.</p><p><b>The Power of Python in Excel</b></p><p>By integrating Python, Excel has opened its doors to true programming capabilities. Users can now leverage Python for a myriad of tasks like advanced data visualization, machine learning, data segmentation, and even building basic apps right within Excel. What's more intriguing is the prospect of embedding AI features directly in Excel. Imagine leveraging AI agents from platforms like Langchain, OpenAI, and Llama Index, making it easier for users to perform detailed research, analytics, or even create investor and client profiles. Such capabilities could transform everyday tasks into efficient, automated processes.</p><p>However, there are caveats. As of now, Python's use in Excel is restricted to specific libraries. More notably, security restrictions prevent Excel from supporting requests, limiting the potential of integrating real-time AI functionalities. But this is just the beginning, and we eagerly await the new frontiers Excel and AI will unlock together.</p><p><b><br /></b></p><p><b>Exploring AI Integrations with Excel</b></p><p>Several teams and platforms are already innovating with AI's potential in Excel. Let's delve into a couple of them: Relevance.AI: This no-code platform empowers users to design AI automations and agents. Their feature, 'Data', lets you power AI workflows using spreadsheets. Users can, for instance, set up AI-driven sales outreach pipelines, transform videos into blog articles, and even establish document extraction systems.</p><p>IQ: Positioned as an AI assistant, IQ is crafted to glean insights from data. Users can pull in data from various sources, and IQ will autonomously churn out detailed insights reports. This assistant helps in understanding intricate data patterns, making data-driven decisions more accessible than ever.</p><p>The above are just glimpses of how AI can metamorphose the Excel experience. As more players enter this arena, we're bound to witness more groundbreaking workflows and applications.</p><p><br /></p><p><b>In Conclusion</b></p><p>The convergence of Python and AI within Excel heralds a new era in productivity and data analysis. While current restrictions might curtail certain capabilities, the horizon looks promising with endless possibilities. The amalgamation of Excel and AI can potentially redefine our approach to data, making automation, analysis, and personalization more streamlined than ever.</p><p><br /></p><p><b>Frequently Asked Questions</b></p><p></p><ul style="text-align: left;"><li>What about the limitations of libraries in Python for Excel?</li></ul><p></p><p>Yes, there are limitations. Python in Excel supports only certain libraries. It's essential to stay updated with future releases to exploit full potential.</p><p></p><ul style="text-align: left;"><li>Is it possible to integrate AI platforms like LangChain and OpenAI directly into Excel?</li></ul><p></p><p>No it is not. Not all AI platforms and libraries are supported currently. Check for library compatibility when considering integrations.</p><p></p><ul style="text-align: left;"><li>How can businesses benefit from AI in Excel?</li></ul><p></p><p>AI in Excel can supercharge automation, improve data visualization, support decisions, and introduce tailored workflows, transforming the way businesses operate.</p><p></p><ul style="text-align: left;"><li>Any other AI-driven data tools similar to IQ?</li></ul><p></p><p>Definitely! Tools like Tableau, Power BI, and Looker are great examples of platforms that blend AI with data visualization to offer actionable insights.</p><p><br /></p><p><b>References and Acknowledgements<br /></b>Microsoft announces <a href="https://techcommunity.microsoft.com/t5/excel-blog/announcing-python-in-excel-combining-the-power-of-python-and-the/ba-p/3893439">Python support in Excel</a></p><p>Much of the material for this blog post comes from the youtube video by Jason AI. I highly recommend his content on the latest AI tools, with excellent explainations of how to implement those tools. <a href="https://www.youtube.com/watch?v=dGewWqBNBO0&ab_channel=AIJason">https://www.youtube.com/watch?v=dGewWqBNBO0&ab_channel=AIJason</a></p><p>Note that AI Tools were used to create an outline, revise wording and correct grammer of this article.</p><p><br /></p><p><br /></p><p><br /></p>Joseph Fluckigerhttp://www.blogger.com/profile/05994810276665721883noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-1607698423116932472023-09-23T23:57:00.009-05:002023-09-24T00:11:15.229-05:00AI Agents: The future of work?<span style="color: #cccccc;"><br />In my daily software development I have begun to use AI Tools like Chat GPT and Microsoft Copilot to become a more productive software developer. I would say I've gotten a 1.2 - 10x productivity gain by using these tools depending on the task. Also in some tasks these tools are a distraction and reduce my productivity, but overall there is a significant improvement in productiivty and also in the joy and fun I feel when writing code. So this got me thinking: How far can we take this? If Chat GPT can write specific snipits of code for me, can it also perform all my other tasks that me and my team perform on a daily basis to produce working software? In the future I will just be managing a team of AI Agents? Below is what I found, and it seems that this future is closer than you might think.<br /><br />In today's tech landscape, AI agents have emerged as revolutionary tools, akin to AI professionals capable of executing complex tasks autonomously. Key components of AI agents include their profile, memory, planning ability, and aptitude for using diverse tools and APIs.<br /><br />I'm very optimistic that in the next 6 to 12 months, we will see people and companies hiring AI agents as part of their workforce. You might get specialized AI agents for different types of tasks like designers, developers, product management, marketing, and more.<br /><br />So, how do multiple AI agents collaborate on intricate tasks? Projects such as ChatDev have delved into this. Picture a scenario where a Python coder converses with a stock trader to craft a trading bot. Another instance is Adrianverse, simulating environments like a classroom or the classic prisoner's dilemma. But the standout projects are Meta GPT and ChatDev – they enable creation of AI agent teams for intricate projects.<br /><br />I dove deeper into ChatDev and saw that it offers intriguing customization. Users can designate roles for agents, ranging from bosses to QA, set task stages, and combine various stages. A striking outcome is its ability to produce software like Flappy Bird or an image editor. But it's not just restricted to software. For content creators, ChatDev can automate the entire content creation process.<br /><br />Setting up ChatDev is straightforward. After cloning their GitHub repo, setting up Python, and installing dependencies, users must enter their OpenAI API key. Then, tasks can be assigned to the ChatDev team. The software will generate conversations between agents and even provide cost summaries.<br /><br />Furthermore, ChatDev allows customizing AI agent teams. As an example, users can establish an AI marketing agency. Through simple configurations, you can design the entire workflow, from brainstorming campaign ideas to generating actual content.<br /><br /><b><br /></b></span><div><span style="color: #cccccc;"><b>Conclusion</b><br /><br />In conclusion, the future of work may involve managing a team of AI bots. With the advancements in AI technology, autonomous AI agents are becoming more capable of performing complex tasks autonomously. Projects like Camel, Adrianverse, Meta GPT, and ChatDev are exploring the possibilities of multi-agent systems and how different agents can work together to complete complex projects.<br /><br />ChatDev, in particular, provides a framework for creating teams of AI agents with different specialties and orchestrating them to complete tasks. It allows for customization and flexibility, making it suitable for various use cases, from software development teams to content operation teams. By defining roles, faces, and chat chains, users can create their own AI agent teams and set up standard procedures for completing tasks.<br /><br />Overall, the future of work may involve a combination of human and AI collaboration, with AI agents playing a significant role in completing tasks and projects. As AI technology continues to advance, it is important to explore and understand the capabilities and limitations of AI agents to harness their full potential in the workforce.<br /><br /><b><br /></b></span></div><div><span style="color: #cccccc;"><b>FAQs</b><br /><br />1. Can AI agents completely replace human workers? <br /><br />No, AI agents are designed to assist and augment human workers, not replace them entirely. While AI agents can perform certain tasks autonomously, they still require human oversight and intervention in complex decision-making processes.<br /><br />2. How can AI agents be trained to perform specific tasks?<br /><br />AI agents can be trained using machine learning techniques, such as supervised learning or reinforcement learning. By providing labeled data or rewards and punishments, AI agents can learn to perform specific tasks and improve their performance over time.<br /><br />3. What are the benefits of using AI agents in the workforce?<br /><br />Using AI agents in the workforce can lead to increased productivity, efficiency, and accuracy. AI agents can automate repetitive tasks, handle large amounts of data, and make data-driven decisions, allowing human workers to focus on more complex and creative tasks.<br /><br />4. Are there any ethical considerations when using AI agents in the workforce?<br /><br />Yes, there are ethical considerations when using AI agents in the workforce. It is important to ensure that AI agents are trained on unbiased and diverse data to avoid perpetuating existing biases. Additionally, transparency and accountability in AI decision-making processes are crucial to address concerns about fairness and accountability.<br /><br />5. How can businesses integrate AI agents into their existing workflows?<br /><br />Businesses can integrate AI agents into their existing workflows by identifying tasks that can be automated or augmented by AI agents. They can then develop or adopt AI agent frameworks, like ChatDev, and customize them to fit their specific needs. It is important to provide proper training and support to employees to ensure a smooth transition to working with AI agents.<br /><br /><b><br /></b></span></div><div><span style="color: #cccccc;"><b>Acknowledgements</b><br /><br />Most of the content for this blog post came from this video by AI Jason. Build AI Agent Workforce. I highly recommend his content on the latest AI tools and developments.<br /><br /><br />Chat GPT was used during the editing of this blog post and in various iterations to summarize the main points of this blog post, along with my own writing on what I felt were the key points of the video. <br /><br /><br />Relevance.AI is a tool that I used to extract a summary of key ideas and blog post topics from the youtube video, which I used as a starting point for my blog post and some sentences were deleted, some were modified, and some were used verbatim.<br /><br /><br /><br /><br /><br /></span><br /></div>Joseph Fluckigerhttp://www.blogger.com/profile/05994810276665721883noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-80007788589398158262021-04-25T09:36:00.003-05:002021-04-25T09:36:55.361-05:00How to Develop an Etherium DApp<p> </p><span id="docs-internal-guid-69f5ea01-7fff-1da7-c9fe-9f9548ee9ac7"><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">What is a DApp? DApps are applications built on a decentralized network that combine backend code (smart contracts) with a frontend user.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Many DApps are now available. From gaming, to NFTs to exchanges. You can visit </span><a href="https://www.stateofthedapps.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">State of the DApps</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> or </span><a href="https://dappradar.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">DappRadar</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> to check out the list of popular and latest dapps.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">According to a Stack Overflow 2019 Developer Survey, 68% of web developers have a positive opinion on blockchain tech, with 30% seeing it as having a 'life-changing' effect.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><span style="border: none; display: inline-block; height: 416px; overflow: hidden; width: 624px;"><img height="416" src="https://lh5.googleusercontent.com/fFVC5vQSwSec2XP4LgFl1FFotfX7k7-k-MckGxM-CBVJjmYtgUmSeU9FYdEABab-5f3u9Od4XB9XPX0GdsU43hGeMYzOD-LitD7IWfq0-EbXHr872QG2dr_SzzWDvHQH-GbTLhWv" style="margin-left: 0px; margin-top: 0px;" width="624" /></span></span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">In this article you will learn:</span></p><br /><ul style="margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">How to develop, evaluate, and deploy Ethereum smart contracts on the local, test, and mainnet</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">How to change between local, test, and production web3 networks</span></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">How to interact with contracts using various front-end environments such as Angular, React, or Vue.</span></p></li></ul><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Before we dive into the workflow, there are a few considerations for your DApp.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Is there a user interface for the DApp? Unless, of course, your DApp is a fully automated operation. DApps often have a user interface (UI) feature, such as a web or mobile app, since they are often used by humans to communicate with smart contracts or the Ethereum network. If your DApp is meant to be used in a browser, you'll build your user interface in Javascript, just like a typical Single Page App.</span></p><br /><h3 dir="ltr" style="background-color: white; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; padding: 14pt 0pt 4pt 0pt;"><span style="background-color: transparent; color: #08090a; font-family: Roboto, sans-serif; font-size: 16.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">1. Setting up your Ethereum development environment</span></h3><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="http://remix.ethereum.org/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Remix</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">, formerly known as Browser-Solidity, is a browser-based Smart Contract creation environment. It includes compilers for various Solidity versions as well as a blockchain simulation. It also comes with a slew of other add-ons. It's a fantastic place to start.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">However, if you’re an advanced developer, you'll need a way to deploy your smart contracts, run tests, and debug Solidity code without having to deal with live environments while developing smart contracts. You'll also need a way to compile your Solidity code into code that can be used in a client-side programme. Later on, we'll read more about how this works. Testing should not be a last-minute decision. Debugging and checking become first-class citizens of your development workflow with these tools. Without the hassle, you can develop, test, and deploy your Smart Contracts. Use a development environment that handles the groundwork, monitors for improvements, and re-deploys the app as required.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Ethereum development environment and platform for full stack development:</span></p><ul style="margin-bottom: 0; margin-top: 0; padding-inline-start: 48px;"><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://www.trufflesuite.com/ganache" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Ganache</span></a></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://framework.embarklabs.io/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Embark</span></a></p></li><li aria-level="1" dir="ltr" style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;"><p dir="ltr" role="presentation" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://hardhat.org/" style="text-decoration-line: none;"><span style="color: #1155cc; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Hardhat </span></a></p></li></ul><br /><h3 dir="ltr" style="background-color: white; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; padding: 14pt 0pt 4pt 0pt;"><span style="background-color: transparent; color: #08090a; font-family: Roboto, sans-serif; font-size: 16.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">2. Use Ethereum Web Client Libraries</span></h3><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">We'll need a way to communicate with the smart contracts that have already been set up. We'll need a way to read data and submit new transactions as well.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://docs.ethers.io/v5/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">ethers.js</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> is a client-side JavaScript library that aims to be a full and compact library for communicating with the Ethereum Blockchain and its ecosystem from client-side JavaScript applications like React, Vue, Angular, or Svelte. It is this library that we will use.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://web3js.readthedocs.io/en/v1.3.0/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Web3.js</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> exposes a collection of libraries to communicate with Ethereum nodes locally or remotely via a Javascript API. The JSON-RPC protocol is used to communicate with the API over an HTTP or IPC link. For retrieving Ethereum user accounts, purchases, and smart contracts, the Web3 JavaScript library is commonly used.</span></p><br /><br /><br /><h3 dir="ltr" style="background-color: white; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; padding: 14pt 0pt 4pt 0pt;"><span style="background-color: transparent; color: #08090a; font-family: Roboto, sans-serif; font-size: 16.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">3. Metamask</span></h3><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://metamask.io/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Metamask</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> helps to handle account management and connecting the current user to the blockchain. MetaMask enables users to manage their accounts and keys in a few different ways while isolating them from the site context. MetaMask provides a key vault, secure login, token wallet, and token exchange as a browser extension and a mobile app, giving you everything you need to handle your digital assets.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Once a user has connected their MetaMask wallet, you as a developer can interact with the globally available Ethereum API (window.ethereum) that identifies the users of web3-compatible browsers (like MetaMask users), and whenever you request a transaction signature, MetaMask will prompt the user in as comprehensible a way as possible.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">If you want to support multiple wallets in addition to MetaMask, check out </span><a href="https://github.com/Web3Modal/web3modal" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Web3Modal </span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">which makes it easy to implement support for multiple providers in your app with a fairly simple and customizable configuration.</span></p><br /><h3 dir="ltr" style="background-color: white; line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; padding: 14pt 0pt 4pt 0pt;"><span style="background-color: transparent; color: #08090a; font-family: Roboto, sans-serif; font-size: 16.5pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">4. Connect with decentralized APIs</span></h3><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">For most apps built on blockchains like Ethereum, it's hard and time-intensive to read data directly from the chain, so you used to see people and companies building their own centralized indexing server and serving API requests from these servers. This requires a lot of engineering and hardware resources and breaks the security properties required for decentralization.</span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://thegraph.com/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">The Graph</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"> is an indexing protocol for querying blockchain data that enables the creation of fully decentralized applications and solves this problem, exposing a rich GraphQL query layer that apps can consume. In this guide we won't be building a subgraph for our app but will do so in a future tutorial.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><a href="https://api3.org/" style="text-decoration-line: none;"><span style="color: #1155cc; font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">API3</span></a><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">’s decentrally governed and quantifiably stable data feeds enable you to build powerful decentralised applications. API3 data feeds, also known as dAPIs, collect data from first-party oracles and are provided by some of the world's most reputable API providers.</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;">Conclusion</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;">Solidity, despite its novelty, has gained widespread adoption and is used to compile the byte-code in many of today's Ethereum smart contracts. Blockchain is both innovative and complex, making it difficult to understand. You should not, however, be afraid to learn the fundamentals. This blog will provide you with tips to help you in your blockchain coding journey.</span></p><br /><br /></span>Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-47165499884667917032020-03-24T07:09:00.000-05:002020-04-12T20:44:24.424-05:00How to beat Coronavirus with a mobile app that will show who is healthy<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<span style="font-family: "verdana" , sans-serif;">What technology could we use to beat Coronavirus? What can we learn from the mobile app that Singapore built to beat coronavirus by targeting those with the disease rather than shutting down their whole economy with shelter-at-home orders? How will people have the confidence to go into public spaces now and two years from now without being exposed to life threatening contagious diseases? </span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span><span style="font-family: "verdana" , sans-serif;">Most people are healthy most of the time, but only a few are contagious. The "Am I Healthy?" mobile app provides a way to determine who is healthy and for public places to efficiently gate entry to only healthy persons. This would prevent sickness while also allowing the economy to thrive.</span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span><span style="font-family: "verdana" , sans-serif;">Restaurants, airlines, sports arenas, trains, music and sports events, etc, currently face a problem of customer confidence. Customers will not return until they can have some assurance that they are not at risk when entering these spaces. I propose that users would show their "Am I healthy?" app on their mobile device displaying "Certified Healthy" before entering a shared physical location.</span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span><span style="font-family: "verdana" , sans-serif;">The app would combine several points of data to determine risk of being contagious: survey of questions, temperature, breathing sounds, laboratory test results, location history, etc. </span><br />
<br />
<span style="font-family: "verdana" , sans-serif;"></span><span style="font-family: "verdana" , sans-serif;"><br /></span>
<br />
<h3 style="text-align: center;">
<span style="font-family: "verdana" , sans-serif;"><b>Am I Healthy?</b> Mobile app mockup</span></h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDx6zRuiOXrj8QLHYZ6UbTti3CAgg-hxZF1aADglf_zdcnQYNRqRx_mzY0ip2JyXT6ceh9r9bbaGjuPa2UDCQW5d6OKdCwxWTZMhD9XNWAgpHC04vmzEbuV2z5_Z4iEQQk8YOkQg/s1600/am+i+healthy+app2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="887" data-original-width="1443" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDx6zRuiOXrj8QLHYZ6UbTti3CAgg-hxZF1aADglf_zdcnQYNRqRx_mzY0ip2JyXT6ceh9r9bbaGjuPa2UDCQW5d6OKdCwxWTZMhD9XNWAgpHC04vmzEbuV2z5_Z4iEQQk8YOkQg/s320/am+i+healthy+app2.png" width="320" /></a></div>
<span style="font-family: "verdana" , sans-serif;"><br /></span><span style="font-family: "verdana" , sans-serif;"></span>
<span style="font-family: "verdana" , sans-serif;"><br /></span><br />
<div>
<span style="font-family: "verdana" , sans-serif;"><br /></span></div>
<div style="margin: 0in;">
<div style="font-family: "Times New Roman"; font-size: medium;">
<br /></div>
<div>
<span style="font-family: "verdana" , sans-serif; font-size: 14.6667px;">I also <a href="https://www.linkedin.com/feed/update/urn:li:activity:6647488270559166465/">posted the idea on Linkedin</a> and had some good discussion about the app, potential challenges to overcome that would need to be solved.</span></div>
</div>
<div style="font-size: 11pt; margin: 0in;">
<br /></div>
<div style="margin: 0in;">
<span style="font-family: "verdana" , sans-serif;"><span style="font-size: 11pt;"><b>Reliably Detect Healthy vs Potentially </b></span><span style="font-size: 14.6667px;"><b>Contagious</b></span><span style="font-size: 11pt;"><b> People</b></span></span></div>
<div style="font-size: 11pt; margin: 0in;">
<span style="font-family: "verdana" , sans-serif;">What if a person has covid-like symptoms but does not have covid? For example, </span><span style="font-family: "verdana" , sans-serif; font-size: 11pt;">what if a person has allergies? What if a person has a common cold or asthma? What if a person was around someone who had Covid-19 but didn't contract the virus? What if someone has a high temperature because of being in the sun or exercising? What if people can fool the app? What if a person doesn't have a mobile device?</span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span>
<span style="font-family: "verdana" , sans-serif;">If the app is not able to reliably detect who is a contagion risk then it won't work and could even make the problem worse. It could result in unjust discrimination.</span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span>
<span style="font-family: "verdana" , sans-serif;">In its simplest form, the app could include a survey. Microsoft has partnered with the CDC to provide a <a href="https://www.cdc.gov/coronavirus/2019-ncov/symptoms-testing/symptoms.html">Corona Virus Self-checker</a> which is a perfect example of an effective machine learning survey that optimizes the questions based on real data to differentiate who has corona and who does not.</span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span></div>
<div style="font-size: 11pt; margin: 0in;">
<span style="font-weight: bold;"><span style="font-family: "verdana" , sans-serif;">Incentivize those who are contagious to do the right thing</span></span></div>
<div style="font-size: 11pt; margin: 0in;">
<span style="font-family: "verdana" , sans-serif;">No one wants to be sick or put others at risk. But it is important that we accurately identify who is a risk and to </span><span style="font-family: "verdana" , sans-serif; font-size: 11pt;">build proper economic incentives into the system so that sick persons are not penalized for being sick. Another advantage of this app is that refunds could be issued to sick people so that they are incentivized to do the right thing for the public good. New policies or laws could be put in place to require that vouchers to be issued to people who are determined to be sick. Airlines, Sports venues, etc. would be required to issue a voucher or refund to a certified sick person. This will remove the incentive for persons using the app to be dishonest and help people do the right thing for public health.</span></div>
<div style="font-size: 11pt; margin: 0in;">
<br /></div>
<div style="font-size: 11pt; margin: 0in;">
<b><span style="font-family: "verdana" , sans-serif;">Who could build this</span></b></div>
<span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"></span><span style="font-family: "verdana" , sans-serif;">I think this is an important piece of technology that would help get the world back on its feet. I think Salesforce (my employer) or Google, Facebook, Microsoft or Amazon could build this. Governments could also be involved.</span></span><br />
<span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><br /></span></span>
<span style="font-family: "verdana" , sans-serif;"><br /></span><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><b>Feature Details</b></span></span><br />
<br />
<ul style="text-align: left;">
<li><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;">Survey - Answer questions about whether you are sick or not.</span></span></li>
</ul>
<ul style="text-align: left;">
<li><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;">Respiratory Sounds, use AI to listen to breathing and detect congestion. </span></span><a href="https://www.forbes.com/sites/nicholasfearn/2019/10/09/medtech-startup-uses-ai-to-identify-respiratory-issues-in-children/#73828c1a1609" style="font-family: verdana, sans-serif;">for example</a>.</span></span></li>
</ul>
<ul style="text-align: left;">
<li><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;">Location history - has the person traveled to a location where a known outbreaks have occured? Has the person been in close proximity to an infected person?</span></span></span></span></li>
</ul>
<ul style="text-align: left;">
<li><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;">Property cleaning policies - What procedures has a location taken to ensure that they are virus free? (Perhaps this could be an extension to Google maps which would add information about what steps a location has taken to clean any potential viruses and include an audit record of latest cleanings performed, etc.</span></span></span></span></li>
</ul>
<ul style="text-align: left;">
<li><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;">Temperature - read temperature to detect fever.</span></span></span></span></li>
</ul>
<ul style="text-align: left;">
<li><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;">Lab results - connect with testing laboratories and enter results into the app database.</span></span></span></li>
</ul>
<ul style="text-align: left;">
<li><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;">Heath history - if a person has recovered from Coronavirus and been in quaranteen for sufficient period of time, and therefore has immunity, they are probably low risk.</span></span></span></span></li>
</ul>
<ul style="text-align: left;">
<li><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;">Vaccines received - Has the person been vaccinated against the highest risk viruses and is therefore lower risk.</span></span></span></span></li>
</ul>
<br />
<br />
<br />
<span style="font-family: "verdana" , sans-serif;"><span style="font-family: "verdana" , sans-serif;"><b>Conclusion</b></span> <span style="font-family: "verdana" , sans-serif;">When I go into a public space I want to know that my risk of contracting a contagious disease is minimized. I want to know that the space owner has taken steps . This is a problem that is not going away in the next few weeks but will probably be with us for years to come. The current shelter-in-place resulting in most people sitting at home is not a long term solution and is going to soon create many other hardships. </span></span><span style="font-family: "verdana" , sans-serif;">I think this app will provide value for many years to come given the increase in virus outbreaks in recent years which is likely to continue as viruses evolve. We need to be safe without having to live the rest of our lives in isolation and this app could be an important part of the solution.</span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span>
<span style="font-family: "verdana" , sans-serif;"><b>Resources</b></span><br />
<span style="font-family: "verdana" , sans-serif;"><a href="https://www.facebook.com/josephflu/posts/10159557435372678?comment_id=10159557455072678&reply_comment_id=10159557591522678&notif_id=1586728188837767&notif_t=feed_comment&ref=notif">Facebook discussion</a> on this topic of what solution would be most helpful to solving the pandemic and enabling the economy to open backup.</span><br />
<div>
<span style="font-family: "verdana" , sans-serif;"><br /></span></div>
<span style="font-family: "verdana" , sans-serif;">Company providing a thermal imaging solution for $9600 which uses a camera to take people's temperature and send notifications via a mobile app. <a href="https://www.kvue.com/article/news/health/coronavirus/austin-based-company-creates-thermal-camera-that-could-help-detect-coronavirus/269-6581e7b1-b578-4a3f-86a7-f80782ae484b">Athena Security</a></span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span>
<br />
<span style="font-family: "verdana" , sans-serif;"></span>
<span style="font-family: "verdana" , sans-serif;">Microsoft bot used by CDC to screen people who might need to go to hospital with symptoms <a href="https://www.cdc.gov/coronavirus/2019-ncov/symptoms-testing/symptoms.html">link</a></span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span>
<span style="font-family: "verdana" , sans-serif;">How <a href="https://nationalpost.com/health/how-taiwan-and-singapore-managed-to-contain-covid-19-while-letting-normal-life-go-on?lipi=urn%3Ali%3Apage%3Ad_flagship3_detail_base%3BiNfJOwObqY7lNhrI9Yl7Vg%3D%3D">Taiwan and Singapore</a> are using technology to stop the spread of Coronavirus.</span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span>
<span style="font-family: "verdana" , sans-serif;"><a href="https://www.newsbreak.com/news/0OTO6NXG/this-app-could-tell-you-if-you-crossed-paths-with-someone-who-has-coronavirus?s=oldSite&ss=i4">MIT app</a> using your location history to see if you have gone to a location suspected of having corona virus.</span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span></div>
Joseph Fluckigerhttp://www.blogger.com/profile/05994810276665721883noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-18062861324111711862019-09-22T08:17:00.001-05:002019-09-22T08:17:38.800-05:00I am trying to qualify for the 2021 <a href="https://www.baa.org/">Boston Marathon</a>. This is not an easy task. There are in fact many people around the world also trying to qualify for Boston but there is a limited field size of 30k.<br />
<br />
I am signed up to run the CIM Marathon in December and have joined the Cedar Park Rogue running group. We run Tues, Thur, Sat morning at 5am. Yikes, this has been a difficult adjustment! I enjoy the group and get a sense of accomplishment from running. I am able to keep up with the fastest runners so that makes me feel good, though I forget that I am not 16 any more and try to run as I did in my running "glory days". I often feel exhausted, sore and out-of-whack for the rest of the day. But by the next workout I've forgotten and am back to trying to beat my teammates in our workouts because my crazy brain things I'm racing and am 16 again. But I love it and it makes me able to pretend at least that I am an elite runner. Nils Marc Bergman ran a 2:43 and qualified for the New York marathon. Julia is trying to run a 2:45 marathon time and qualify for the olympic trials in Atlanta.<br />
<br />
<br />
"Registration dates and qualifying standards for the 2021 Boston Marathon have not yet been announced. " <a href="http://baa.org/">baa.org</a> This is kind of a scary statement because I'm putting so much into qualifying for 2021 and the goal is out of my control. But I guess as any meaningful goal, we can't control it completely.<br />
<br />
<br />
<br />
<br />
<br />Joseph Fluckigerhttp://www.blogger.com/profile/05994810276665721883noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-72958530766910155922016-04-17T14:01:00.000-05:002016-04-17T14:01:02.190-05:00Landon's Youtube channelLandon is trying his hand at Youtube and has started publishing videos. He is on his way to stardom and riches. :)<br />
<br />
<br />
Landon's Youtube channel: <a href="https://www.youtube.com/channel/UCayoN7Tz5Xyk14b5oJrHGgg">Infinity Chest</a><br />
<br />
<br />Joseph Fluckigerhttp://www.blogger.com/profile/05994810276665721883noreply@blogger.com1tag:blogger.com,1999:blog-22622316.post-72875439705871209552013-12-31T10:29:00.001-06:002013-12-31T10:29:39.507-06:00Good mantras for any coder to live by<div dir="ltr" style="text-align: left;" trbidi="on">
I thought this was a good mantra for all coders, which comes from Python REPL by typing "import this".<br />
<br />
<br />
<b>The Zen of Python, by Tim Peters<br /><br />Beautiful is better than ugly.<br />Explicit is better than implicit.<br />Simple is better than complex.<br />Complex is better than complicated.<br />Flat is better than nested.<br />Sparse is better than dense.<br />Readability counts.<br />Special cases aren't special enough to break the rules.<br />Although practicality beats purity.<br />Errors should never pass silently.<br />Unless explicitly silenced.<br />In the face of ambiguity, refuse the temptation to guess.<br />There should be one-- and preferably only one --obvious way to do it.<br />Although that way may not be obvious at first unless you're Dutch.<br />Now is better than never.<br />Although never is often better than *right* now.<br />If the implementation is hard to explain, it's a bad idea.<br />If the implementation is easy to explain, it may be a good idea.<br />Namespaces are one honking great idea -- let's do more of those!</b><br />
<br />
<br />
These are good guidelines for any coder to live by, I'd say.<br />
<br /></div>
Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com1tag:blogger.com,1999:blog-22622316.post-19405255978212606252013-08-09T19:31:00.000-05:002013-08-09T19:31:01.626-05:00RobotranslatorI created a utility which translates.NET applications into any language.<br />
<br />
<div style="text-align: center;">
<a href="http://robotranslator.com/">Robotranslator</a></div>
<br />
Features<br />
<br />
<ol>
<li>Generate .resources localization files for your application and then launch it to see your application in that target language</li>
<li>Use Google Translation service to automatically translate text</li>
<li>Publish your translations online to share with other users</li>
</ol>
<br />
<br />
Translating an application can often be expensive because it requires both developers and application users. App Translator allows end users to produce their own translations and share them with other users. Translation is automated via integration with Google Translation API.<br />
<br />
We are interested in your feedback, please contact me, or leave a comment with questions or suggestions. An example translatable application is included in the install which demonstrates how easy it is to use App Translator. To change the target application, simply edit the Features.xml file. App Translator has been successfully used on large enterprise applications with tens of thousands of items translated. It is now generalized to work with any .NET application. We are interested in your feedback to help make improvements.Joseph Fluckigerhttp://www.blogger.com/profile/05994810276665721883noreply@blogger.com1tag:blogger.com,1999:blog-22622316.post-40163656489051502192013-07-16T07:36:00.001-05:002013-07-16T07:36:58.581-05:00AppTranslator: A Translation Utility<p>I created <a href="http://apptranslator.wordpress.com">a utility for translating .NET applications</a>.</p> <p>App Translator allows you to translate .NET applications into any language.</p> <ul> <li>Generate .resources localization files for your application and then launch it to see your application in that target language. </li> <li>Use Google or Bing Translation service to automatically translate text. </li> <li>Publish your translations online to share with other users.</li> </ul> <p>I am interested in your feedback and suggestions. Please download it and try it out, or watch the tutorial videos.</p> <p><a href="http://apptranslator.files.wordpress.com/2013/06/screenshot_exampleapp.png"><img src="http://apptranslator.files.wordpress.com/2013/06/screenshot_exampleapp.png?w=738&h=448" /></a></p> Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com1tag:blogger.com,1999:blog-22622316.post-90794569013718080652013-03-13T17:15:00.001-05:002013-03-22T06:15:15.325-05:00SpreadsheetGear vs. SyncFusion vs. ComponentOne<p>I conducted a three month analysis comparing three top spreadsheet controls for .NET application developers: <a href="http://www.spreadsheetgear.com/">SpreadsheetGear</a>, <a href="http://www.syncfusion.com/products/wpf/spreadsheet">SyncFusion Spreadsheet</a>, and <a href="http://www.componentone.com/SuperProducts/SpreadNet/">ComponentOne Spread.NET</a>. The definite winner was SpreadsheetGear, with ComponentOne Spread.net in second. SpreadsheetGear provides the most Excel-like experience, is the most performant, and provides the most responsive and capable product support. </p> <p>I build a reporting engine for my company and SpreadsheetGear made it awesome. Our customers have been very pleased. I wanted to share my extensive analysis with any other developers out there trying to find the right spreadsheet control for their .NET application.</p> <p> </p> <h2><font size="4">Comparison</font></h2> <blockquote> <ul> <li>Spreadsheet gear grid goes to 1 million! Wow. (SyncFusion goes to 500 by default, ComponentOne goes to 60k) </li> <li>SpreadsheetGear is an older control which has been around for a while. It is built by the same guys who built Formula1, so they have been doing spreadsheets for many years. </li> <li>SpreadsheetGear has a better keyboard/mouse experience than SyncFusion or ComponentOne. The grid is tuned to the Excel experience, for example copy down, shift down arrow, drag to fill-down series, etc. </li> <li>SpreadsheetGear supports 398 Excel formulas. SyncFusion supports 183. ComponentOne: ? </li> <li>Good printing support. SpreadsheetGear has built in print preview (which is more performant than SyncFusion) </li> <li>SyncFusion documentation and API comments are much better than ComponentOne. </li> <li>SyncFusion has a context menu on by default, ComponentOne does not. </li> <li>Support for Spreadsheet gear is much better than ComponentOne. ComponentOne gave me wrong answers on several occasions. I was able to email support directly and receive detailed answers with sample code same-day. </li> <li>The SpreadsheetGear control doesn't come with a ribbon control, but it does come with right click context menu, and dialogs which allow for sheet editing and formatting. </li> <li>Supports Exporting to Excel </li> <li>In SpreadsheetGear, Images are draggable. In ComponentOne and SyncFusion, the images are stuck in one spot. </li> <li>The icons, ribbon, and dialogs for ComponentOne and SyncFusion look more modern than SpreadsheetGear. </li> <li>Spreadsheet gear has impressive multithreaded support (GetLock(), ReleaseLock(), multi-core recalc and sorting and interruptible background recalc)</li> <li>SpreadsheetGear is able to open a spreadsheet in SpreadsheetGear control that is also currently open in Excel. SyncFusion throws an exception. </li> <li>SpreadsheetGear has formula bar, ComponentOne does not have formula bar. </li> <li>ComponentOne Spread.Net has different API between WinForms and WPF versions for some reason. Spreadsheet gear has the exact same API between the two. </li> </ul> <p> </p> </blockquote> <h2><font size="4">Scalability and Performance </font></h2> <p>The scalability tests against SpreadsheetGear were impressive which is important for the large amount of data we need to handle. SyncFusion was throwing exceptions when we tried to insert more than 500 rows. ComponentOne was limited to 50k rows. SpreadsheetGear was orders of magnitude faster.</p> <ul> <li>Generate 1004 custom plot controls on SpreadSheet: 0.03 seconds (controls are virtualized until they become visible) </li> <li>Large table refresh with 55,000 rows: 6 seconds </li> <li>Successfully generated 2,584 page report to PDF using <a href="http://www.amyuni.com/en/index.php">Amyuni PDF print driver</a> resulting in a 70 megabyte file. </li> </ul> <p> </p> <h2><font size="4">Cost</font></h2> <table border="1" cellspacing="0" cellpadding="2" width="614"><tbody> <tr> <td valign="top" width="151"> <p align="center"><strong><font size="3">SpreadsheetGear</font></strong></p> </td> <td valign="top" width="212"> <p align="center"><strong><font size="3">ComponentOne</font></strong></p> </td> <td valign="top" width="249"> <p align="center"><strong><font size="3">SyncFusion</font></strong></p> </td> </tr> <tr> <td valign="top" width="154">$999/developer <br />volume discounts of 10% for 4 or more, 25% for 10 or more</td> <td valign="top" width="211">$1200/developer</td> <td valign="top" width="248">$1800/developer retail, $900/developer volume discount</td> </tr> <tr> <td valign="top" width="156"><a href="https://www.spreadsheetgear.com/downloads/purchase.aspx">Pricing Detail</a> <br />Includes year of support and product updates</td> <td valign="top" width="210"><a href="http://www.componentsource.com/products/spread-net/prices.html">Pricing Detail</a> <br />Enterprise suite of controls</td> <td valign="top" width="248"><a href="http://www.syncfusion.com/sales/price-list">Pricing Detail</a> <br />Entire enterprise suite of controls</td> </tr> </tbody></table> <h2><strong><font size="4"></font></strong></h2> <h2><strong><font size="4">Conclusion</font></strong></h2> <p>My analysis was conducted September 2012 – December 2012. Note to be fair to SyncFusion, their Spreadsheet control is version 1. I ‘m sure it will get better. They offer a whole suite of controls including an awesome sample code browser (I like them better than Infragistics in many ways). </p> <p>In conclusion, SpreadsheetGear is the hands down winner. We demoed our reporting engine built on SpreadsheetGear to our German Software team last week and they were quite impressed how much we had accomplished in so little time. We demoed the product to our customers and they are thrilled (no exaggeration here). I am happy to recommend SpreadsheetGear because they have done an outstanding job which blows the competition out of the water.</p> <blockquote> <p>Joseph Fluckiger </p> <p>Sr. Software Architect </p> <p>Thermo Fisher Scientific </p> <p>Austin, TX</p> <p> </p> </blockquote> <h2><font size="4">SpreadsheetGear Screenshots</font></h2> <blockquote> <p><a href="http://lh3.ggpht.com/-OBK9H3i3YdU/UUD64HWO42I/AAAAAAAAUuU/0HXGnDJETtc/s1600-h/image%25255B12%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-UfrZqnH1-5w/UUD64qZcx3I/AAAAAAAAUuc/gvsoLsHyHzM/image_thumb%25255B6%25255D.png?imgmax=800" width="467" height="359" /></a></p> <p>This is a screenshot of the reporting engine we built using SpreadsheetGear. Note that the ribbon is not included with spreadsheet gear. We used Infragistics WPF ribbon control in our application. And a Microsoft WPF Expander control for the left nav.</p> <p><a href="http://lh5.ggpht.com/-xgWwmGvKaNA/UUD6TuOG4TI/AAAAAAAAUsU/Rk9Bwbn9Rss/s1600-h/spreadsheetgear_screenshot%25255B3%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="spreadsheetgear_screenshot" border="0" alt="spreadsheetgear_screenshot" src="http://lh5.ggpht.com/-P86BHP9g2g4/UUD6UHtYrGI/AAAAAAAAUsc/Gz4rAYiCmRg/spreadsheetgear_screenshot_thumb%25255B1%25255D.png?imgmax=800" width="463" height="406" /></a></p> </blockquote> <blockquote> <p><a href="http://lh3.ggpht.com/-7h0HNjMnj5s/UUMgSYGORcI/AAAAAAAAUus/R-I10H1EJ5M/s1600-h/image%25255B11%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-TYgJclq8T-Y/UUMgS5PpLMI/AAAAAAAAUu0/YbXlzxtdpQQ/image_thumb%25255B4%25255D.png?imgmax=800" width="514" height="241" /></a></p> </blockquote> <h2><font size="4"></font></h2> <h2><font size="4">ComponentOne Spread.Net Screenshots</font></h2> <blockquote> <p><a href="http://lh6.ggpht.com/-ceK43hBsJvg/UUD6VgW31oI/AAAAAAAAUs0/9zgvoRD3by0/s1600-h/clip_image001%25255B5%25255D%25255B3%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[5]" border="0" alt="clip_image001[5]" src="http://lh5.ggpht.com/-vX8FYg8gxnM/UUD6WSf_hZI/AAAAAAAAUs8/skVk9cEiOu0/clip_image001%25255B5%25255D_thumb%25255B1%25255D.png?imgmax=800" width="443" height="262" /></a></p> </blockquote> <blockquote> <p><a href="http://lh3.ggpht.com/-PIT_q5F_tBA/UUMgTCOTNCI/AAAAAAAAUu8/a4e-wVBr70Y/s1600-h/image%25255B6%25255D.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-MoImaE2C0R8/UUMgTpNsfnI/AAAAAAAAUvE/y7dfaJFW_eU/image_thumb%25255B1%25255D.png?imgmax=800" width="192" height="29" /></a></p> <p><a href="http://lh6.ggpht.com/-m_jH-e6vwTQ/UUD6W6ce_UI/AAAAAAAAUtE/fkyyepVSzAY/s1600-h/clip_image002%25255B4%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://lh4.ggpht.com/-EZe-wkz2n5A/UUD6XamSLPI/AAAAAAAAUtM/qZR5UnO7jTU/clip_image002_thumb%25255B1%25255D.png?imgmax=800" width="278" height="345" /></a></p> </blockquote> <blockquote> <p> </p> </blockquote> <h2><font size="4"></font></h2> <h2><font size="4">SyncFusion screenshots</font></h2> <p><a href="http://lh3.ggpht.com/-jHhToQcAHzE/UUD6XyNfJQI/AAAAAAAAUtU/rCZwX7P3JPI/s1600-h/clip_image001%25255B9%25255D%25255B3%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[9]" border="0" alt="clip_image001[9]" src="http://lh3.ggpht.com/-y31SDtmFkrM/UUD6Yb8J0MI/AAAAAAAAUtc/A6PUHcC59VQ/clip_image001%25255B9%25255D_thumb%25255B1%25255D.png?imgmax=800" width="505" height="365" /></a></p> <p><a href="http://lh4.ggpht.com/-FhtlAgvztHA/UUD6YxTc-iI/AAAAAAAAUtk/_wzNg00lE70/s1600-h/clip_image002%25255B7%25255D%25255B2%25255D.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002[7]" border="0" alt="clip_image002[7]" src="http://lh4.ggpht.com/-KNBsbV3i3Fo/UUD6ZbmOQwI/AAAAAAAAUts/7KV_w8LsE0o/clip_image002%25255B7%25255D_thumb.png?imgmax=800" width="244" height="146" /></a></p> <p><a href="http://lh6.ggpht.com/-uhY3nAJVcAw/UUD6Z8wOtyI/AAAAAAAAUt0/mIoJ9Iq41mo/s1600-h/clip_image003%25255B4%25255D%25255B2%25255D.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image003[4]" border="0" alt="clip_image003[4]" src="http://lh6.ggpht.com/-USZstcz7vPg/UUD6aRzkPQI/AAAAAAAAUt8/gLYE1af8FiA/clip_image003%25255B4%25255D_thumb.png?imgmax=800" width="207" height="244" /></a></p> <p><a href="http://lh4.ggpht.com/-K7SvQW6Cz6c/UUD6a0iomRI/AAAAAAAAUuE/FVq67bqHLv0/s1600-h/clip_image004%25255B4%25255D%25255B2%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image004[4]" border="0" alt="clip_image004[4]" src="http://lh5.ggpht.com/-4JKKz0CAzqQ/UUD6bb3L0PI/AAAAAAAAUuM/V70OIN9nJDA/clip_image004%25255B4%25255D_thumb.png?imgmax=800" width="244" height="211" /></a></p> Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com6tag:blogger.com,1999:blog-22622316.post-48016410391794776622012-01-22T10:47:00.003-06:002012-02-10T17:39:27.097-06:00University of Texas Software Engineering Master's Degree - My favorite Classes<div dir="ltr" style="text-align: left;" trbidi="on">I hope this ranking of my favorite classes is helpful to other students trying to schedule their classes. I am currently attending the University of Texas Masters Degree program in Software Engineering. When you pay for the program out of your own pocket like I did, it becomes very important to get the most out of each class. I have little enthusiasm for spending 3,500 dollars for a course and not getting much value. Note that this is my opinion. <br />
<br />
<br />
<table><tbody>
<tr style="height: 30.75pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 30.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><b><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Course</span></b></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><b><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">my ranking</span></b></div></td> <td style="border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid none none; height: 30.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><b><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">time commitment</span></b></div></td> <td style="border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: solid solid none none; border-top-color: rgb(163, 163, 163); border-top-width: 1pt; height: 30.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><b><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">comments</span></b></div></td> <td style="border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: solid solid none none; border-top-color: rgb(163, 163, 163); border-top-width: 1pt; height: 30.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><b><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Professor</span></b></div></td> </tr>
<tr style="height: 105.75pt; mso-yfti-irow: 1;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 105.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Communication Networks</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 105.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">1</span></div></td> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-right-style: solid; border-top-style: solid; border-width: 1pt; height: 105.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">heavy</span></div></td> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-right-style: solid; border-top-style: solid; border-width: 1pt; height: 105.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Bard is great. In an Internet world, this is very relevant <span class="GramE">information,</span> it answered many long time questions that I have had about how the Internet works. Workload is high. Bard is entertaining. He is an <span class="SpellE">ex marine</span> and prides himself in the difficulty of tests. Sometimes his tangents are more interesting than the lectures. He is full of interesting information. He helped build UT's network so he has quite a bit of experience.</span></div></td> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-right-style: solid; border-top-style: solid; border-width: 1pt; height: 105.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Bard</span></div></td> </tr>
<tr style="height: 30.75pt; mso-yfti-irow: 2;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 30.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Software Architecture</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">-</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">light</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Would have liked to taken instead of requirements. Barber teaches both classes.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Barber</span></div></td> </tr>
<tr style="height: 15.75pt; mso-yfti-irow: 3;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 15.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Distributed Security</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">-</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">heavy</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Would like to have taken.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Bard</span></div></td> </tr>
<tr style="height: 45.75pt; mso-yfti-irow: 4;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 45.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Embedded Systems</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 45.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">5</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 45.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">medium-heavy</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 45.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Bard is awesome. We had a guest speaker from ARM which was enlightening. In general, I wish the program had more guest speakers.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 45.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Bard</span></div></td> </tr>
<tr style="height: 30.75pt; mso-yfti-irow: 5;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 30.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Mobile Computing</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">3</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">medium-heavy</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Julian is <span class="SpellE"><span class="GramE">a</span></span> energetic teacher, and includes humor along with interesting information.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Julien</span></div></td> </tr>
<tr style="height: 90.75pt; mso-yfti-irow: 6;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 90.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Distributed systems</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">2</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">heavy</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span class="SpellE"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Garg</span></span><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;"> is awesome. I was skeptical about this subject, but it was eye opener to learn about the world of distributed systems. With Google and other cloud architectures becoming increasingly important, this is a very relevant topic. This course was a mix of theory and current industry applications. Course load was heavy.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span class="SpellE"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Garg</span></span><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;"></span></div></td> </tr>
<tr style="height: 15.75pt; mso-yfti-irow: 7;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 15.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Data Engineering</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">-</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">-</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">I didn't take but I hear that prof is a bit disorganized.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span class="SpellE"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Miranker</span></span><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;"></span></div></td> </tr>
<tr style="height: 45.75pt; mso-yfti-irow: 8;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 45.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Software Metrics</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 45.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">6</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 45.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">light</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 45.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Krasner is a dynamic guy, very entertaining. He was a VP at Lockheed <span class="SpellE">Martain</span> and has many good stories to tell. He brings in more interesting guest speakers than any other professor.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 45.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Krasner</span></div></td> </tr>
<tr style="height: 60.75pt; mso-yfti-irow: 9;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 60.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Engineering Lifecycle</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 60.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">7</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 60.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">medium</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 60.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Summer course, I enjoyed the architecture conference at the end of the course. The course requires writing several papers. If you know your master's report topic, you can write papers regarding your master's report topic.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 60.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Krasner, Julien, <br />
<span class="SpellE">Khursid</span>, Barber</span></div></td> </tr>
<tr style="height: 30.75pt; mso-yfti-irow: 10;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 30.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Program Management</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">-</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">light</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span class="GramE"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">would</span></span><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;"> like to have taken. I hear the professor is dynamic and the workload is light</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">McCann</span></div></td> </tr>
<tr style="height: 105.75pt; mso-yfti-irow: 11;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 105.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Requirements</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 105.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">8</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 105.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">light</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 105.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;"><span style="mso-spacerun: yes;"> </span>I did not enjoy the topic and feel like Professor Barber lacked enthusiasm at times. But I did very much appreciate the relatively light workload. :). For those who write requirements, this may be quite valuable. Professor Barber definitely knows what she is talking about. I would have liked to see more agile practices integrated. I felt her toolset is a bit antiquated. (It is obvious that she hasn't updated her materials in years)</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 105.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Barber</span></div></td> </tr>
<tr style="height: 30.75pt; mso-yfti-irow: 12;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 30.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Advanced Programming Tools</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">-</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">heavy</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">I didn’t take it, but I hear that some people like it and others did not as it was not well organized. This is a java-centric tools class.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 30.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span class="SpellE"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Adnan Aziz</span></span><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;"></span></div></td> </tr>
<tr style="height: 15.75pt; mso-yfti-irow: 13;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 15.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Masters Report</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">n/a</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">heavy</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">_</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 15.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">n/a</span></div></td> </tr>
<tr style="height: 90.75pt; mso-yfti-irow: 14;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 90.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Data Mining</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">4</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">heavy</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Very interesting and relevant topic. <span class="SpellE">Ghosh</span> is a genius and a genuinely nice guy. He has taken out <span class="SpellE">Mathematica</span> in order to focus on more practical topics (I appreciate this). The workload is definitely high. I will know more by the end of the semester, but so far I am convinced this will be useful in my current job and in our information age.</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span class="SpellE"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Ghosh</span></span><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;"></span></div></td> </tr>
<tr style="height: 90.75pt; mso-yfti-irow: 15; mso-yfti-lastrow: yes;"> <td style="border-bottom-style: solid; border-color: rgb(163, 163, 163); border-left-style: solid; border-right-style: solid; border-width: 1pt; height: 90.75pt; padding: 0in 5.4pt; width: 137pt;" width="183"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Validation</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 56pt;" width="75"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">9</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 82pt;" width="109"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: center;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">medium-light</span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 312pt;" width="416"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Professor <span class="SpellE">Khursid</span> was not as engaging as other professors. It seemed that he focused a bit too much on topics from his own thesis and his graduate professor, rather than the larger Validation industry. The textbook did not do a good job of selling me on why validation is important or getting me excited about the topic (like the other courses did). Other students have expressed similar sentiment. </span></div></td> <td style="border-bottom-color: rgb(163, 163, 163); border-bottom-width: 1pt; border-right-color: rgb(163, 163, 163); border-right-width: 1pt; border-style: none solid solid none; height: 90.75pt; padding: 0in 5.4pt; width: 86pt;" width="115"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt;"><span class="SpellE"><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;">Khursid</span></span><span style="mso-ascii-font-family: calibri; mso-bidi-font-family: calibri; mso-fareast-font-family: "Times New Roman"; mso-hansi-font-family: calibri;"></span></div></td> </tr>
</tbody></table></div>Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com3tag:blogger.com,1999:blog-22622316.post-62901821932456822352011-12-01T20:20:00.001-06:002011-12-01T20:20:06.831-06:00Security with Visual Understanding – A Kinect Project<p>I gave a presentation today in my Embedded Systems class titled: “Seeing Machines”. The presentation describes my project in which I created a security camera which leverages the skeletal recognition capabilities of the Kinect to detect when someone walks in view of the Kinect camera, upon which it takes pictures and uploads them to a private Picasa library. If 10 seconds passes without receiving authentication from the person who set the alarm off, an audible alarm will sound, and an SMS text message will be sent to notify the owner that an intrusion has been detected. </p> <p>The Kinect represents some amazing technology. I predict some really interesting technology coming out in the next 5 years which leverages the depth data and skeletal tracking capabilities of Kinect.</p> <p>My paper can be downloaded at this link: <a href="https://docs.google.com/a/fluckiger.org/viewer?a=v&pid=explorer&chrome=true&srcid=0B4S2QMZFfsHaYTYyYTFmMjItOGNiMC00NTAwLWFmZjYtOTBlODQ2NmNkNGI3&hl=en_US">Seeing Machines, a paper by Joseph Fluckiger</a></p> <p>Note: view the speaker notes to see links to some of the amazing Kinect projects I found during my research.</p> Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com5tag:blogger.com,1999:blog-22622316.post-36346001293037685722011-11-09T00:44:00.001-06:002011-11-09T00:46:39.279-06:00Narcotic Pain Killers are Overprescribed<p> </p> <p>I am a Software Architect for a Fortune 500 company. My job is to take large amounts of information, filter through it and find the important facts, trends, techniques, subtleties, and truths. Let me take a moment to talk about a truth of the US Medical system. </p> <p>1) The US Healthcare system over prescribes narcotic pain killers.</p> <p>I broke my collar bone on Friday while playing soccer and had surgery this morning to have a plate implanted over the two pieces of my collar bone. After the surgery the nurses insisted that I take narcotic pain killers to for the unbearable pain they described I would have once the local block wore off. They even convinced my wife who is a fan of natural foods and medicines that I absolutely had to have narcotic pain killers. All the way to the car the nurse pleaded to my wife to make sure that I took them. I didn’t because I value my brain cells. Guess what, I was fine. I was uncomfortable for 4 hours between 8pm and 12am, but I used ice which eased the pain just as well as a narcotic drug could have. Ice does not have harmful side effects and is not addictive. It is also harder for insurance companies, doctors and pharmacies to make healthy margins on. So that is why doctors prescribe narcotic pain killers. First, they have a monopoly on being able to prescribe them, and secondly, they are a great source of recurring revenue.</p> <p>Before I sound disgruntled, let me say that I am very happy with my orthopedic surgeon. I think he did a good job. He was helpful and friendly, skillful and most importantly didn’t cut any of my arteries while installing hardware in my shoulder. I will be forever grateful to him and his staff for fixing me. However, I hope that you will share this truth with your doctor and start a grass roots effort to help our HealthCare system focus on wellness and not profit margins which will save the great US of A from exploding Healthcare costs while improving personal health, and happiness.</p> <p> </p> <p>Next time: How healthcare providers and insurance companies collude to overbill patients…</p> Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com2tag:blogger.com,1999:blog-22622316.post-56728111827415150812011-10-29T07:17:00.001-05:002011-10-29T07:34:27.689-05:00SmartStepsUtil - A Utility Class for WinForms<p>I’ve been using a utility class I wrote called “SmartStepsUtil” since 2007.  I’ve decided to share it with the world. It turns your WinForms app into a “Console” simply helping you to write colored text to a RichTextBox.</p> <p><a href="http://lh4.ggpht.com/-E7ogyVeLb3E/Tqvy0PxYWTI/AAAAAAAAOZM/3afQ1aYJVbg/s1600-h/image%25255B11%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-y4PFuNE1GiM/Tqvy0WwxmbI/AAAAAAAAOZU/cLgTIZYx7gE/image_thumb%25255B4%25255D.png?imgmax=800" width="696" height="246" /></a></p> <p>I’ve used SmartStepsUtil on a few applications including <a href="http://sushi.codeplex.com">SharePoint SUSHI</a>. It makes it easy to quickly give feedback to the user about what is going on. It is thread safe, so you can call it from a background thread. Feel free to change it as needed.</p> <p>It just amazes me how many applications don’t give feedback to the user. Or they have complex UIs with textboxes all over the place. SmartSteps util brings the best of a Console application (simple UI, live feedback) into a Winforms app. To use SmartStepsUtil, copy into your application</p> <p>Methods:</p> <blockquote> <p>- AddtoRichTextBox() <br />- ScrollToBottom() <br />- ClearRichTextBox()</p> </blockquote> <p>Preset Styles to choose from to write to console:</p> <blockquote> <p>public enum StyleType <br />{ <br />    bodyBlack, <br />    bodyBlackBold, <br />    bodyBlue, <br />    bodyBlueBold, <br />    bodyChocolate, <br />    bodyChocolateBold, <br />    bodyDarkGray, </p> <p>     … <br /></p> </blockquote> <p><strong>Applications I’ve written using SmartStepsUtil:</strong></p> <p><a href="http://sushi.codeplex.com">SharePoint SUSHI</a></p> <p><a href="http://lh4.ggpht.com/-FUZSN4eTD9c/Tqvu1sn63xI/AAAAAAAAOYs/rj8Fys5P7hA/s1600-h/SNAGHTML55ade1a%25255B4%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML55ade1a" border="0" alt="SNAGHTML55ade1a" src="http://lh3.ggpht.com/-tWpzpfxVH8c/Tqvu2FeD06I/AAAAAAAAOY0/yMFyg9Am_Nw/SNAGHTML55ade1a_thumb%25255B1%25255D.png?imgmax=800" width="783" height="377" /></a></p> <p>BearWarePro Load Tester (affectionately called “The Punisher” <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh5.ggpht.com/-vB4O7Zm5WsU/Tqvy01oy68I/AAAAAAAAOZc/gvWCTrtc56g/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" />)</p> <p> </p> <p>Source for SmartStepsUtil:</p> <pre class="csharpcode"><span class="rem">/*</span><br /><span class="rem"> Written by Joseph Fluckiger, 2007</span><br /><span class="rem"> Home page: http://josephfluckiger.blogspot.com/</span><br /><span class="rem">*/</span><br /><span class="kwrd">using</span> System;<br /><span class="kwrd">using</span> System.Drawing;<br /><span class="kwrd">using</span> System.Windows.Forms;<br /><br /><span class="kwrd">namespace</span> SmartStepsUtility<br />{<br /> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">class</span> SmartStepUtil<br /> {<br /> <span class="rem">/// <summary></span><br /> <span class="rem">/// Singleton Reference to RichTextBoxInstance. Set this Instance on application startup.</span><br /> <span class="rem">/// </summary></span><br /> <span class="kwrd">public</span> <span class="kwrd">static</span> RichTextBox RichTextBoxInstance { get; set; }<br /><br /> <span class="rem">/// <summary></span><br /> <span class="rem">/// Add to RichTextBox with Style</span><br /> <span class="rem">/// </summary></span><br /> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> AddToRichTextBox(<span class="kwrd">string</span> strText, StyleType style)<br /> {<br /> AddToRichTextBox(strText, style, EnumIcon.no_icon);<br /> }<br /><br /> <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> AddToRichTextBox(<span class="kwrd">string</span> strText, StyleType style, EnumIcon icon)<br /> {<br /> <span class="kwrd">switch</span> (style)<br /> {<br /> <span class="kwrd">case</span> StyleType.bodyBlack:<br /> AddToRichTextBox(strText, Color.Black, 8, <span class="kwrd">false</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodyBlackBold:<br /> AddToRichTextBox(strText, Color.Black, 8, <span class="kwrd">true</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodyBlue:<br /> AddToRichTextBox(strText, Color.Blue, 8, <span class="kwrd">false</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodyBlueBold:<br /> AddToRichTextBox(strText, Color.Blue, 8, <span class="kwrd">true</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodyChocolate:<br /> AddToRichTextBox(strText, Color.Chocolate, 8, <span class="kwrd">false</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodyChocolateBold:<br /> AddToRichTextBox(strText, Color.Chocolate, 8, <span class="kwrd">true</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodyDarkGray:<br /> AddToRichTextBox(strText, Color.DarkGray, 8, <span class="kwrd">false</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodyOrange:<br /> AddToRichTextBox(strText, Color.Orange, 8, <span class="kwrd">false</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodyRed:<br /> AddToRichTextBox(strText, Color.Red, 8, <span class="kwrd">false</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodySeaGreen:<br /> AddToRichTextBox(strText, Color.SeaGreen, 8, <span class="kwrd">false</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.bodySeaGreenBold:<br /> AddToRichTextBox(strText, Color.SeaGreen, 8, <span class="kwrd">true</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.titleBlack:<br /> AddToRichTextBox(strText, Color.Black, 14, <span class="kwrd">true</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.titleBlue:<br /> AddToRichTextBox(strText, Color.Blue, 14, <span class="kwrd">true</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.titleChocolate:<br /> AddToRichTextBox(strText, Color.Chocolate, 14, <span class="kwrd">true</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> StyleType.titleSeagreen:<br /> AddToRichTextBox(strText, Color.SeaGreen, 14, <span class="kwrd">true</span>, icon);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">default</span>:<br /> AddToRichTextBox(strText, Color.Black, 8, <span class="kwrd">false</span>, icon);<br /> <span class="kwrd">break</span>;<br /> }<br /> }<br /><br /> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> AddToRichTextBox(<span class="kwrd">string</span> strText)<br /> {<br /> AddToRichTextBox(strText, Color.Black, 8, <span class="kwrd">false</span>, EnumIcon.no_icon);<br /> }<br /><br /> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> AddToRTBnl(<span class="kwrd">string</span> strText)<br /> {<br /> AddToRichTextBox(strText + <span class="str">"\r\n"</span>, Color.Black, 8, <span class="kwrd">false</span>, EnumIcon.no_icon);<br /> }<br /><br /> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> AddToRichTextBox(<span class="kwrd">string</span> strText, Color textColor, <span class="kwrd">float</span> fontSize, <span class="kwrd">bool</span> bold)<br /> {<br /> AddToRichTextBox(strText, textColor, fontSize, bold, EnumIcon.no_icon);<br /> }<br /><br /> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> AddToRichTextBox(Exception ex)<br /> {<br /> AddToRichTextBox(ex + <span class="str">"\r\n"</span>, StyleType.bodyRed, EnumIcon.no_icon);<br /> }<br /><br /> <span class="rem">/// <summary></span><br /> <span class="rem">/// Delagate for thread safely adding to Richtextbox</span><br /> <span class="rem">/// </summary></span><br /> <span class="kwrd">private</span> <span class="kwrd">delegate</span> <span class="kwrd">void</span> delAddToRTB(<span class="kwrd">string</span> strText, Color color, <span class="kwrd">float</span> fontSize, <span class="kwrd">bool</span> bold, EnumIcon icon);<br /><br /> <span class="rem">/// <summary></span><br /> <span class="rem">/// Threadsafe call to add to Richtexbox </span><br /> <span class="rem">/// </summary></span><br /> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> AddToRichTextBox(<span class="kwrd">string</span> strText, Color textColor, <span class="kwrd">float</span> fontSize, <span class="kwrd">bool</span> bold, EnumIcon icon)<br /> {<br /> <span class="kwrd">if</span> (RichTextBoxInstance.InvokeRequired)<br /> {<br /> RichTextBoxInstance.BeginInvoke(<span class="kwrd">new</span> delAddToRTB(AddToRichTextBox), <span class="kwrd">new</span> <span class="kwrd">object</span>[] { strText, textColor, fontSize, bold, icon });<br /> <span class="kwrd">return</span>;<br /> }<br /> FontStyle style1 = bold ? FontStyle.Bold : FontStyle.Regular;<br /> <span class="kwrd">if</span> (fontSize <= 0)<br /> {<br /> fontSize = 8;<br /> }<br /> var font1 = <span class="kwrd">new</span> Font(<span class="str">"Courier New"</span>, fontSize, style1, GraphicsUnit.Point, 0);<br /> RichTextBoxInstance.SelectionStart = RichTextBoxInstance.TextLength;<br /> RichTextBoxInstance.SelectionFont = font1;<br /> RichTextBoxInstance.SelectionColor = textColor;<br /> RichTextBoxInstance.SelectedText = strText;<br /> AddIcon(icon);<br /> }<br /><br /> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> ScrollToBottom()<br /> {<br /> <span class="kwrd">if</span> (RichTextBoxInstance.InvokeRequired)<br /> {<br /> RichTextBoxInstance.BeginInvoke(<span class="kwrd">new</span> Action(ScrollToBottom));<br /> <span class="kwrd">return</span>;<br /> }<br /> RichTextBoxInstance.Focus();<br /> RichTextBoxInstance.Select(RichTextBoxInstance.Text.Length, 0);<br /> RichTextBoxInstance.ScrollToCaret();<br /> }<br /><br /> <span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">void</span> ClearRichTextBox()<br /> {<br /> <span class="kwrd">if</span> (RichTextBoxInstance.InvokeRequired)<br /> {<br /> RichTextBoxInstance.BeginInvoke(<span class="kwrd">new</span> Action(ClearRichTextBox));<br /> <span class="kwrd">return</span>;<br /> }<br /> RichTextBoxInstance.Clear();<br /> }<br /><br /> <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">void</span> AddIcon(EnumIcon icon)<br /> {<br /> <span class="kwrd">if</span> (icon != EnumIcon.no_icon)<br /> {<br /> var font1 = <span class="kwrd">new</span> Font(<span class="str">"Wingdings"</span>, 10f, FontStyle.Regular, GraphicsUnit.Point, 0);<br /> RichTextBoxInstance.SelectionStart = RichTextBoxInstance.TextLength;<br /> RichTextBoxInstance.SelectionFont = font1;<br /> <span class="kwrd">switch</span> (icon)<br /> {<br /> <span class="kwrd">case</span> EnumIcon.brown_arrow:<br /> RichTextBoxInstance.SelectionColor = Color.Brown;<br /> RichTextBoxInstance.SelectedText = AsciiToStringUtil(182);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> EnumIcon.green_check:<br /> RichTextBoxInstance.SelectionColor = Color.Green;<br /> RichTextBoxInstance.SelectedText = AsciiToStringUtil(252);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> EnumIcon.orange_dotdotdot:<br /> RichTextBoxInstance.SelectionColor = Color.Orange;<br /> RichTextBoxInstance.SelectedText = AsciiToStringUtil(160) + AsciiToStringUtil(160) + AsciiToStringUtil(160);<br /> <span class="kwrd">break</span>;<br /> <span class="kwrd">case</span> EnumIcon.red_x:<br /> RichTextBoxInstance.SelectionColor = Color.Red;<br /> RichTextBoxInstance.SelectedText = AsciiToStringUtil(251);<br /> <span class="kwrd">break</span>;<br /> }<br /> }<br /> }<br /><br /> <span class="kwrd">private</span> <span class="kwrd">static</span> <span class="kwrd">string</span> AsciiToStringUtil(<span class="kwrd">int</span> asciiCode)<br /> {<br /> <span class="kwrd">return</span> ((<span class="kwrd">char</span>)asciiCode).ToString();<br /> }<br /><br /> <span class="kwrd">public</span> <span class="kwrd">enum</span> EnumIcon<br /> {<br /> brown_arrow,<br /> green_check,<br /> no_icon,<br /> orange_dotdotdot,<br /> red_x<br /> }<br /><br /> }<br /><br /> <span class="kwrd">public</span> <span class="kwrd">enum</span> StyleType<br /> {<br /> bodyBlack,<br /> bodyBlackBold,<br /> bodyBlue,<br /> bodyBlueBold,<br /> bodyChocolate,<br /> bodyChocolateBold,<br /> bodyDarkGray,<br /> bodyOrange,<br /> bodyRed,<br /> bodySeaGreen,<br /> bodySeaGreenBold,<br /> titleChocolate,<br /> titleSeagreen,<br /> titleBlue,<br /> titleBlack<br /> }<br /><br />}</pre><br /><style type="text/css"><br />.csharpcode, .csharpcode pre<br />{<br /> font-size: small;<br /> color: black;<br /> font-family: consolas, "Courier New", courier, monospace;<br /> background-color: #ffffff;<br /> /*white-space: pre;*/<br />}<br />.csharpcode pre { margin: 0em; }<br />.csharpcode .rem { color: #008000; }<br />.csharpcode .kwrd { color: #0000ff; }<br />.csharpcode .str { color: #006080; }<br />.csharpcode .op { color: #0000c0; }<br />.csharpcode .preproc { color: #cc6633; }<br />.csharpcode .asp { background-color: #ffff00; }<br />.csharpcode .html { color: #800000; }<br />.csharpcode .attr { color: #ff0000; }<br />.csharpcode .alt <br />{<br /> background-color: #f4f4f4;<br /> width: 100%;<br /> margin: 0em;<br />}<br />.csharpcode .lnum { color: #606060; }</style> Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com2tag:blogger.com,1999:blog-22622316.post-21034098212994005132011-09-01T17:54:00.000-05:002011-09-01T17:54:45.754-05:00Visual Studio Shortcuts<div dir="ltr" style="text-align: left;" trbidi="on"><div closure_uid_6kpjw1="103"><br />
</div><div closure_uid_6kpjw1="103">Revisiting Visual Studio keyboard shortcuts is always a good investment of time for any serious Visual Studio developer. Here is a nice list to hang on your wall: <a href="https://docs.google.com/a/fluckiger.org/viewer?a=v&pid=explorer&chrome=true&srcid=0BwDxeVBK-9JKNTM4NzMyZWQtMTEzZC00N2JhLWJkMzQtZTI4YjU5MGIwYzZj&hl=en">Most Useful Keyboard Shortcuts for .NET Developers</a>.</div><div closure_uid_6kpjw1="103"><br />
</div><div closure_uid_6kpjw1="103">This list was created by <a href="http://mahdi.mp/the-most-useful-keyboard-shortcuts-for-net-developers/">Mahdi Taghizadeh</a>.</div><div closure_uid_6kpjw1="103"><br />
</div><div closure_uid_6kpjw1="103"><br />
</div><div closure_uid_6kpjw1="103"><br />
</div><div closure_uid_6kpjw1="103"><br />
</div><br />
<br />
</div>Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-48302636956450939002011-07-04T16:41:00.000-05:002011-07-04T16:41:34.288-05:00Bitcoin does have intrinsic value<div dir="ltr" style="text-align: left;" trbidi="on">In response to an article which states that <a href="http://globalguerrillas.typepad.com/globalguerrillas/2011/06/the-bitcoin-bubble.html#tpe-action-resize-408">bitcoin has no intrinsic value</a>, here are my thoughts.<br />
<br />
Bitcoin does have characteristics which make it potentially more userful than than existing mediums of exchange. It is has near-zero transaction costs. Compare this with Visa/MasterCard. And try sending gold in the mail.<br />
<br />
Bitcoin also has real intrinsic value because it is more secure than Visa/MasterCard in that the recipient of payment cannot extract from your account more than you intended them to. When you give someone your credit card number, they can then use that number to take any amount of money they want from you. When you send money via bitcoin, they can’t because you aren’t sending your private key. With Visa/MasterCard we are giving our private key to a merchant. Bitcoin is not a crazy idea, Visa/MasterCard is!<br />
<br />
By reducing cost of money exchange world-wide, Bitcoin has huge potential economic benefits for the world economy.<br />
<br />
Who is a potential customer for Bitcoin? Everyone in the world. Not one country, not one language, or one demographic. Everyone. Talk about market potential. If you thought the China market was big …<br />
<br />
The biggest threat to Bitcoin, in my opinion, is that early adopters include shady folks and bitcoin could potentially get a bad reputation because of it. But look back at the Internet, the most profitable business in the early days included a larger proportion of shady uses (pornography). The Internet got a bad reputation because of it. However, as the masses of people adopted the Internet, more honest/legitimate people became the majority and look how many good/legitimate things happen on the Internet today. <a href="http://gavinthink.blogspot.com/2011/06/proactive-engagement.html">Gavin Andresen</a> has an interesting post suggesting folks contact their local representatives pointing out that bitcoin will create jobs in order to boost the chances of bitcoin being legitamized in the eyes of government.<br />
<br />
I must state that bitcoin is not something I recommend as an investment. It is currently in early infancy and has a few years yet before the bitcoin ecosystem will be robust enough to support the hundreds of millions of dollars currently in circulation. A bitcoin today, honestly is not worth the $15-30 dollars they have been trading for for the past 30 days. The current price is the product of hype and speculation. However, as a software engineer, and an Economics major, the technical and economical foundations of bitcoin are potentially quite sound. I have read all the <a href="https://en.bitcoin.it/wiki/Category:Technical">technical posts</a> on the bitcoin wiki and <a href="https://en.bitcoin.it/wiki/Category:Technical">Satoshi's paper</a>, and I am impressed. On the other hand, I am not impressed with the <a href="http://www.bitcoin.org/">bitcoin client</a>, <a href="https://mtgox.com/">mtgox </a>or <a href="https://www.mybitcoin.com/">mybitcoin</a>. It is almost emarrassing how poorly written these sites are, and they all need to be dramatically improved before millions of dollars of value is entrusted to them. This is why I don't recommend bitcoin as an investment. These sites are in early beta and are not ready for prime time use. However, give these sites a year or so and I am hopeful they will dramatically improve.<br />
<br />
I think competition is good. Vista/mastercard and baking currently have little competition. Banks and national currencies are currently much more stable, safe and predictable than bitcoin. However Bitcoin has some very clever ideas on making transaction costs lower, reducing fraud and identity theft, and reducing costs of exchanging money internationally. People need to demand that banks find better ways than exchanging credit card numbers which is really quite silly. Bitcoin may give banks a few ideas, or else it will replace them. I am confident that banks and credit cards and their employees will rise to the occasion and come up with some clever solutions of their own. The biggest threat to bitcoin is not goverments declaring it illegal, but bank innovation. In either case if banks or bitcoins win the battle of innovation, quality of life is the winner.<br />
</div>Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com1tag:blogger.com,1999:blog-22622316.post-40743863836569010872011-06-06T08:20:00.001-05:002011-06-06T08:21:18.941-05:00Awesome plugin for Visual Studio 2010<blockquote> <p>This is a great extension for VS 2010 released last month: <a href="http://visualstudiogallery.msdn.microsoft.com/d0d33361-18e2-46c0-8ff2-4adea1e34fef">Productivity Power Tools</a>.</p> </blockquote> <p>If you’ve used Resharper, this brings several of its great features right into VS 2010.</p> <p>- Quick Find </p> <p><a href="http://lh5.ggpht.com/-zoy-yUzlDZU/TezUEC9cicI/AAAAAAAANg4/DNror9EhmHw/s1600-h/clip_image002%25255B3%25255D.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://lh5.ggpht.com/-BOHGeCjg2RI/TezUEr5SF7I/AAAAAAAANg8/HShIne6pF2w/clip_image002_thumb.jpg?imgmax=800" width="244" height="51" /></a></p> <p>- Remove and Sort Imports (they stole this one wholesale from Resharper)</p> <p><a href="http://lh5.ggpht.com/-8_SQ-fMXfhM/TezUE5X93qI/AAAAAAAANhA/sWRDYvsa7N4/s1600-h/clip_image003%25255B3%25255D.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://lh6.ggpht.com/-N4PYDEOH8Vo/TezUFRyEuII/AAAAAAAANhE/e02102OApU4/clip_image003_thumb.jpg?imgmax=800" width="244" height="100" /></a></p> <p>- Solution Navigator: very cool - Solution Explorer on steroids (legal ones of course)</p> <p>- Enhanced Scrollbar – red dots are breakpoints, dark blue dots is the carrot location.</p> <p><a href="http://lh4.ggpht.com/-XlssYUuSIGg/TezUFqwZgYI/AAAAAAAANhI/GyFXVBiNQa8/s1600-h/clip_image005%25255B3%25255D.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image005" border="0" alt="clip_image005" src="http://lh6.ggpht.com/-07MySTXCXJ0/TezUGQY8SJI/AAAAAAAANhM/_PPImTUzWXs/clip_image005_thumb.jpg?imgmax=800" width="35" height="244" /></a></p> <p>- Etc..  <a href="http://visualstudiogallery.msdn.microsoft.com/d0d33361-18e2-46c0-8ff2-4adea1e34fef">read more</a></p> Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-90224830982013310102011-02-04T11:52:00.001-06:002011-02-04T11:52:18.741-06:00Outlook tip: Turn off Email Contact Pictures<p> </p> <p>Many people find the photos in the window border to be a little distracting. It is easy to turn them off by adding a registry key.  Follow these simple steps:</p> <p>1) Save the text below between the lines into a text file and rename the file “dontShowContactPicture.reg”.</p> <p>------</p> <p>Windows Registry Editor Version 5.00</p> <p>[HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook\Options\Mail] <br />"ShowContactPicture"=dword:00000000</p> <p>------</p> <p>2) Double click the file and you will be prompted:</p> <p><a href="http://lh3.ggpht.com/_qBelXjxITtI/TUw8y3ePwZI/AAAAAAAAMzY/7uslJYn6Two/s1600-h/SNAGHTML51847e3%5B4%5D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML51847e3" border="0" alt="SNAGHTML51847e3" src="http://lh6.ggpht.com/_qBelXjxITtI/TUw8zI8xwII/AAAAAAAAMzg/dXCULDoYCh4/SNAGHTML51847e3_thumb%5B1%5D.png?imgmax=800" width="430" height="144" /></a></p> <p>3) Restart Outlook.</p> <p>4) See the result:</p> <p>Before:</p> <p><a href="http://lh4.ggpht.com/_qBelXjxITtI/TUw8zg0tg2I/AAAAAAAAMzo/SMvrgEywVhs/s1600-h/image%5B11%5D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_qBelXjxITtI/TUw8z9ePoOI/AAAAAAAAMzw/rIhJo0zdPg8/image_thumb%5B5%5D.png?imgmax=800" width="488" height="105" /></a></p> <p>After:</p> <p><a href="http://lh3.ggpht.com/_qBelXjxITtI/TUw80EMyV0I/AAAAAAAAMz4/j8jHMYpRHy4/s1600-h/image%5B3%5D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_qBelXjxITtI/TUw80jQ1PcI/AAAAAAAAM0A/SYElKXVCEVM/image_thumb%5B1%5D.png?imgmax=800" width="492" height="81" /></a></p> <p>5) To undo this change and turn pictures back on, simply edit the file and change “dword:00000000” to “dword:00000001”</p> <p> </p> <p>More information can be found in this related<a href="http://serverfault.com/questions/26452/how-do-i-remove-the-contact-photo-from-the-window-of-received-mail-in-outlook-200"> article on stackoverflow.com</a></p> Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com6tag:blogger.com,1999:blog-22622316.post-23169456450347746592011-01-17T09:15:00.009-06:002011-03-22T22:17:07.683-05:00PowerShell ABC's - P is for ParametersHere is a great PowerShell tips article:<br />
<br />
<a href="http://devcentral.f5.com/weblogs/Joe/archive/2009/01/13/powershell-abcs---p-is-for-parameters.aspx">PowerShell A-B-Cs<br />
</a>Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-80284905106902547872011-01-13T14:20:00.000-06:002011-01-13T14:20:30.935-06:00User Experience<p>Excellent presentation on User Experience:</p><p><a title="http://www.dallasasp.net/downloads/hfe_tobiask.pdf" href="http://www.dallasasp.net/downloads/hfe_tobiask.pdf">http://www.dallasasp.net/downloads/hfe_tobiask.pdf</a></p>Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-47408670488853334452010-12-24T06:59:00.001-06:002010-12-24T06:59:13.296-06:00Lightswitch<p>Its finally here!    </p> <p>Follow the announcement of  <a href="http://www.microsoft.com/visualstudio/en-us/lightswitch">Lightswitch</a>. The public beta is going to be available on late August,   I suggest you try it out.</p> <p>LightSwitch is the simplest way to build business applications for the cloud and the desktop.</p> Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com0tag:blogger.com,1999:blog-22622316.post-77443368008446342942010-12-12T22:13:00.001-06:002010-12-12T22:13:31.708-06:00Which Way Is Faster – Windows Phone 7 App<div class="ExternalClass76517ED3EB6B463E92E12D9BF04489C0"> <p> </p> <p>I am working on a Windows Phone 7 application, so that I can learn about development on the Windows Phone 7, so far it is a really great experience. I love using Linq, Xml serialization, extension methods, Visual Studio 2010, Silverlight, XAML, and all the technologies I am so familiar with.</p> <p>I wrote a paper about the phone application which is called "Which Way Is Faster": A Mobile Phone Application Leveraging Location Tracking to Determine Which Commonly Traveled Routes are Faster. </p> <p>The presentation and paper can be viewed here: </p> <p><a href="https://docs.google.com/present/edit?id=0AcSpsqVup0QkZGRwcHdmZmpfNDE3ODNqOGJkOQ&hl=en&authkey=CJDlnq0D">presentation</a></p> <p><a href="https://docs.google.com/document/d/131rYBjgbGAA5vX_cz1qNuHV6XKBKH5j5A5J_WyuK0xs/edit?hl=en&authkey=CKSYzpUI">paper</a></p> </div> Joseph Fluckigerhttp://www.blogger.com/profile/03240394243690061387noreply@blogger.com0