Showing posts with label google. Show all posts
Showing posts with label google. Show all posts

Monday, February 6, 2023

ChatGPT, OpenAI, Anthropic?

I wrote about Notion AI a couple months ago. Since then, a lot has happened in the world of AI. OpenAI took headlines with ChatGPT, Microsoft laid off thousands to invest millions into OpenAI, and Google followed suit with also laying off thousands to invest millions into Anthropic AI and announces Bard. Why hasn't such corporations used those millions to invest in their employees - is a question that simply repeats history. For my fellow techmates, beware of the corporate checkmates and steer your own career.

P.S. And then there's Poe, from Quora.

https://openai.com/
https://openai.com/blog/chatgpt/
https://www.anthropic.com/
https://blog.google/technology/ai/bard-google-ai-search-updates/
https://techcrunch.com/2023/02/06/quora-opens-its-new-ai-chatbot-app-poe-to-the-general-public/

Monday, July 27, 2020

Design Docs at Google article

This is a really good article on design doc in thinking and in practice.
https://www.industrialempathy.com/posts/design-docs-at-google/

I wonder how other tech giants go about design docs.

- Quick Outline (in article) -

    For new readers to catch up and (for everyone to) link up to detailed information when necessary.
    Since design docs are overhead, know the trade-offs with whether a design doc is necessary or not.

Anatomy of a Design Doc

    Context & Scope

    Goal & non-goals

    Actual Design: One Overview & One Detailed

    System-context diagram

    APIs

    Data Storage

    Code & Pseudocode

    Degree of constraint

    Alternatives Considered

    Cross-Cutting Concerns

    Length of Design Doc


Design Doc Lifecycle

  1. Creation & rapid iteration
  2. Review
  3. Implementation & iteration
  4. Maintenance & learning



Wednesday, April 15, 2020

Go for ML Infrastructure Engineering

"Python will (and should) remain the most popular language for data science and machine learning engineering. However, when it comes to machine learning infrastructure, we’re happy with Go."

I definitely want to learn more...

https://towardsdatascience.com/why-we-deploy-machine-learning-models-with-go-not-python-a4e35ec16deb
https://github.com/cortexlabs/cortex

Friday, July 19, 2019

Review: Google's Byteboard (A New Way to Interview Tech Talent)

Many developers, technical hiring managers, and even recruiters have heard of "Cracking the Coding Interview" by Gayle Laakmann McDowell. From my experience of interviewing for coding and testing jobs, I've learned that the recruiting process will change as the demands for talent also change. Naturally, it's time to see this process change with the landscape of new talent (even if big businesses continue to lag behind). With many new start-ups and small businesses looking to take their share of the market, the next generation of talent should consider their opportunities and no longer feel intimidated by recruiters or the recruiting process. In my opinion, the interviewing process has always been talked about mutual benefits but in reality have mostly, if not always, benefited the interviewer. But, how would talented interviewees shift more of the benefits to their side of the scale in an interview process?



Taking quizzes on HackerRank is cool. Throwing up all over a Whiteboard to showing code matching algorithms for problem solving is classic. Flexing a GitHub of finished projects is nice. However, none of these show a developer's team chemistry on a new feature which is now essential. And, many technical interviews are now happening online (rather than in-person). Teams don't automatically increase productivity due to talent alone. So, could Byteboard be the answer that talented teams and developers are looking for? Time shall tell.

Read Article

https://www.blog.google/technology/area-120/byteboard-interview-measures-for-essential-engineering-skills/

A Comedy Skit on Job Interviews - Enjoy!



References



Tuesday, July 9, 2019

Reminder: Tech Giants providing Future of Education

Just in case you are like me and still wondering how long public schools (or any school in some states) will take to catch up with restructuring their schooling system to the workforce demand, here's a resourceful website by Google on Education.


Google isn't the only one, however. Microsoft has their own resourceful website focused on One Hour of Code. Apple has Everyone can Code. For young students specifically, Apple also has an education site called Teaching Code. Even Amazon is aware of the educational crises and creating their own online schooling resource: AmazonInspire. Of course, the other tech giant Facebook has their own with Facebook Education.



Rather than wait for our government or public sector to provide the skills and education that our world demands, I think I'll take the initiative with using resources from such leading companies and encourage my family, friends, and neighbors to learn ahead. After all, home schooling is on the rise and many families are supplementing their social education via faith institutions, sport clubs, city clubs, etc.

In Addition

From this GitHub post, I can even see how hackathons boost the learning levels of students better than coursework in computer science. If students begin to take on this project-based assignment (i.e. learning skills through projects rather than test-based assignments), then students will end up not only learning more but also remembering more. This could spark a new kind of homeschooling or custom learning path. Why not just learn on your own at your own pace and then pass a universal, online high school exam for a degree? Wouldn't that be nice?!

Tuesday, July 2, 2019

Review: Google's Fuchsia OS

If I ever begin writing software for embedded systems, for example a spaceship, then I probably want to give serious consideration to Google's new Fuchsia. I'm not at the level yet, but making note of where to find the Getting Started guide.

https://fuchsia.dev/

Cheers!

Wednesday, May 29, 2019

Review: Google, Microsoft with Brilliant for Quantum Computing

If you are looking for a place to practice programming in quantum computing, then you probably would like this article.


I haven't had a chance to look into this, but I'm sure I will once quantum computing rises in my list of priorities. Overall, I think just hearing about this is great!

Cheers!

Tuesday, May 21, 2019

Review: Google's Glass, FB's Oculus Quest, and MS prediction

A few years ago, Microsoft's CEO Satya Nadella made a profound prediction on the next three technologies that will revolutionize our worlds. The first one was on virtual reality (VR) including mixed reality and augmented reality (AR). In this review, I'll quickly give an update on how I believe Mr. Nadella's prediction is spot-on.

Microsoft

If you have watched the Microsoft Build 2019, then you will have seen the mixed reality highlight where multiple people collaborating on a project were sharing the same "Spatial" (as Microsoft called it). In this Spatial, a mixed reality allows people on various devices to experience a discussion around a project while not having to be physically present in the same room.

Facebook

If you're keeping up with Facebook, then I hope you have seen this video clip below where FB is making big advances in the gaming and entertainment world with connecting friends even more than just on social media. They are providing a fun experience in addition to the social aspect. How cool is that?



Google

If you're wondering where Google is, then you should check out this article. What was once thought (and advertised) as a project discontinued - is actually a surprise to consumers as this Glass product is re-announced in its next version.

Read Article

https://www.theverge.com/2019/5/20/18632689/google-glass-enterprise-edition-2-augmented-reality-headset-pricing

Conclusion

So, whether we like it or not, virtual reality seems to be the first next technology that is making advances to reshape our society. Stay tuned and I hope you get to experiment with these technologies before it becomes mainstream. Ready Player One is closer than we think.

Get Ready, Player!

Wednesday, May 15, 2019

Review: Google I/O 2019

In my previous post, I spoke a bit about the Microsoft Build 2019 and their amazing updates (mainly in respect to business and gaming). Here I'd like to give a little insight into the highlights of Google I/O 2019. Most of Google's amazing updates has evolved around the mobile world and its Pixel smartphone. Take note of their impressive user controls with respect to user security and privacy.

Google I/O 2019 Highlight (by CNET)



Happy Googling!

Thursday, March 28, 2019

Review: Fall and Rise of Dart

If you are a current iOS or Android developer, you may face a bit of a learning curve if you choose to embrace Flutter. However, it might be worth the jump—both for hot reload (an awesome feature), and for the opportunity to work cross-platform. - David Bolton

Read Article

This is especially attractive to read (or hear) after watching the "Highlights from Flutter at World Mobile Congress 2019"


Friday, March 22, 2019

Review: Season of Docs (by Google)

If you're interested in the world of Technical Writers or the push for improving the documentation, or lack of, for open source projects then check this out (below).

https://opensource.googleblog.com/2019/03/introducing-season-of-docs.html

Once again, Google is shifting the tech culture by taking software documentation seriously.

Monday, February 11, 2019

Resolve: Test setup with Selenium Chrome Driver on CentOS

These are rough notes and I need to separate my resolution of Firefox from my resolution of Chrome. I also need to clean up these notes on ChromeDriver solution. I wanted to publish, however, just for future reference since I did a lot of research on the Internet and no single solution helped (but thankful for all the many solutions leading up to this solution).

=================
Who would think that setting up Selenium to run with Google Chrome on a CentOS would be so challenging? Maybe I'm just stupid?

Here's my problem, or actually my set of problems. I'm trying to run Selenium 3.13.0 with Google Chrome 61 on CentOS 7.

Problem #1: Error regarding the "webdriver.chrome.driver" system property not set.
There are so many useless articles including on StackOverflow answering this problem. Some point to Google's ChromeDriver website. Here's an example:
https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver
let me to
https://sites.google.com/a/chromium.org/chromedriver/help/chrome-doesn-t-start
but I still didn't understand clearly what this site it saying (in troubleshooting the "doesn't start" issue).
Why hasn't anyone on the Google ChromeDriver just create a dumbdown version (without all these security features)? Just a very basic browser for testing an application displays decently in a Chrome browser?
Anyhow, I found this one StackOverflow answer which actually helped.
https://stackoverflow.com/questions/18674092/how-to-implement-chromedriver-in-selenium-in-linux-platform
I was simply pointing to the wrong driver. I thought the issue was with running the selenium-chrome-driver and not actually google-chrome.

Someone should update this page to be more clear in stating the default locations of Chrome installations (as mentioned in the SO article above).
https://sites.google.com/a/chromium.org/chromedriver/getting-started

Answer (#1):
Find the location of my ChromeDriver in CentOS 7.
$ whereis google-chrome
Output: 
/usr/bin/google-chrome

Set this location as the system property expected by Selenium Chrome Driver.
NOTE: If this location is already set in your $PATH, then you shouldn't have to do this.
String pathToChrome = "/usr/bin/google-chrome";
System.setProperty("webdriver.chrome.driver", pathToChrome);

Result (#1):
The Google Chrome browser launches. But, it might not actually finish loading. Sigh.

Problem #2: Error regarding the "driver.version" system property not set.
Really! Now I need to set another system property and I need to know the version? Why is my software program so version dependent? Either I can run what I need, or I can't. Backwards compatibility, anyone?
Enough complaining, here's how I resolve this issue.

Answer (#2):
Find the version of my ChromeDriver.
$ /usr/bin/google-chrome -version
Output:
Google Chrome 61.0.3163.100

Set this version as the system property expected by Selenium Chrome Driver.
String driverVersion = "Google Chrome 61.0.3163.100";
System.setProperty("driver.version", pathToChrome);
Output:
Driver info: driver.version: ChromeDriver
    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:##);

Since "ChromeDriver" is stated as the driver.version, we know that the driver.version is not getting recognized.
https://stackoverflow.com/questions/49282494/java-net-connectexception-failed-to-connect-to-localhost-error-with-selenium-3

Result (#2):
This didn't actually solve the issue. Sigh, again. However, there's another error message. Let's move forward.

Problem #3: Error regarding "[...ERROR:sandbox_linux.cc (344)] InitializeSandbox() called with multiple threads in process gpu-process."
What is this "sandbox"?
Google Search "chrome sandbox" for answers.
A couple results:
https://blog.chromium.org/2008/10/new-approach-to-browser-security-google.html
https://chromium.googlesource.com/chromium/src/+/master/docs/design/sandbox.md

I guess I didn't know that I need to know more about browser security in order to implement a simple test case using Selenium.

Answer?
https://stackoverflow.com/questions/39041146/how-do-i-pass-arguments-to-google-chrome-when-running-selenium

First step, see if running this argument in command line will work without error.
$ /usr/bin/google-chrome --no-sandbox
Output:
[...ERROR:sandbox_linux.cc (344)] InitializeSandbox() called with multiple threads in process gpu-process.
Note:
The browser opens with a banner stating "You are using an unsupported command-line flag: --no-sandbox. Stability and security will suffer."

Okay, let's see the options available for my google-chrome program.
$ /usr/bin/google-chrome --help

Let's try the the option: --app=URL
$ /usr/bin/google-chrome --app=http://www.mywebsite.com

Step Result:
The page displays, yes! I still get the the "sandbox" error, but I'm not going to investigate further especially considering the warning message under the OPTIONS when reading the --help.
It says "Google Chrome has hundreds of undocumented command-line flags that are added and removed at the whim of the developers. Here, we document relatively stable flags." In other words, if you really need help, call Google's Customer Support. Smh. I must be missing something. Like, there must be a Chrome for Developers and a Chrome for People (and I'm using the Chrome for Developers). I see now why certain developers like Mozilla Firefox more.

Okay, now let's try adding this argument into the driver we're creating...


Answer? Nope, this didn't matter in my scenario.
Set the different attributes manually in DesiredCapabilities for ChromeDriver.
@Before
public void createDriver() {
  DesiredCapabilities chromeCapabilities = DesiredCapabilities.chrome();
  chromeCapabilities.setPlatform(Platform.LINUX);
  chromeCapabilities.setJavascriptEnabled(true);
  chromeCapabilities.setAcceptInsecureCerts(true);
  driver = new RemoteWebDriver(service.getUrl(), chromeCapabilities);
}

PROBLEM (ChromeDriver): Error WebDriverException: java.net.ConnectException: Failed to connect to localhost/127.0.0.1:####
https://stackoverflow.com/questions/49227055/webdriverexception-java-net-connectexception-failed-to-connect-to-localhost-er?rq=1
Answer: 
Update and ensure all programs are compatible among Selenium, Chrome, and Java. See details in the link highlighted in the Problem.
Currently what I see listed is...
java 8v201
selenium 3.14x
chromedriver 2.46
google-chrome v72.x  (chrome://settings/help)

Okay, since I see that I had a "driver" issue with Firefox, I'm led back to this article here.
https://stackoverflow.com/questions/18674092/how-to-implement-chromedriver-in-selenium-in-linux-platform
When I run the following command, I don't have a chromedriver install.
$ chromedriver --version
Output:
chromedriver: command not found

Download and install driver from here:
https://sites.google.com/a/chromium.org/chromedriver/downloads
https://chromedriver.storage.googleapis.com/index.html?path=2.46/

<backfill by saying we installed and got browser to display, but got other error messages now>
downloading and installing chromedriver...

Resolving error message "Chrome controlled by automated test software"
Now, to remove the banner in browser stating that Chrome is controlled by a automated test software, see this:
http://www.automationtestinghub.com/selenium-chromedriver/
https://help.applitools.com/hc/en-us/articles/360007189411--Chrome-is-being-controlled-by-automated-test-software-notification

Resolving error message "Only local connections are allowed."
If the url expected is not displaying in the Chrome browser, but instead "data;", then it's related to the error regarding "Only local connections are allowed." Try these steps to resolve.
https://stackoverflow.com/questions/25080500/when-running-webdriver-with-chrome-browser-getting-message-only-local-connect

None of these search results resolved. Instead, was led back to find the correct chromedriver version compatible with my Chrome browser.
On this Download page, the Current Release section suggests going to the Version page.
http://chromedriver.chromium.org/downloads
This Version page doesn't have the drivers I'm looking for.
http://chromedriver.chromium.org/downloads/version-selection
With more research effort, I finally found the URL I need to find the correct driver for my browser version.
https://chromedriver.storage.googleapis.com/index.html

From the bottom of this page:
http://chromedriver.chromium.org/downloads
we see the last message regarding the chromedriver version going back is version 2.35 for browser version 62-64:
ChromeDriver 2.35

Supports Chrome v62-64



Changes include:

  • Supports persistent connections between client application and ChromeDriver.
  • Adds more devices types for mobile emulation.
  • Fixes a bug in get local storage command.
  • Fixes a compatibility bug that causes JavaScript code execution to fail on some versions of Chrome.
  • Uses absolute time in log file.
I have browser version 61. Hahahahaaa.
Okay, well, hopefully the driver version is 2.34 according to this chromedriver build pattern.
https://chromedriver.storage.googleapis.com/index.html?path=2.34/

Before we try this version, let's quickly recap what is installed at this point.
Currently here's what is installed:
CentOS version: 7.5.1804
Google Chrome version: 61.0.3163.100
ChromeDriver version: 2.34.522913
Selenium version: 3.13.0
Note: Selenium version is found in my POM.xml and specifies 3.13.0.

Let's double check the chromedriver version installed.
$ chromedriver --version
Output:
ChromeDriver 2.34.522913 (36222509aa6e819815938cbf2709b4849735537c)

Now, let's see what happens. Yes, I got it to work!!

Result:
Finally, got my Chrome test to work.

My Code Example:
@Test
public void testChrome() throws IOException {

    WebDriver driver;

    String pathToChrome = "/usr/bin/chromedriver"; // links to actual chromedriver dir (not google-chrome)
    System.setProperty("webdriver.chrome.driver", pathToChrome);

    // System Property addition suggested by -
        // https://wiki.saucelabs.com/display/DOCS/Test+Configuration+Options#TestConfigurationOptions-ChromeDriverVersion
    // System.setProperty("chromedriverVersion", "2.34.522913");

    // == Useful Options: Use only what is required ==
    ChromeOptions options = new ChromeOptions();
//  options.setBinary(new File(pathToChrome));
//  options.addArguments("--no-sandbox");
//  options.addArguments("--app");
//  options.addArguments("--force-app-mode");
//  options.addArguments("--kiosk");
//  options.addArguments("--start-maximized");
//  options.addArguments("--disable-web-security");

    // For info, see https://www.automationtestinghub.com/selenium-chromedriver/
    options.addArguments("disable-infobars");

    driver = new ChromeDriver(options);
    driver.get(APP_URL);
    String title = driver.getTitle();

    assertTrue("Incorrect login page title!", LOGIN_PAGE_TITLE.equalsIgnoreCase(title));
    LOG.info("Title: "+title);

    // driver.quit();
}

Cheers!


PROBLEM (FirefoxDriver): Error WebDriverException: java.net.ConnectException: Failed to connect to localhost/127.0.0.1:####
Here's an insightful SO response.
https://stackoverflow.com/questions/53107233/error-org-openqa-selenium-webdriverexception-java-net-connectexception-failed

Here are the specific versions after updating my CentOS7 box.
CentOS version: 7.5.1804
Firefox version: 60.5.0
GeckoDriver version:  ???
Selenium version: 3.13.0
Note: Selenium version is found in my POM.xml and specifies 3.13.0.

Here are my Linux commands to find the versions:
$ cat /etc/redhat-release
$ firefox --version
$ geckodriver --version

Here's some background information as I investigate how to find the GeckoDriver version:
https://github.com/mozilla/geckodriver/issues/510
https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/firefox/FirefoxOptions.html
https://stackoverflow.com/questions/43272919/difference-between-webdriver-firefox-marionette-webdriver-gecko-driver/43920453

Here's some information regarding the compatibility issues with Firefox and Selenium:
https://www.guru99.com/first-webdriver-script.html
https://stackoverflow.com/questions/43757984/how-to-start-firefoxdriver-using-selenium-3-4-0-using-maven
http://www.automationtestinghub.com/selenium-3/
http://www.automationtestinghub.com/selenium-3-0-launch-firefox-with-geckodriver/

Answer:
So, the root issue is that I don't have the "geckodriver" installed and I need this installed. Thus, I do the following:

  1. Download latest version @ https://github.com/mozilla/geckodriver/releases/tag/v0.24.0
  2. Install in my /usr/bin directory.
  3. Run geckodriver version command to ensure correct version appears.
  4. Update my test script by removing the property for "webdriver.firefox.driver" and adding the property "webdriver.gecko.driver".

Run Command Example:
$ geckodriver --version
Output:
geckodriver 0.24.0 ( 2019-01-28)

Code Sample (using FirefoxDriver)
@Test
public void testFirefox() throws IOException {

    WebDriver driver;
    
    String pathToGecko = "/usr/bin/geckodriver";
    System.setProperty("webdriver.gecko.driver", pathToGecko);
    
    driver = new FirefoxDriver();
    driver.get(myUrl);

    assertTrue("Incorrect homepage title!", driver.getTitle().equalsIgnoreCase(myUrlTitle));

    driver.quit();
}

Run Command Sample
$ mvn -Dtest=FirefoxTest test

Result:
Selenium opens Firefox browser to the expected page, retrieves the title, compares title, and build passes.


Using Example from Selenium's ChromeDriver class api page
Now that we did dug so deep to solve, what should have been, a simple issue - let's try using this code from ChromeDriver class. Specifically, only using the argument "DesiredCapabilities.chrome()" into creating the RemoteWebDriver.

Did it work?
Nope, got the same error regarding the sandbox initialization.

Why doesn't this [code example] work?
I'm not sure yet, but I think this might be the reason. Seems to me, Selenium uses this constructor as the default for instantiating the DesiredCapabilities object where it simply needs parameters including the browser, version, and platform.
https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/remote/DesiredCapabilities.html#DesiredCapabilities-java.lang.String-java.lang.String-org.openqa.selenium.Platform-
However, on Linux platform, there are more security measures to take and Chrome understands this by enforcing user to provide further parameters.

TRY THIS:
https://www.seleniumhq.org/docs/03_webdriver.jsp#htmlunit-driver

Notes:
Selenium API (Java)
https://seleniumhq.github.io/selenium/docs/api/java/
Code Example (ChromeDriver):
https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/chrome/ChromeDriver.html


https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/remote/DesiredCapabilities.html

http://chromedriver.chromium.org/capabilities
https://stackoverflow.com/questions/38335671/where-can-i-find-a-list-of-all-available-chromeoption-arguments
https://chromium.googlesource.com/chromium/src/+/master/chrome/common/chrome_switches.cc
https://chromium.googlesource.com/chromium/src/+/master/chrome/common/pref_names.cc

https://peter.sh/experiments/chromium-command-line-switches/

https://www.blazemeter.com/blog/how-to-set-up-your-automated-functional-gui-tests-with-selenium-webdriver
https://medium.com/@sahajamit/selenium-chrome-dev-tools-makes-a-perfect-browser-automation-recipe-c35c7f6a2360

https://wiki.saucelabs.com/display/public/DOCS/The+Sauce+Labs+Cookbook+Home

Monday, December 31, 2018

Review: Jamboard (by Google)

I don't know why I'm just now hearing and learning about Google's Jamboard, but I am glad to hear about it now than later.

One of the benefits of this product is its mobility. You can do a lot with this tool like with a smartboard, but you can move it around. Here's an example of why being "mobile" is superb. What if I'm innovating well at work but for some reason I get laid off? Well, I can take my Jamboard and ideas with me. That's it. Well, and continue my career. :D

One of the biggest disadvantages in growing ones career is having to start over. In today's world where there are many smart people making many smart moves, a person needs to have smart tools that move with them as well. So, this is my pitch for this tool by Google: Jamboard.

Check it out.
https://www.youtube.com/watch?v=gXwV5SlKLAE (intro to Jamboard)
https://www.youtube.com/watch?v=hVZPh8Zz8lw (intro to Jamboard in 'Google for Eduction')

Wednesday, November 28, 2018

Which Java - since Java's future is at stake?

Many are still talking about the importance of programming in Java. Since there are many apps and systems still running on Java, the need for Java support is still in demand. Or is it?

With Oracle putting the value of Java on the line (and risking its extinction like Solaris), perhaps I need to consider the other options. Especially with Google and community creating Kotlin (as a solution to replace Java). And especially with Amazon now also addressing this concern with its own solution called Corretto (and OpenJDK).

https://aws.amazon.com/blogs/opensource/amazon-corretto-no-cost-distribution-openjdk-long-term-support/

https://kotlinlang.org/docs/reference/comparison-to-java.html

The above link is a nice short comparison of why to use Kotlin over Java. It seems we, the community of developers, always have to wait for corporate to finally release a version which makes application development easier and product performance better. So, instead of waiting for Java <next version>, I think I'm going to try out one of the solutions in this blog.

Now, if I can only get some time to play with these languages. ;-)

Tuesday, August 30, 2016

Saving Print PDF version instead of Downloading Google Doc

Devs,

I recently downloaded a Google Doc into a PDF and saw all the text in bold. Screech! So, I found this answer helpful in getting the PDF format desired.

https://productforums.google.com/forum/#!topic/docs/fp5eDPafroY

Downloading to PDF


Save as PDF via Chrome's Print Page