# howdy39.dev: English

## English

- [Howdy!](https://howdy39.dev/en/index.md): I'm Tatsuya Nakano. (@howdy39) — Admina Evangelist, Notion Champions, former Corporate Engineer
- [Blog](https://howdy39.dev/en/blog/index.md): Posts, newest first.
- [Speaking](https://howdy39.dev/en/speaking.md): Talks, facilitation, media coverage and slides.
- [Books](https://howdy39.dev/en/books.md): Technical books from my circle, Tech The Toaster, available as free e-books.
- [Videos](https://howdy39.dev/en/videos.md): Videos I appear in on YouTube.
- [MCP server](https://howdy39.dev/en/mcp.md): How to connect to the howdy39.dev MCP server. There are also other entry points for AI, such as llms.txt and Markdown.

### Blog › 2026/10

- [I built an AI-native portfolio site with Mintlify by bouncing ideas off Claude](https://howdy39.dev/en/blog/2026-10-04-note-mintlify-ai-native-portfolio.md): I introduce howdy39.dev, my personal site rebuilt with Mintlify. Starting from creating a Mintlify account, I built it while talking with Claude in about 3 to 4 hours of actual work. I like its AI-native design, such as llms.txt and Markdown pages that AI can read as they are. I also write about the…

### Blog › 2026/09

- [Honestly, my colonoscopy was rough, but I think everyone should get one](https://howdy39.dev/en/blog/2026-09-07-note-colonoscopy.md): My annual checkup's fecal occult blood test came back positive for the first time, so I got a colonoscopy and wrote about the experience. The bowel prep (Suprep) was much harder than I expected, and I share a few tricks for drinking it. The procedure itself was almost instant thanks to sedation, and…

### Blog › 2026/08

- [Is it bad to be motivated by gratitude at work?](https://howdy39.dev/en/blog/2026-08-13-note-gratitude-motivation.md): Is it bad to be motivated by gratitude at work? I don't think so. But if gratitude becomes the goal itself, you start depending on other people's reactions, and on days with few reactions you can lose sight of why you work. Using help desk work in corporate IT as an example, I wrote about how fewer…
- [What corporate IT should decide before Claude Code's default becomes auto mode](https://howdy39.dev/en/blog/2026-08-10-note-claude-code-auto-mode.md): From August 14, Claude Code's auto mode becomes the default for the Pro, Max and Team plans. I wrote about what corporate IT teams should decide before that happens. The biggest impact, I think, is that organizations now have to decide for themselves whether to use auto mode. I organized the options…
- [Is it really good to keep working in a well-organized environment?](https://howdy39.dev/en/blog/2026-08-05-note-comfortable-environment.md): Is it really good to keep working in a well-organized environment, with a solid budget, supportive executives and talented teammates? Early in a career, I think it is valuable because you learn what the ideal looks like. But some skills are hard to build there: winning budget, persuading executives,…

### Blog › 2026/07

- [A technique to efficiently work around Claude's 5-hour limit in business use](https://howdy39.dev/en/blog/2026-07-09-note-claude-5h-limit.md): When you use Claude for work, the 5-hour limit can hit during the busiest part of the afternoon. This isn't about removing the limit, but about moving the lockout away from working hours. Send a one-line prompt at 7:00 and again at 12:00 to pin the session start times, and automate it with a Claude…
- [Back offices have no 'competition to be chosen,' so the experience won't improve unless we make it a priority](https://howdy39.dev/en/blog/2026-07-06-note-backoffice-experience.md): Back offices have no market competition to be chosen. They decide things like return-to-office policy, expense reports and PC specs, and employees have no choice, so the experience won't improve unless we make it a priority. A bad experience also leads to shadow IT and shadow AI, which is a security…

### Blog › 2026/06

- [I no longer immediately say 'let's hire more' when told 'we're short-staffed'](https://howdy39.dev/en/blog/2026-06-18-note-more-headcount-ai.md): When someone told me 'we're short-staffed,' a few years ago I'd split about 50/50 between 'let's hire more' and 'let's automate and review the work so we can manage with the current team.' Now that AI is an option, I say 'let's hire more' less often. Adding people casually may be easy in the short t…

### Blog › 2026/05

- [I'm leaving STORES, and graduating from corporate IT](https://howdy39.dev/en/blog/2026-05-27-note-leaving-stores.md): At the end of May 2026, I'm leaving STORES after seven and a half years, and graduating from corporate IT too. I moved from front-end engineer to corporate IT, became a manager, and then built the corporate IT organization. I'm leaving because there were fewer 'firsts' and the excitement faded. My r…

### Blog › 2026/04

- [Building an internal-only web app with Vertex AI Service from GAS](https://howdy39.dev/en/blog/2026-04-29-zenn-gas-vertex-ai.md): Now that Vertex AI Service is available from GAS, I built an internal-only AI chat screen. I wrote the steps from creating a Google Cloud project to setting up GAS, implementing it and deploying it as a web app. You don't have to manage API keys, so there's no worry about leaking them. I also note t…
- [Setting up 1Password Hosted Provisioning (SCIM) with Okta](https://howdy39.dev/en/blog/2026-04-20-note-1password-hosted-provisioning.md): I set up 1Password Hosted Provisioning (SCIM hosted by 1Password) with Okta. As of April 2026 it supports Okta and Entra ID, and it's available from the Business plan, not only Enterprise. I limited it to syncing user create, update and deactivate, and left Push Groups for later. I wrote about the p…
- [SCIM? A SaaS management tool? Calling APIs? How to think about automating account deletion](https://howdy39.dev/en/blog/2026-04-03-note-scim-account-deletion.md): I wrote about how to actually delete accounts you no longer need. My order of preference is automatic deletion with SCIM, automatic deletion with a SaaS management tool, writing your own API calls, and doing it in the admin console. But when ownership has to be handed over, like Drive owner transfer…

### Blog › 2026/03

- [Some thoughts after seeing YOUTRUST release its scout AI feature](https://howdy39.dev/en/blog/2026-03-26-note-youtrust-scout-ai.md): After seeing YOUTRUST release its scout AI agent, I wrote down what came to mind. I think YOUTRUST is a service where connections widen your career options, and I worry that AI-written scouts weaken that value. Matching on experience alone also reduces chances for people who are new but want to take…
- [What I noticed about how internal AI help desks differ from external AI help desk services, after adopting Notion custom agents as our internal AI help desk](https://howdy39.dev/en/blog/2026-03-12-note-notion-agent-helpdesk.md): I adopted Notion custom agents as our internal AI help desk. I designed it picturing external help desks like Intercom and Zendesk, but in use, AI alone solved more problems than I expected. Externally, AI is a first filter, but internally the person in charge can give the AI instructions and solve…

### Blog › 2026/02

- [Who am I working for?](https://howdy39.dev/en/blog/2026-02-26-note-who-do-you-work-for.md): I saw Notion CEO Ivan Zhao replying to customers' social media posts from his personal account rather than the official one. I've also received direct messages about a bug I posted, detailed replies to a feature request, and thank-you messages for my blog from people at Notion. People who work for t…
- [What's so great about Notion custom agents](https://howdy39.dev/en/blog/2026-02-25-note-notion-custom-agents.md): Notion custom agents were officially released on February 24, 2026. I think they're the first AI agent that anyone can build and use right away: no code, no terminal, no flowcharts, just a browser and Notion. I introduce the five settings (trigger, instructions, tools and access, model, advanced) an…

### Blog › 2026/01

- [True kindness](https://howdy39.dev/en/blog/2026-01-29-note-true-kindness.md): A note by なーねこ about misjudging what makes someone happy inspired me to write this. In a corporate IT help desk, people rely on you, you solve the problem, and they thank you. But giving the answer right away is a momentary kindness and only earns brief gratitude, I think. Making things easy to unde…
- ['Protecting for now' isn't a bad thing, I think.](https://howdy39.dev/en/blog/2026-01-11-note-protect-for-now.md): There's no perfect security, so I think even half-measures are better than nothing. What matters is thinking ahead about moving from cheaper products to more expensive ones as the business grows. The cost of switching differs by tool, such as MDM or IdP, and an IdP gets harder to move the more it's…

### Blog › 2025/12

- [2025 in review](https://howdy39.dev/en/blog/2025-12-31-note-2025-review.md): I looked back on 2025, a year built around Notion. Notion was rolled out company-wide at STORES at the end of 2024, and from January to March I owned the rollout project, handling the design and training sessions. I deliberately took on more speaking opportunities, such as panels, conferences and a…
- [Four points for effectively reviewing unused SaaS accounts](https://howdy39.dev/en/blog/2025-12-17-note-saas-unused-account-review.md): I wrote four points for reviewing unused SaaS accounts effectively. Deleting accounts of people who left can often be automated with SCIM, but accounts of current employees who just don't use a tool are hard to automate. The points are: start with the SaaS that are easiest to review, use an opt-out…

### Blog › 2025/11

- [Rationality and diversity, seen through company email addresses](https://howdy39.dev/en/blog/2025-11-25-note-company-email-address.md): At my current company, new hires can freely choose the local part of their work email address (the part before the @) during onboarding. Some software engineers care more about their ID than their name, and since many services make it hard to change an email address, an ID can be steadier than a sur…

### Blog › 2025/10

- [When unsure about something new, default to 'let's do it'](https://howdy39.dev/en/blog/2025-10-10-note-lets-do-it.md): When I'm unsure about something new, I default to 'let's do it.' It started with Masayoshi Son using the phrase on Twitter around 2010, and experiencing that culture around 2012 while supporting system development for the SoftBank Group. Since becoming a manager, I've used it with my team too: if th…
- [As AI makes SaaS more capable and expensive, doesn't internal IT need customer success too?](https://howdy39.dev/en/blog/2025-10-08-note-it-customer-success.md): As AI makes SaaS more capable and more expensive, I wrote about why corporate IT may now need customer success too. New features keep arriving even though we haven't mastered the existing ones, so costs just pile up. I propose activities that support use after adoption: posting how to use tools for…

### Blog › 2025/09

- [I love products that keep search conditions in the URL](https://howdy39.dev/en/blog/2025-09-30-note-search-conditions-in-url.md): I wrote about how much I like products that keep search conditions in the URL. When conditions stay in the URL, like '?q=hoge' or '?q=hoge&sort=name.desc,' you can save a conditional search in a bookmark or a how-to document, and use it from Chrome search shortcuts or launchers like Raycast. I notic…

### Blog › 2025/08

- [Gemini Canvas can write most GAS, too](https://howdy39.dev/en/blog/2025-08-08-zenn-gemini-canvas-gas.md): This is about how Gemini Canvas can write most of the GAS you need. With Gemini Canvas, I built a GAS script that pulls device information from the Apple Business Manager API, writes it to a spreadsheet, and syncs it to a Notion database. I iterated many times: converting it to a container-bound scr…

### Blog › 2025/07

- [Google Forms' AI creation only supports English? A technique to create Japanese forms with AI anyway](https://howdy39.dev/en/blog/2025-07-28-note-google-forms-ai-japanese.md): Google Forms' AI form creation currently supports only English, and a prompt in Japanese gives an error saying the language isn't supported. I wrote about a technique to still create Japanese forms with AI: machine-translate your request, like 'Please create a Japanese version of the … form,' into E…

### Blog › 2025/06

- [Sheets' AI function only supports English? A technique to use the AI function anyway](https://howdy39.dev/en/blog/2025-06-30-note-sheets-ai-function-japanese.md): The AI function in Google Sheets currently supports only English, and entering Japanese gives the error 'The language entered is not supported at this time.' I wrote about combining it with the GOOGLETRANSLATE function: translate the Japanese inquiry into English, run the AI function with an English…
- [Creating how-to videos by combining Gemini and Google Vids](https://howdy39.dev/en/blog/2025-06-24-note-gemini-google-vids-howto-video.md): Adding captions to how-to videos used to take too much effort to be realistic. When the Gemini app gained video upload, I wondered whether that would change, so I tried it. Record your screen, have Gemini create a subtitle file (SRT), then add closed captions in Google Vids. Since Vids can't export…
- [How to safely share Google Workspace's NotebookLM with external users](https://howdy39.dev/en/blog/2025-06-19-note-notebooklm-external-sharing.md): I wrote about safely sharing Google Workspace's NotebookLM with partners outside your organization. In the Workspace edition, public sharing is disabled for security reasons, so you can't share with accounts outside the organization. The workaround is to go through a Google Group: create a group for…

### Blog › 2025/05

- [Emoji, page or mention: which should represent a person on a Notion page?](https://howdy39.dev/en/blog/2025-05-30-note-notion-represent-people.md): I compared three ways to represent a person on a Notion page: emoji, a page, or a mention. Emoji are limited to 500 per workspace and Notion AI can't read them. Mentions don't show an icon and trigger a notification. I recommend a self-introduction database with a page for each person, which is clea…
- [How to implement a Chrome extension that redirects after moving off a SaaS](https://howdy39.dev/en/blog/2025-05-21-stores-product-blog-saas-migration-redirect-chrome-extension.md): When we moved off a SaaS, I implemented a Chrome extension that automatically redirects URLs from the old SaaS to the matching pages in Notion, and I wrote up how it works. I generally think redirects are unnecessary, but a SaaS used as a knowledge base has a big impact on work, so I provided a simp…
- [I made all Tech The Toaster books free, and a look back at my doujinshi activity](https://howdy39.dev/en/blog/2025-05-11-note-tech-the-toaster.md): I made all the books from my doujinshi circle, Tech The Toaster, free, and wrote a look back at the activity. I sold 1,650 print copies and 730 PDFs, for about 2 million yen in sales. I gained a lot, including how to bind and publish books, the practical side of running a shop, and new connections.…

### Blog › 2025/03

- [Design guidelines for disabling export in Notion in a business environment](https://howdy39.dev/en/blog/2025-03-31-note-notion-export-disable-guideline.md): Notion's export feature is handy, but it carries the risk of data being taken out. Only the Enterprise plan can disable export, so balancing security and backups becomes the challenge. I compared four patterns of workspace and teamspace settings. My recommendation is pattern C: disable export at the…
- [How to customize Slack notification messages with Notion automations](https://howdy39.dev/en/blog/2025-03-18-note-notion-automation-slack.md): When you notify Slack from a Notion button automation, the message can only say that a button was pressed. I wrote about a way to include things like the page name without an external tool such as Zapier. The button's automation edits a 'notification message' property (for example with the now() fun…
- [Thinking about My Notion Way](https://howdy39.dev/en/blog/2025-03-11-note-my-notion-way.md): Notion lets you build freely like Lego, which is exactly what makes it hard to use. So I wrote about how I use it. The key is databases: put pages in a database by default, start with a single database and split it when needed, drop the folder mindset, hide the sidebar and use search (cmd/ctrl + K).…

### Blog › 2025/02

- [Notion seems to be becoming the center of work, not just a documentation or project/task management tool](https://howdy39.dev/en/blog/2025-02-17-note-notion-center-of-work.md): I wrote down what I thought after using Notion at work for a month. I think Notion goes beyond a documentation or project/task management tool: it can be the center of work and a tool for building business processes. Before adopting it, we ran work across four tools (Slack, Slack workflows, esa and…

### Blog › 2025/01

- [Google Workspace's AI add-ons are being retired and folded into the base plans: what changes](https://howdy39.dev/en/blog/2025-01-16-zenn-google-workspace-ai-addon.md): Google Workspace changed how it bills for AI features, so I explained the changes for IT admins. The paid 'Gemini for Google Workspace' add-ons are being retired and the AI features are built into the base Standard and Enterprise plans. Plan prices were revised along with that: Business Starter goes…

### Blog › 2024/12

- [2024 in review](https://howdy39.dev/en/blog/2024-12-30-note-2024-review.md): I looked back on 2024. After the Noto Peninsula earthquake, I switched to a more capable safety confirmation service. My talks included a conversation about adopting Admina, the SaaS management keynote at ITmedia Digital Strategy EXPO, Uchi no Joshisu Connect + i, a lightning talk at Findy, and Corp…
- [Trying to build a highly resilient corporate IT organization](https://howdy39.dev/en/blog/2024-12-24-note-resilient-it-team.md): This is the Day 24 post of the 'corp-engr Joshisu Slack' advent calendar. I think the resilience of a corporate IT organization is the ability to adapt quickly in the face of change, recover its functions, and grow into a stronger organization. I wrote about it from five angles: office facilities, k…
- [Supporting services that fulfill diverse businesses with cutting-edge IT products: the work of a corporate engineer at STORES](https://howdy39.dev/en/blog/2024-12-10-stores-note-interview-corporate-engineer-work.md): I was interviewed on STORES note about the work of a corporate engineer. I talk about what the IT division does: managing and improving the SaaS apps all employees use, maintaining devices and the network, and promoting AI adoption in internal IT. It also covers how the IT division acts as a test ca…

### Blog › 2024/07

- [Extract the list of Slack legacy workflows with a script to make the migration smoother](https://howdy39.dev/en/blog/2024-07-22-zenn-slack-legacy-workflows.md): Slack's legacy workflows were scheduled to stop working on September 26, 2024. The admin console lists all workflows but has no export feature, which makes preparing the move hard. So I wrote a script for Chrome's DevTools console that copies the list as tab-separated text, ready to paste into a spr…
- [Using an LLM from a spreadsheet by combining the Dify API and GAS custom functions](https://howdy39.dev/en/blog/2024-07-14-zenn-dify-gas-custom-function.md): I wrote about using an LLM from a spreadsheet by combining the Dify API with a GAS custom function. As an example, it judges whether an image URL shows a dog. In Dify I built a workflow where GPT-4o analyzes the image and returns TRUE or FALSE, and a GAS custom function calls its API. You need to is…

### Blog › 2024/02

- [How a corporate engineer designs operations when adopting a safety confirmation service](https://howdy39.dev/en/blog/2024-02-21-stores-product-blog-safety-confirmation-service-operation-design.md): I wrote about how a corporate engineer designs operations when adopting a safety confirmation service, with security and APIs in mind, using the Toyokumo Safety Confirmation Service 2 we introduced at STORES. I cover the notification design, the design for registering and deleting accounts (automati…
- [Building a Looker Studio dashboard that visualizes SaaS usage with the Admina API from GAS](https://howdy39.dev/en/blog/2024-02-04-zenn-admina-api-looker-studio.md): I made SaaS usage visible in Looker Studio by calling Admina's API from GAS. GAS calls two Admina endpoints in sequence, writes the results to a spreadsheet, and Looker Studio visualizes them. You can search by email address to see which services a person uses, or filter by offboarding status to fin…

### Blog › 2024/01

- [Raising your interpretation skills changes the world you see](https://howdy39.dev/en/blog/2024-01-14-note-interpretation-skill.md): I wrote about how raising your interpretation skills changes the world you see. In 2023, I used 'sorry' 42 times and 'thank you' 385 times on Slack, a ratio of about 1 to 18. When someone points out a gap in a document, I reply 'thank you for noticing,' not 'sorry,' and add what I fixed. That makes…
- [Fixing 1Password team report dates with a GAS custom function](https://howdy39.dev/en/blog/2024-01-11-zenn-1password-report-date-gas.md): The last login time in a 1Password team report comes in a format like '31 Dec 2023 06:12,' which standard spreadsheet functions can't convert into a date. So I used a GAS custom function: a container-bound script with a function that simply passes the date string to new Date. I also wrote that I wis…
- [There is dramatic growth that comes with a change in behavior](https://howdy39.dev/en/blog/2024-01-08-note-behavior-change-growth.md): I wrote about how some growth comes with a change in behavior. There is gradual growth from knowledge and experience, and dramatic, stepwise growth that comes with changing how you act. In February 2016, at the end of my twenties, I realized I wasn't feeling any growth and decided to change jobs. Ov…

### Blog › 2023/12

- [2023 in review](https://howdy39.dev/en/blog/2023-12-31-note-2023-review.md): I looked back on 2023, mostly on the work side. I wrote about automating the creation of shared drives and Google Groups, a smart chip add-on for Google Docs, RAG development with ChatGPT, adopting Admina, building with the new Slack workflows, updating gas-clasp-starter, a talk about GAS, and servi…
- [How should corporate IT manage SaaS accounts? Sharing a workflow built on Admina's role feature](https://howdy39.dev/en/blog/2023-12-28-note-admina-role-account-management.md): Admina released a role feature, so I wrote about my ideal of SaaS account management and the workflow we actually run at STORES with it. I cover why we needed roles, the assumptions for using Admina, how SaaS apps are connected, how to review accounts with the integration method and the CSV upload m…
- [Automatically invite people who react with an emoji to a Google Calendar event using the new Slack workflows](https://howdy39.dev/en/blog/2023-12-10-zenn-slack-workflow-emoji-calendar-invite.md): I explain how to use the new Slack workflows to automatically invite people who react with an emoji to a Google Calendar event. You create a Slack emoji for the event, and the workflow adds whoever reacts as a guest. No code is needed, so it works well for internal events.
- [STORES is hiring corporate engineers!](https://howdy39.dev/en/blog/2023-12-04-note-stores-corporate-engineer-hiring.md): I'm hiring a corporate engineer at STORES, so I wrote about the kind of person I'd like to join, which is also what I value in my own work. I list four things: someone who "fits" my team, someone who wants to make the world better, someone who makes me less busy, and someone who likes STORES as a se…

### Blog › 2023/11

- [How to build a Google Docs add-on that turns esa articles into smart chips](https://howdy39.dev/en/blog/2023-11-24-zenn-esa-smart-chip-docs-addon.md): I explain how to build a GAS add-on that makes Google Docs smart chips work for things outside Google Workspace. As an example, I made an add-on that converts articles from the documentation service esa into smart chips. You can convert by pasting a link and pressing TAB, or by turning an existing l…
- [Issue a Google Meet URL with the new Slack workflows](https://howdy39.dev/en/blog/2023-11-08-zenn-slack-workflow-google-meet-url.md): I explain how to use the Google Meet step in the new Slack workflows to issue a Meet URL from Slack and post it to a channel. There used to be no Meet API, so you needed a workaround that created a Google Calendar event, plus some code. Now you can build a "/meet"-style command with no code. I also…
- [Distributing a Google Apps Script add-on to users in your domain](https://howdy39.dev/en/blog/2023-11-05-zenn-gas-addon-domain-distribution.md): I explain how to distribute an add-on built with GAS to users in your domain. It's almost the same as publishing a public add-on, using the Google Workspace Marketplace SDK. I cover linking the GAS project to a Google Cloud project, the OAuth consent screen, and configuring and installing the SDK. I…

### Blog › 2023/10

- [Building a super simple spreadsheet add-on with Google Apps Script](https://howdy39.dev/en/blog/2023-10-29-zenn-gas-simple-spreadsheet-addon.md): I rarely see people using spreadsheet add-ons built with GAS, so I wrote a how-to series, and this is the first part: building a super simple add-on. It shows an add-on screen in the sidebar and writes the text you enter into the selected cell. I also explain how add-on installation works and how th…

### Blog › 2023/09

- [An introduction to the Jamf Pro API with API roles and API clients](https://howdy39.dev/en/blog/2023-09-03-zenn-jamf-pro-api-roles-clients.md): I wrote an introduction to using the Jamf Pro API with the API roles and API clients added in Jamf Pro 10.49.0 in August 2023. The old way created a user and fetched a Bearer token with Basic authentication, which meant sending a raw password. Now you can easily create an access token with limited p…

### Blog › 2023/08

- [Offensive corporate IT that doesn't slow the business: moving 400 accounts and what I aim for now](https://howdy39.dev/en/blog/2023-08-30-stores-note-interview-400-account-migration.md): I was interviewed on STORES note. It centers on the move of about 400 accounts after our company name change and streaming the company-wide review meeting, and I talk about my career so far and what I aim for in corporate IT. It covers how I went from SIer to front-end engineer to corporate IT, the…
- [How to build a simple ticketing system with the new Slack workflows](https://howdy39.dev/en/blog/2023-08-17-zenn-slack-workflow-simple-ticketing.md): I explain how to build a simple ticketing system with the new Slack workflows. A Slack workflow form takes requests and writes the requests and tickets to a spreadsheet. Those two parts are the essentials, and I also introduce optional extras: notifications with GAS and a Slack workflow, and visuali…

### Blog › 2023/04

- [Exporting the settings of every Google Group in your domain with GAS](https://howdy39.dev/en/blog/2023-04-30-zenn-gas-export-google-groups-settings.md): I explain the code I wrote with GAS to export the settings of every Google Group in the domain to a spreadsheet. It uses the AdminDirectory and AdminGroupsSettings services. I also cover implementation points, such as getting the domain from the executing user, so it should help with how to write GA…
- [I built an assistant bot that answers questions from internal documents with ChatGPT](https://howdy39.dev/en/blog/2023-04-24-note-chatgpt-internal-assistant-bot.md): I developed and released an internal assistant bot (a Slack bot) that uses ChatGPT, and this post introduces it. It answers questions from the articles in the help section of esa, our internal documentation tool, and it has a feedback feature. I also write about the fine-tuning and the long road to…
- [I ran an internal Google Apps Script training: how I ran it and what I taught beginners](https://howdy39.dev/en/blog/2023-04-14-note-gas-internal-training.md): In November and December 2022 I ran a GAS training for people inside the company, so I wrote about how I ran it and what I taught beginners. I think most of what people want to do with GAS fits three patterns: run on a form submission, read and write a spreadsheet, and search or send Gmail, so the t…
- [How we moved Google Workspace accounts after our company name change](https://howdy39.dev/en/blog/2023-04-03-stores-product-blog-google-workspace-account-migration-rename.md): I explain how we moved Google Workspace accounts after our company changed its name from hey, Inc. to STORES, Inc. I cover why we chose moving accounts over just adding a domain alias, the overall picture and the timeline, then the steps for issuing accounts and moving Google Groups and calendars, a…
- [We're holding the STORES PX Advent Calendar 2023 Spring](https://howdy39.dev/en/blog/2023-04-03-note-stores-px-advent-calendar-spring.md): I wrote the announcement and article list for the "PX Advent Calendar 2023 Spring", which the PX (People eXperience) division at STORES is running on weekdays in April. PX has five teams: recruiting, labor, culture, IT and PR, and the aim is to let people see the work they do. I update the links to…

### Blog › 2023/03

- [Trying DocsBot AI](https://howdy39.dev/en/blog/2023-03-14-zenn-docsbot-ai-trial.md): These are my personal notes from trying DocsBot AI, a SaaS that lets you search any documents you load into it (ChatGPT runs behind the scenes), on the free plan. I walk through signing up, creating a bot, adding my Zenn articles as .txt sources and chatting with it, and share impressions, such as t…

### Blog › 2023/01

- [Building a convenient and secure shared drive operation with Google Forms and GAS](https://howdy39.dev/en/blog/2023-01-01-zenn-secure-shared-drive-operation.md): I explain how to build a convenient and secure shared drive operation with Google Forms and GAS. If external sharing is allowed in My Drive, anything goes, and it's hard to handle files when their owner leaves, so organization files belong in shared drives, but shared drives have their own quirks. A…

### Blog › 2022/03

- [Corporate IT thought about Developer eXperience, so engineers can now swap their company PCs at any time](https://howdy39.dev/en/blog/2022-03-07-note-engineer-pc-anytime-replacement.md): I created a system that lets hey's engineers swap their company-issued PCs at any time, and I wrote about why I made that decision. PCs used to be replaced every three years, but there was no real meaning behind three years; nobody had thought deeply about replacing development PCs. Now not only eng…

### Blog › 2021/12

- [2021 in review](https://howdy39.dev/en/blog/2021-12-31-note-2021-review.md): I looked back on 2021. I wrote about what I did this year, splitting the team in two and making many improvements to our internal IT environment, and touched on what I want to do next year. What I wrote in my 2020 review, that I won't go back to being a software engineer, is still true, and these da…
- [How to make a bingo card with Google Slides](https://howdy39.dev/en/blog/2021-12-06-zenn-google-slides-bingo-card.md): For a remote bingo game at work that used Slack emoji instead of numbers, I wrote GAS code that generates bingo cards automatically, and here I explain how I built it. Rather than just explaining, I try to show what I'm thinking when I build this kind of tool with GAS. I cover how I choose between c…

### Blog › 2021/08

- [A journey to find a lens for stray cats: FE 85mm F1.8 SEL85F18](https://howdy39.dev/en/blog/2021-08-22-note-stray-cat-lens-sel85f18.md): I had been shooting stray cats with the kit lens on my α7C, and while looking for a better lens I rented the FE 85mm F1.8 (SEL85F18) prime from GooPass. My overall verdict is that it was great. I love how bright it is and its bokeh. 85mm is a good angle for stray cats, since you can shoot from a dis…
- [If a software engineer becomes a corporate engineer, do they get reincarnated into another world?](https://howdy39.dev/en/blog/2021-08-16-note-software-engineer-to-corporate-engineer.md): There was a tweet saying that a software engineer who becomes a corporate engineer gets reincarnated into another world, and I wrote about why I think so, from my own experience of moving internally into corporate IT. "Being able to code" has levels: basic logic, APIs, Git and GitHub, languages used…
- [The one who reminds and the one who is reminded](https://howdy39.dev/en/blog/2021-08-02-note-reminders.md): I saw someone who used to be on the receiving end of reminders start reminding other people, and I wrote about what that made me think. A reminder comes from not trusting 100% that something is done, and the person being reminded shouldn't forget they are using up the other person's mental resources…

### Blog › 2021/07

- [Mentioning someone from GAS by email address instead of Slack ID](https://howdy39.dev/en/blog/2021-07-14-zenn-gas-slack-mention-by-email.md): When sending a Slack message with a mention from GAS, I often see people use the Slack user ID with Incoming Webhooks, but these days I rarely do that and use a Slack Workflow Builder webhook instead. Using the example of messaging Google Form respondents on Slack from their email addresses, I expla…

### Blog › 2021/05

- [Why does it go badly when corporate IT manages every SaaS?](https://howdy39.dev/en/blog/2021-05-31-note-why-corporate-it-should-not-manage-all-saas.md): I wrote my own view on why it doesn't work when corporate IT manages every SaaS. There are four reasons: work slows down, security risk goes up, evaluation becomes harder, and management costs grow. Beyond that, I also write about the difference between strong and weak organizations, and how SaaS sh…

### Blog › 2021/02

- [hey has started hiring one more corporate engineer!](https://howdy39.dev/en/blog/2021-02-15-note-hey-corporate-engineer-hiring-2021.md): hey decided to add one more corporate engineer, so I wrote about our IT team and the kind of person I'd like to join. I explain how headcount and the IT team have changed, what's distinctive about the team, the technical skill and open way of working I look for, what I'd like them to do, the skills…
- [How improving hey's online review meeting turned it into something like a TV shoot](https://howdy39.dev/en/blog/2021-02-08-note-hey-review-meeting-online-streaming.md): I wrote about how gradually improving the online broadcast of hey's company-wide review meeting ended up feeling like a TV shoot. In order, I describe moving to Google Meet and streaming, letting viewers follow the Slack thread alongside, building a simple studio in the office, buying the equipment,…

### Blog › 2020/12

- [2020 in review](https://howdy39.dev/en/blog/2020-12-31-note-2020-review.md): This is my 2020 review, but the content looks back on the 13 years I worked as a software engineer. I split it into four eras: SIer, G Suite (freelance), GCP (TOPGATE) and front-end (STORES.jp), and I also write about changing jobs to become a corporate engineer in 2020, plus an overall summary.
- [Becoming a corporate IT manager and bringing software engineering's good culture to the team](https://howdy39.dev/en/blog/2020-12-23-note-it-manager-software-engineering-culture.md): For the hey Advent Calendar 2020, I wrote about the six months since I moved internally into corporate IT in April and became a manager in July, and how I brought software engineers' good culture into the team. I introduce raising psychological safety (through 1-on-1s and team building), giving eval…

### Blog › 2020/07

- [hey is looking for IT support to keep our internal IT running!](https://howdy39.dev/en/blog/2020-07-17-note-hey-it-support-hiring.md): I'm hiring IT support for hey's internal IT, and I wrote about the background and the kind of person I'd like to join. We aren't replacing people who left; we're fixing the imbalance between the growth in headcount and IT staff. As we move from a defensive phase to an offensive one, this is less a h…
- [hey is looking for a corporate engineer to support our internal IT!](https://howdy39.dev/en/blog/2020-07-03-note-hey-corporate-engineer-hiring-2020.md): I'm adding one corporate engineer to support hey's internal IT, so I wrote about what I've done since moving in April and the kind of person I'd like to join. Q2 (April to June) was a rebuilding phase, where I worked on task management, workflow setup, security improvements and documentation, and fr…

### Blog › 2020/03

- [I'm changing jobs from front-end engineer to corporate engineer](https://howdy39.dev/en/blog/2020-03-31-note-job-change-to-corporate-engineer.md): From April 1, 2020 I'm moving from front-end engineer to corporate engineer (on the development side), and I wrote down my thoughts as a record. I stay at STORES.jp but move to hey, the holding company. The reasons are that my role in the front-end team had shrunk and that I had long been building i…

### Blog › 2019/12

- [2019 in review](https://howdy39.dev/en/blog/2019-12-31-note-2019-review.md): I looked back on 2019, split into work, side jobs, writing a technical book, lightning talks, Qiita, OSS, English, shopping and investing, plus an overall summary. At work I stayed at STORES, and I touch on how my front-end article started a movement to write articles inside the company, which led t…
- [Building a search application by combining Nuxt.js, Google Apps Script and a spreadsheet (as the DB)](https://howdy39.dev/en/blog/2019-12-23-qiita-nuxt-gas-search.md): I wrote about publishing a search app built with Nuxt.js (SPA mode) as a GAS web app. The data lives in a spreadsheet, and the screen is embedded in Google Sites. GAS can't host HTML and JS as they are, so I automated, with a script, a setup that converts the built JS into html files and loads them…

### Blog › 2019/11

- [A weekly rotation for operations and kaizen using GitHub, GAS and Google Data Studio](https://howdy39.dev/en/blog/2019-11-17-qiita-weekly-kaizen-rotation.md): I introduce how the STORES front-end team assigns a different person each week to operations and kaizen (continuous improvement). Whoever is on duty investigates and handles the day's bugs and pays down technical debt that is easy to neglect. Tickets are managed in GitHub Projects, the kanban board…

### Blog › 2019/10

- [I've been at STORES.jp (hey) for exactly one year, so here's STORES front-end development](https://howdy39.dev/en/blog/2019-10-01-note-stores-frontend-development.md): I've been at STORES.jp (hey) for exactly one year, so I wrote about STORES front-end development as of October 2019. The team I joined with three people has grown to nine, and I cover what we built in the year, how we work, languages and libraries, testing, UI implementation, error monitoring, writi…

### Blog › 2019/07

- [Techniques for making presentation slides with Google Slides](https://howdy39.dev/en/blog/2019-07-23-qiita-google-slides-presentation-techniques.md): I introduce the techniques I keep in mind when making presentation slides in Google Slides, assuming you use them for talks at study sessions, with slides I actually made as the example. Text size, color and position should be adjusted in the master rather than slide by slide, which is similar to us…

### Blog › 2019/04

- [I exhibited at Tech Book Fest 6, so here are my notes on check counts and impressions](https://howdy39.dev/en/blog/2019-04-14-note-tech-book-fest-6.md): I exhibited at Tech Book Fest 6 again, so I wrote about how the number of checks went and my impressions. Checks passed the previous 411 and reached 479, and I distributed about 415 copies of the new Network edition and 195 of the earlier Console edition. This was the last distribution of the printe…

### Blog › 2018/12

- [Embedding a YouTube player in Nuxt](https://howdy39.dev/en/blog/2018-12-30-qiita-nuxt-youtube-player.md): To embed a YouTube player in Nuxt, you can just load and use the vue-youtube library, and that's what this article shows. vue-youtube wraps youtube-player, which implements the YouTube Player API for iframes. Controls like play and pause use the iframe API as is, and events fire through emit. There'…
- [2018 in review](https://howdy39.dev/en/blog/2018-12-30-note-2018-review.md): I looked back on 2018, split into work, Tech Book Fest, Qiita, OSS, personal services, English and shopping, plus an overall summary. For work, I left TOPGATE and joined STORES.jp (hey) in October, and I touch on renewing the store design screen by replacing AngularJS 1.x with Nuxt.js while adding f…
- [Introducing plugins that detect the user agent in Nuxt.js](https://howdy39.dev/en/blog/2018-12-25-qiita-nuxt-user-agent-plugins.md): I introduce two plugins that are handy when you want to switch behavior by user agent in Nuxt.js: nuxt-device-detect and nuxt-user-agent, which I found by searching. nuxt-device-detect suits simply telling mobile from PC, and its detection code is under 70 lines, so it's also a useful reference when…
- [Creating a Vue.js directive that stops the default click event](https://howdy39.dev/en/blog/2018-12-24-qiita-vue-prevent-click-directive.md): I explain how to build a Vue.js directive (v-prevent-click) that runs event.preventDefault() on click. In the editor screen for building a store's web page, parts that become links in the live store have to look like links but do nothing when clicked, and defining @click on every tag is too much wor…
- [Creating a Nuxt middleware that blocks direct access](https://howdy39.dev/en/blog/2018-12-24-qiita-nuxt-block-direct-access-middleware.md): In an SPA where initial setup happens on a different page, you may want to block direct access to deep pages, so I show how to build a Nuxt middleware for that. On a direct visit it redirects to the page that does the initial setup. The mechanism is simple: it treats a visit as direct access when fr…
- [A handy trick for showing something at a distance on mouse hover](https://howdy39.dev/en/blog/2018-12-15-qiita-mouse-hover-display-tricks.md): I introduce a handy technique for showing another element at a distance on mouse hover, such as the child categories of a category menu, without it vanishing the moment the cursor leaves the element. I compare three patterns with samples: using :hover, using @mouseenter and @mouseleave, and combinin…
- [Web service development with Nuxt, Netlify and Firebase, and technology choices for solo development](https://howdy39.dev/en/blog/2018-12-09-qiita-nuxt-netlify-firebase-tech-choices.md): Using a web service I built with Nuxt, Netlify and Firebase that toggles the visibility of Google Calendars in bulk as the example, I explain the points of choosing technology for solo development. In order, I cover building the screens, deployment, domain and SSL, operating Google Calendar, where d…
- [I attended NuxtMeetUp#6 through the blog slot](https://howdy39.dev/en/blog/2018-12-08-note-nuxt-meetup-6.md): I attended NuxtMeetUp#6 on December 6, 2018 through the blog slot, and I wrote about it. The general slots were by lottery and I wasn't sure I'd get in, so I applied through the blog slot. I introduce what I picked up at the venue and the talks from the first speaker through the sixth.

### Blog › 2018/11

- [Getting started with a Nuxt, ElementUI and Storybook Vue project](https://howdy39.dev/en/blog/2018-11-18-qiita-nuxt-elementui-storybook-setup.md): When I tried starting with Nuxt, ElementUI and Storybook, I struggled to get ElementUI working in Storybook, so I wrote down the steps. You create a Nuxt project with element-ui, make a component and check it works, then add Storybook and create a webpack.config.js so ElementUI can be used. The fina…
- [Learning Vue.js CSS transitions step by step](https://howdy39.dev/en/blog/2018-11-04-qiita-vue-css-transition-step-by-step.md): I explain animation with Vue.js CSS transitions step by step. The implementation is simple, but I found the official site a bit hard to follow, so I start from a screen with no animation, wrap it in <transition> and add .v-enter, and go on to .v-enter-active, .v-enter-to, the timing of disappearing…

### Blog › 2018/10

- [My impressions after exactly one month at STORES.jp (hey)](https://howdy39.dev/en/blog/2018-10-31-note-stores-one-month-impressions.md): I've been at STORES.jp (hey) for exactly one month, so I wrote my impressions of the company and what I think I need to work on. I introduce working hours (flextime), remote work, the office location and benefits, and list things I want to tackle, such as the legacy front-end problem and the problem…
- [Announcing mail order for the Chrome DevTools book, and my impressions of exhibiting for the first time #TechBookFest5](https://howdy39.dev/en/blog/2018-10-14-note-chrome-devtools-book-sales-tech-book-fest-5.md): The Chrome DevTools book I distributed at Tech Book Fest 5 sold out all 512 copies, spares included, and I reordered it, so I wrote an announcement that mail order is starting along with my impressions of exhibiting for the first time. It's for people who want to exhibit but feel a little nervous, a…

### Blog › 2018/09

- [The story from why I started writing the Chrome DevTools book to submitting it for print #TechBookFest5](https://howdy39.dev/en/blog/2018-09-21-note-chrome-devtools-book-story.md): On the day I submitted my book for Tech Book Fest to the printer, I wrote the story from why I started writing it to submission. It began when I learned about Eager evaluation in Chrome DevTools from a Google I/O 2018 session and wrote a Qiita article, and that led to exhibiting at Tech Book Fest, p…
- [Debugging objects with Chrome's Custom Object Formatters](https://howdy39.dev/en/blog/2018-09-13-qiita-chrome-custom-object-formatters.md): I briefly explain how to display objects in your own format with Chrome's Custom Object Formatters feature. It lets you customize what console.log(obj) shows, which may help with debugging. I cover that it only takes effect while the Console is open and how to build a custom formatter object (htmlTe…

### Blog › 2018/08

- [Quickly building a scraping server with Cloud Functions with Puppeteer and Google Apps Script](https://howdy39.dev/en/blog/2018-08-21-qiita-cloud-functions-puppeteer-gas-scraping.md): Cloud Functions began supporting Puppeteer on August 16, 2018, so I explain how to build a scraping server by combining Cloud Functions and GAS. The biggest advantage is that no environment setup is needed and you can build it with just a web browser. As an example, I make one that fetches Qiita's p…

### Blog › 2018/07

- [How to build a service that turns a spreadsheet into a Web API](https://howdy39.dev/en/blog/2018-07-29-qiita-spreadsheet-web-api-service.md): I explain how to build a service that turns a spreadsheet into a Web API. The approach using GAS has weaknesses, such as not being able to set the URL freely and limits on things like the number of requests, so I write about how to read a spreadsheet from any environment you like, such as a server o…

### Blog › 2018/05

- [Mastering the Chrome DevTools Console](https://howdy39.dev/en/blog/2018-05-20-qiita-chrome-devtools-console.md): I explain the handy features built into the Chrome DevTools Console. I cover the Command Line API ($$(selector), $(selector), $_, copy, clear, table, inspect, dir and more), the steps to analyze a Qiita page and pull the titles and URLs of trending articles, and Eager Evaluation, which returns evalu…

### Blog › 2018/04

- [Trying the new macro feature in Google Sheets](https://howdy39.dev/en/blog/2018-04-13-qiita-sheets-macros.md): Google Sheets gained a macro recorder, so I tried it right away. Using the example of drawing "HOWDY39" as pixel art in a spreadsheet, I show the steps from starting the recording through saving and running the macro, with screenshots. I also include the code the macro recorded.

### Blog › 2018/03

- [Deploying Google Apps Script from Circle CI](https://howdy39.dev/en/blog/2018-03-22-qiita-gas-deploy-circleci.md): I explain how to deploy GAS from Circle CI, adding CI/CD to my template for developing GAS in a local environment. After understanding how clasp works (.clasprc.json), you create a deploy script and a Circle CI config file and confirm that merging into the master branch triggers a deploy.
- [I made a template for developing Google Apps Script comfortably in a local environment](https://howdy39.dev/en/blog/2018-03-19-qiita-gas-clasp-starter.md): I made gas-clasp-starter, a template for developing Google Apps Script locally, and this post introduces it. It's based on google/clasp and uses webpack, TypeScript, TSLint, Prettier and Jest. It answers common complaints, like GAS not supporting newer syntax and not allowing source control, tests o…

### Blog › 2018/02

- [Trying the new calendar event change detection in GAS](https://howdy39.dev/en/blog/2018-02-28-qiita-gas-calendar-event-triggers.md): GAS gained calendar event triggers on February 26, 2018, so I tried them and wrote sample code. They can be applied when an event is written to your own calendar or registered on a meeting room calendar. I explain enabling the Calendar advanced service, setting the trigger, and actually creating eve…

### Blog › 2018/01

- [Google App Maker and the Apps Script dashboard](https://howdy39.dev/en/blog/2018-01-12-qiita-app-maker-apps-script-dashboard.md): These are notes from checking the new Dashboard feature in Apps Script from an App Maker point of view. I write that App Maker doesn't show up in the project lists, that its server-side script is recognized on the executions screen, and that the function name shows as doGet.

### Blog › 2017/12

- [Connecting GAS with Stackdriver (Logging, Error Reporting)](https://howdy39.dev/en/blog/2017-12-30-qiita-gas-stackdriver-logging.md): I explain how to send logs from GAS to Stackdriver Logging. After I wrote an earlier article on logging to a Google Doc, I found Stackdriver to be really handy, so I cover logging with console, sample code to try it, and how to check the result in Stackdriver Logging. This is the last-day post of th…
- [Google App Maker: running processing before rendering with AppLoader](https://howdy39.dev/en/blog/2017-12-29-qiita-app-maker-apploader.md): I explain how to use App Maker's AppLoader to run processing before a screen is rendered. Without AppLoader, data starts loading only after the page loads; with it, data can be loaded in advance. It isn't a very important feature, but it's good to know it exists.
- [Google App Maker: how to use Popups](https://howdy39.dev/en/blog/2017-12-28-qiita-app-maker-popup.md): These are notes on what's good to know when using the Popup modules added to App Maker in early December 2017. There are six kinds of Popup, with common options such as clickOutsideToClose, navigateToClose, hasGlass and escapeToClose. Now that they're officially supported, it's easier to build rich…
- [Google App Maker: how to use Resources](https://howdy39.dev/en/blog/2017-12-27-qiita-app-maker-resources.md): These are notes on using App Maker's RESOURCES, a feature for uploading files. Uploaded files can be used as the site's favicon or as images. The maximum file size is 16MB, and I confirmed that about 30 files can be uploaded. It isn't even mentioned on the official site, so it's easy to miss.
- [Google App Maker: mastering Transformers](https://howdy39.dev/en/blog/2017-12-26-qiita-app-maker-transformers.md): I explain a hand-picked set of the Binding Transformers I use most in App Maker: #formatDate, #formatNumber, #join, combining them, projection, #readonly and more. They let you change how data is displayed and cut down on script lines, so they're worth mastering.
- [Google App Maker: showing spreadsheet data with a Calculated model](https://howdy39.dev/en/blog/2017-12-26-qiita-app-maker-calculated-model.md): I explain how to show spreadsheet data with App Maker's Calculated model. A Calculated model is read-only and lets you use any data as a datasource. I cover how to create the datasource, both from a script and from a spreadsheet, and show it with a Tables widget.
- [Google App Maker: what you can do when an owner or an editor publishes the app](https://howdy39.dev/en/blog/2017-12-25-qiita-app-maker-owner-editor-publish.md): I summarize what you can do depending on whether an owner or an editor publishes an App Maker app. My conclusion is that there are many bugs, so you're better off not publishing as an editor or changing the owner. I also note that VIEW LOGS opens but doesn't work because of missing permissions.
- [Google App Maker: embedding an app in another site](https://howdy39.dev/en/blog/2017-12-25-qiita-app-maker-embed-app.md): I explain how to embed an App Maker app in another site. The app's URL is long and hard to read, and it's a hassle to tell everyone again if you rebuild the app, so I often embed it with an iframe. I cover two cases: embedding in new Google Sites, and in anything else (turning on Allow embedding app…
- [Google App Maker: controlling models and pages with Roles](https://howdy39.dev/en/blog/2017-12-24-qiita-app-maker-roles.md): I explain how to use Roles in App Maker. A Role is created in two steps, definition (APP SETTINGS) and assignment (DEPLOYMENTS), and assignments can differ per environment. Models default to AdminsOnly and pages to Everyone, and you set Roles on them to build an app with security in mind.
- [Google App Maker: about the application execution account](https://howdy39.dev/en/blog/2017-12-24-qiita-app-maker-execution-account.md): I explain the difference between running App Maker's server scripts as the User's account or the Developer's account. The default is the User's account, and you choose between them based on the sender of emails, spreadsheet permissions and which account's quota is consumed.
- [Google App Maker: a list of the default actions](https://howdy39.dev/en/blog/2017-12-12-qiita-app-maker-default-actions.md): I list and outline the actions App Maker provides by default, such as Custom Action, Navigate to Page, Reload Datasource, Create New Item, Delete Current Item and Open Dialog. The idea is to build apps quickly with the default actions instead of writing code.
- [My personal summary of App Maker in 2017](https://howdy39.dev/en/blog/2017-12-01-qiita-app-maker-2017-review.md): I looked back on my involvement with App Maker in 2017. I write about how I started around July, learning from the official documentation and references because there was no Japanese information, introducing it internally, training, talks and lightning talks, writing on Qiita, and my thoughts.

### Blog › 2017/11

- [Google App Maker: how to back up Drive Tables](https://howdy39.dev/en/blog/2017-11-12-qiita-app-maker-drive-tables-backup.md): I explain how to back up Drive Tables, App Maker's standard database. My conclusion: if there are no date fields, use the standard export; if there are, write a script; if you also use relations, write a more elaborate script; and if you have the budget, use Cloud SQL. I cover the export feature and…

### Blog › 2017/10

- [Google App Maker: making search work with Japanese](https://howdy39.dev/en/blog/2017-10-03-qiita-app-maker-japanese-search.md): I explain a workaround for the error that occurs when you use Japanese in a datasource query parameter in App Maker (as of October 3, 2017). Adding encodeURIComponent where the parameter is set and decodeURIComponent where the query is run makes searching in Japanese work without errors.
- [Google App Maker: how to get the URL that is open from a script](https://howdy39.dev/en/blog/2017-10-02-qiita-app-maker-get-current-url.md): These are notes on how to get the currently open URL from an App Maker script. On the server side use ScriptApp.getService().getUrl(); on the client side use google.script.url or window.parent.document.referrer. I don't recommend the latter because the page structure may change. I also describe how…

### Blog › 2017/09

- [Points to keep in mind when using the Cloud Translation API](https://howdy39.dev/en/blog/2017-09-27-qiita-cloud-translation-api-points.md): These are notes on using Google's Cloud Translation API. I cover how to translate with POST, the fact that URL encoding is required when using GET, the two kinds of translation including the default neural machine translation (NMT), supported languages, pricing and character counts.
- [Chrome extensions: context menus (ContextType / ItemType)](https://howdy39.dev/en/blog/2017-09-25-qiita-chrome-extension-context-menu.md): I summarize ContextType and ItemType for adding items to the context menu (the right-click menu) in a Chrome extension. I cover how to write it in background.js, how to give contexts several ContextTypes, and how to add multiple items with chrome.contextMenus.create.
- [Google App Maker: common pitfalls with PageFragment instances](https://howdy39.dev/en/blog/2017-09-17-qiita-app-maker-pagefragment-instance.md): I summarize the common pitfalls with PageFragment instances in App Maker. PageFragments are used in two ways, as shared parts across pages and as parts reused within a page, and the latter are instances. You can bind from an instance to its parent page but not the other way around, though a script c…
- [Google App Maker: about the URL parameters at runtime](https://howdy39.dev/en/blog/2017-09-11-qiita-app-maker-url-parameters.md): I explain the runtime URL parameters in App Maker, console and devConsoleProjectId. The debug screen shown in PREVIEW comes from these parameters, not from PREVIEW itself. Once you understand them, you can see the production-like screen in PREVIEW and bring up the debug screen in production.
- [Google App Maker: search techniques with Query](https://howdy39.dev/en/blog/2017-09-08-qiita-app-maker-query-techniques.md): I introduce techniques for adding filter conditions above a list in App Maker. Query Filter only does AND searches and can't specify OR, so for an OR search you use Query Builder. I explain both its basic use and more advanced use.

### Blog › 2017/08

- [Google App Maker: how to load data into Drive Tables](https://howdy39.dev/en/blog/2017-08-31-qiita-app-maker-drive-tables-data-import.md): I explain three ways to load data into App Maker's Drive Tables: the Form widget, Import Data From Sheet, and writing your own script. They help when you register data many times during development and for initial data in production. I also cover bulk deletion and watching out for time zones when ha…
- [Google App Maker: understanding environments](https://howdy39.dev/en/blog/2017-08-28-qiita-app-maker-environments.md): These are notes on the idea of environments in App Maker. I lay out, with diagrams, that you can create any number of environments beyond PREVIEW, staging and production, that they're deployed from the source at the time you PUBLISH, and that each environment gets its own project ID, Drive Tables an…

### Blog › 2017/07

- [Creating an email address on your own domain with Google Domains and G Suite](https://howdy39.dev/en/blog/2017-07-26-qiita-google-domains-gsuite-custom-email.md): Now that Google Domains is available in Japan, I show with screenshots how to create an email address on your own domain with Google Domains and G Suite. Settings like MX records are configured automatically, so it's easy. The prerequisites are that you've signed up for Google Domains but not yet fo…
- [Using Jsonnet in Visual Studio Code](https://howdy39.dev/en/blog/2017-07-06-qiita-jsonnet-vscode.md): I introduce vscode-jsonnet, an extension for using Jsonnet in Visual Studio Code. Installing the extension alone isn't enough, so you also install Jsonnet with Homebrew. When you run it, the output defaults to YAML.
- [A thorough explanation of code completion in Google Apps Script](https://howdy39.dev/en/blog/2017-07-02-qiita-gas-code-completion.md): I thoroughly explain how code completion works in the GAS script editor. I go through the rules one by one: types assigned to variables are completed, completion works even on commented-out code, and array contents and function arguments aren't taken into account. The goal is to understand the rules…

### Blog › 2017/06

- [Logging design in Google Apps Script](https://howdy39.dev/en/blog/2017-06-25-qiita-gas-logging-design.md): The hardest part of starting with GAS for me was logging and debugging, so I wrote about how to deal with it. After laying out what's painful about Logger.log() and Browser.msgBox(), I introduce a logging design: write the logs you need during development to a Google Doc and email the results of pro…
- [How to write cell values with the Google Sheets API](https://howdy39.dev/en/blog/2017-06-14-qiita-sheets-api-write-cells.md): I summarize the three ways to write cell values with the Google Sheets API, how to use each, how they differ, and which to choose. I explain using UpdateCellsRequest with spreadsheets.batchUpdate, along with path parameters, the request body and the start and range properties. There's a companion ar…
- [How to read cell values with the Google Sheets API](https://howdy39.dev/en/blog/2017-06-03-qiita-sheets-api-read-cells.md): I summarize the three ways to read cell values with the Google Sheets API, how to use each, how they differ, and which to choose. With the first, spreadsheets.get, you use includeGridData, ranges and fields to control the cell data, range and the information returned. I also explain why three values…

### Blog › 2017/05

- [Setting up OAuth in Postman to call Google APIs](https://howdy39.dev/en/blog/2017-05-30-qiita-postman-oauth-google-api.md): I explain how to set up OAuth in Postman and call a Google API. You create an OAuth client ID on the Google side, enter it in Postman's authorization settings and get a token. It's the procedure I use to test Google APIs, and it should work in a similar way for any service that supports OAuth.
- [How to make a custom menu with Google Apps Script](https://howdy39.dev/en/blog/2017-05-28-qiita-gas-custom-menu.md): I explain how to add a custom menu to Google Sheets, Docs and Forms with GAS. I walk through getting the Ui class, creating the menu, adding items and adding the menu, plus separators, submenus and tidying up the source. The menu can run your own GAS functions.
- [Speeding up the Google Sheets API](https://howdy39.dev/en/blog/2017-05-18-qiita-sheets-api-speedup.md): I wrote about how to speed up the Google Sheets API. Requests that naively set each cell are very slow, so you write requests the way a person would work on the screen. Using a 100 by 100 grid, 10,000 cells, as an example, I compare a bad approach with a good one (updateCells).
- [Google Classroom is now open to the public](https://howdy39.dev/en/blog/2017-05-07-qiita-google-classroom-public.md): Google Classroom was opened to regular Gmail accounts, so I summarize what it is and how to use it. With screenshots, I show how to create a class (as the homeroom teacher), change the theme and add a co-teacher. It may be handy for IT study sessions and training, so this is a starting point for ado…

### Blog › 2017/03

- [Trying the Google Video Intelligence API demo](https://howdy39.dev/en/blog/2017-03-09-qiita-video-intelligence-api-demo.md): I tried the demo of Google's Video Intelligence API, released in private beta on March 9, 2017. Using the API requires an application, but anyone can try the demo right away. I show how to reach the demo page, pick a video, how the screen is laid out, and what happens after leaving it for a while.

### Blog › 2017/02

- [GitHub has added topics (tags)](https://howdy39.dev/en/blog/2017-02-01-qiita-github-topics.md): I introduce the topics (tags) feature GitHub added on February 1, 2017. You can freely set topics on a repository and search by them. I cover how to set them, the automatically suggested tags (suggested with machine learning, though not very smart yet), and what searching by topic looks like.

### Blog › 2017/01

- [I made a Chrome extension that makes Qiita more convenient](https://howdy39.dev/en/blog/2017-01-09-qiita-qiita-chrome-extension-q-accelerator.md): I built features I wished Qiita had as a Chrome extension, and this post introduces it. I named it Q Accelerator, meaning something that speeds up your activity on Qiita. It has features such as showing line numbers and article update times, which you can choose on the settings screen.

### Blog › 2016/11

- [Getting started with ESLint step by step](https://howdy39.dev/en/blog/2016-11-28-qiita-eslint-step-by-step.md): I explain how to get started with ESLint, a static analysis tool for JavaScript, step by step. It's a tool for producing clean, consistent code across a team. I cover how ESLint was pulling ahead of jshint and JSCS as of November 2016, and the flow from preparing the environment through creating pac…
- [Trying the newly released Google Slides API](https://howdy39.dev/en/blog/2016-11-14-qiita-google-slides-api-first-look.md): I tried the Google Slides API, which was released on November 10, 2016. I cover what Google Slides is, implementation examples such as md2gslides, which builds slides from Markdown, a demo that runs in the browser, and what's good to know before reading the reference.

### Blog › 2016/10

- [Understanding the JavaScript prototype chain with diagrams](https://howdy39.dev/en/blog/2016-10-03-qiita-javascript-prototype-chain.md): I wrote an article to understand the JavaScript prototype chain through diagrams. The goals are to make MDN's reference easier to read and to understand the structure of basic types such as Object and Array. I check things in the Chrome 52 console, in ES5, using `__proto__` for clarity, starting fro…

### Blog › 2016/09

- [Searching your browsing history quickly with the Chrome extension Falcon](https://howdy39.dev/en/blog/2016-09-20-qiita-chrome-extension-falcon.md): I introduce Falcon, a Chrome extension that was trending on GitHub. It's a browsing history search tool that searches the contents of sites too. You type "f" and your search text into the omnibox. I cover how to use it, the options, and a technical explanation of what happens when a site is opened a…
- [Making your website richer with animated gradients using Granim.js](https://howdy39.dev/en/blog/2016-09-15-qiita-granim-js-gradient-animation.md): I introduce Granim.js, a JavaScript library that was trending on GitHub, which animates gradients to make a website richer. I focus on the points that were hard to understand from the demo and the API, covering how to use it and supplementary notes on the API.
- [Learning next-generation CSS from cssnext](https://howdy39.dev/en/blog/2016-09-08-qiita-cssnext-next-generation-css.md): I list the draft CSS features you can use with cssnext. cssnext is like Babel for CSS, a bundle of PostCSS plugins. I cover automatic vendor prefixes, custom properties and var(), @apply and reduced calc(). The goal is to build knowledge of CSS that's still being drafted.
- [Getting started with PostCSS step by step](https://howdy39.dev/en/blog/2016-09-05-qiita-postcss-step-by-step.md): I explain how to modernize CSS with PostCSS, step by step. It's less a replacement for Sass than a shared foundation for building a CSS ecosystem. Aimed at people who don't even use Sass yet or don't understand the CSS ecosystem's libraries, it starts from creating a sample page.

### Blog › 2016/08

- [Getting started with webpack step by step](https://howdy39.dev/en/blog/2016-08-08-qiita-webpack-step-by-step.md): I made a hands-on guide for beginners to learn webpack (for webpack 1.x). There's an official tutorial, but looking at the boilerplates of OSS projects that use webpack, it seemed not to match how webpack is actually used, so I wrote this. The final source is published too.

### Blog › 2016/07

- [Trying the Google Cloud Natural Language API](https://howdy39.dev/en/blog/2016-07-21-qiita-google-cloud-natural-language-api.md): I tried the Cloud Natural Language API that Google released. I introduce what kinds of APIs were implemented, the API types and supported languages, entity analysis (Entities) and more. A demo is available so you can try it, and I updated the article in November 2017.
- [Comparing Google's Web API design with Web API best practices](https://howdy39.dev/en/blog/2016-07-19-qiita-google-web-api-design-vs-best-practices.md): I compared the content of "Web API design best practices" with Google's Web API that I use regularly, based on Calendar API event data, item by item. I organize items such as RESTful URLs, SSL, versioning in the URL and filtering and sorting with request parameters in a table, and I added a link to…
- [The Gmail settings API is now available](https://howdy39.dev/en/blog/2016-07-13-qiita-gmail-api-settings-endpoints.md): I explain, as notes, what the Gmail settings API added on July 7, 2016 makes possible. It covers filter settings, IMAP and POP settings and forwarding settings, and it's aimed at developers of services that send email, developers of mail clients and system administrators.

### Blog › 2016/06

- [Drawing a Gopher in Google Sheets with Go](https://howdy39.dev/en/blog/2016-06-30-qiita-draw-gopher-in-google-sheets-with-go.md): I drew Go's mascot, the Gopher, in Google Sheets using Go. It's a spreadsheet version of an article about drawing pictures in Excel. If you open the sheet in a browser while the API runs behind the scenes, the picture is drawn in real time. I also share findings such as the number of cells that can…
- [Improving a website's UX with Google Picker](https://howdy39.dev/en/blog/2016-06-08-qiita-google-picker-ux.md): I introduce how to improve a website's UX with Google Picker. The feature in Gmail that lets you pick a Google Drive file can be embedded in your own site with just a bit of JavaScript. There are pickers for Google Photos and more besides Drive, and it's like a cloud version of `<input type="file">`…

### Blog › 2016/05

- [Operating Google Sheets from a program](https://howdy39.dev/en/blog/2016-05-22-qiita-google-sheets-api-intro.md): Spreadsheet API v4 was released at Google I/O 2016 and made the previously weak API strong enough to build into systems, so I explain how to operate Google Sheets from a program and what you can actually do. Using a sample spreadsheet, I try what's possible and what isn't for data-related and operat…
- [Getting started with Karma step by step](https://howdy39.dev/en/blog/2016-05-16-qiita-karma-step-by-step.md): I explain front-end unit testing with Karma, step by step. Karma is a test runner that runs unit tests in the browser, and it also watches file changes and outputs reports. It doesn't depend on any specific framework and can be extended with plugins. At the end I add notes that seem important.

### Blog › 2016/04

- [Introducing tests to the front end](https://howdy39.dev/en/blog/2016-04-27-qiita-frontend-testing-introduction.md): I explain the overall flow of introducing tests for screen JavaScript in the front end, for people who have never done it. There are plenty of guides to Mocha, webpack and Karma individually, but not many that show the whole picture, so I start from creating the app to be tested and add things step…

### Blog › 2016/03

- [Trying the Google People API](https://howdy39.dev/en/blog/2016-03-01-qiita-google-people-api.md): Google's People API was released, so I wrote a brief explanation. It's like a combination of the Google+ API and the Contacts API, and I introduce people.get, people.getBatchGet and people.connections.list. In July 2017 create, update and delete were added and it was stated that it will replace the…

### Blog › 2016/02

- [Speeding up Google APIs](https://howdy39.dev/en/blog/2016-02-09-qiita-speeding-up-google-apis.md): I introduce ways to speed up Google APIs. There are four main ones: Batch Request, gzip compression, specifying the fields parameter, and GAE or GCE. Batch Request is a must when registering large amounts of data, and when running APIs many times from a screen, combining gzip, fields and GAE or GCE…
- [Understanding how Google API Batch Requests work](https://howdy39.dev/en/blog/2016-02-03-qiita-google-api-batch-request.md): I explain Batch Request, the mechanism in Google APIs for running multiple API calls at once. With fewer requests, the caller runs faster and Google's load drops too, so there are basically no downsides. Using the example of listing files with the Drive API, I show how to convert it to a Batch Reque…

### Speaking › 2026/11

- [Business Technology Conference Japan 2026, sponsor session: What I learned from standing on the business front line, and what corporate IT can do](https://howdy39.dev/en/talks/2026-11-28-btconjp-sponsor-session.md): November 28, 2026: Business Technology Conference Japan 2026, sponsor session: What I learned from standing on the business front line, and what corporate IT can do (Talk).

### Speaking › 2026/09

- [Hosted by Money Forward i: "The real reason I moved from corporate IT to an operating company" and "What is an Admina evangelist?"](https://howdy39.dev/en/talks/2026-09-02-mfi-admina-evangelist-webinar.md): September 2, 2026: Hosted by Money Forward i: "The real reason I moved from corporate IT to an operating company" and "What is an Admina evangelist?" (Talk).

### Speaking › 2026/08

- [Hosted by Business Notion Community: Real-world permission management in Notion for business use](https://howdy39.dev/en/talks/2026-08-22-business-notion-community-permissions.md): August 22, 2026: Hosted by Business Notion Community: Real-world permission management in Notion for business use (Talk).
- [Hosted by DXER, Inc. Voices from corporate IT, Vol. 11: Asking Nakano, who has "graduated from corporate IT," about building organizations that withstand change and the future of internal IT. Moving beyond "we don't have enough people" and customer success for internal IT](https://howdy39.dev/en/talks/2026-08-06-dxer-syskul-vol11.md): August 6, 2026: Hosted by DXER, Inc. Voices from corporate IT, Vol. 11: Asking Nakano, who has "graduated from corporate IT," about building organizations that withstand change and the future of internal IT. Moving beyond "we don't have enough people" and customer success for internal IT (Talk).

### Speaking › 2026/07

- [Barriers to adopting AI and how to overcome them: how do you actually build an AI help desk? Comparing three approaches: build it yourself, no-code, and SaaS](https://howdy39.dev/en/talks/2026-07-29-ai-helpdesk-pasona-mfi.md): July 29, 2026: Barriers to adopting AI and how to overcome them: how do you actually build an AI help desk? Comparing three approaches: build it yourself, no-code, and SaaS (Talk).

### Speaking › 2025/08

- [Notion webinar: Dramatically improve work efficiency! Learning from STORES about company-wide Notion adoption: results and practical tips](https://howdy39.dev/en/talks/2025-08-22-notion-webinar-stores.md): August 22, 2025: Notion webinar: Dramatically improve work efficiency! Learning from STORES about company-wide Notion adoption: results and practical tips (Talk).
- [JMUG #33: Notion for summer homework, and for JNUC too](https://howdy39.dev/en/talks/2025-08-07-jmug-33.md): August 7, 2025: JMUG #33: Notion for summer homework, and for JNUC too (Talk).

### Speaking › 2025/07

- [IIJ web seminar: How to bring out the full strength of a corporate IT team! Bringing software engineering culture into IT](https://howdy39.dev/en/talks/2025-07-11-iij-webinar.md): July 11, 2025: IIJ web seminar: How to bring out the full strength of a corporate IT team! Bringing software engineering culture into IT (Talk).

### Speaking › 2025/06

- [Beyond Corp IT DAY 2025: Three walls that block SaaS adoption, and a practical process learned from a Notion rollout](https://howdy39.dev/en/talks/2025-06-25-beyond-corp-it-day.md): June 25, 2025: Beyond Corp IT DAY 2025: Three walls that block SaaS adoption, and a practical process learned from a Notion rollout (Talk).

### Speaking › 2025/05

- [Co-hosted by Money Forward i and Notion Labs Japan: A closer look at growing companies today. Asking STORES and NOT A HOTEL about making corporate IT work more efficient](https://howdy39.dev/en/talks/2025-05-22-stores-not-a-hotel.md): May 22, 2025: Co-hosted by Money Forward i and Notion Labs Japan: A closer look at growing companies today. Asking STORES and NOT A HOTEL about making corporate IT work more efficient (Talk).

### Speaking › 2025/04

- [Uchi no Joshisu: Makuake, Inc. - 7 questions corporate IT asks corporate IT (facilitator)](https://howdy39.dev/en/talks/2025-04-15-uchi-no-joshisu-makuake.md): April 15, 2025: Uchi no Joshisu: Makuake, Inc. - 7 questions corporate IT asks corporate IT (facilitator) (Facilitator).

### Speaking › 2025/03

- [Uchi no Joshisu: STORES, Inc. - 7 questions corporate IT asks corporate IT](https://howdy39.dev/en/talks/2025-03-19-uchi-no-joshisu-stores.md): March 19, 2025: Uchi no Joshisu: STORES, Inc. - 7 questions corporate IT asks corporate IT (Talk).

### Speaking › 2024/10

- [CorpEn Night #1: Aiming for an AI-driven organization by adopting Dify](https://howdy39.dev/en/talks/2024-10-18-corpen-night-1.md): October 18, 2024: CorpEn Night #1: Aiming for an AI-driven organization by adopting Dify (Talk).
- [Hosted by Findy: What do corporate IT teams that accelerate the business look like? Lightning talk: "Optimizing internal information search with Slackbot × RAG"](https://howdy39.dev/en/talks/2024-10-02-findy-lt.md): October 2, 2024: Hosted by Findy: What do corporate IT teams that accelerate the business look like? Lightning talk: "Optimizing internal information search with Slackbot × RAG" (Lightning talk).
- [Optimizing internal information search with Slackbot × RAG](https://howdy39.dev/en/talks/2024-10-02-slides-slackbot-rag.md): October 2, 2024: Optimizing internal information search with Slackbot × RAG (Slides).

### Speaking › 2024/09

- [Uchi no Joshisu Connect + i, key session: "The new era of AI: AI strategies that corporate IT should face"](https://howdy39.dev/en/talks/2024-09-20-connect-i-keynote.md): September 20, 2024: Uchi no Joshisu Connect + i, key session: "The new era of AI: AI strategies that corporate IT should face" (Keynote).
- [The new era of AI: AI strategies that corporate IT should face](https://howdy39.dev/en/talks/2024-09-20-slides-ai-strategy.md): September 20, 2024: The new era of AI: AI strategies that corporate IT should face (Slides).

### Speaking › 2024/07

- [ITmedia: How should companies manage the explosion of SaaS? The "ideal" found by the corporate IT team of a company using over 200 SaaS apps](https://howdy39.dev/en/talks/2024-07-26-itmedia-saas-management.md): July 26, 2024: ITmedia: How should companies manage the explosion of SaaS? The "ideal" found by the corporate IT team of a company using over 200 SaaS apps (Media).
- [ITmedia Digital Strategy EXPO 2024 Summer: keynote on SaaS management, "Using SaaS management tools to achieve ideal account management"](https://howdy39.dev/en/talks/2024-07-17-itmedia-expo-keynote.md): July 17, 2024: ITmedia Digital Strategy EXPO 2024 Summer: keynote on SaaS management, "Using SaaS management tools to achieve ideal account management" (Keynote).

### Speaking › 2024/04

- [Hosted by Money Forward i: Six months with Admina! How STORES streamlined the account lifecycle with Admina, and where things stand now](https://howdy39.dev/en/talks/2024-04-17-admina-six-months.md): April 17, 2024: Hosted by Money Forward i: Six months with Admina! How STORES streamlined the account lifecycle with Admina, and where things stand now (Talk).

### Speaking › 2023/10

- [Device management with GAS, Spreadsheet and Looker Studio](https://howdy39.dev/en/talks/2023-10-11-slides-device-management.md): October 11, 2023: Device management with GAS, Spreadsheet and Looker Studio (Slides).

### Speaking › 2023/05

- [ChatGPT Assistant Bot: an internal assistant bot built with ChatGPT](https://howdy39.dev/en/talks/2023-05-12-slides-chatgpt-bot.md): May 12, 2023: ChatGPT Assistant Bot: an internal assistant bot built with ChatGPT (Slides).
