# Quartz

Quartz is an open-source Java job-scheduling library for creating schedules that execute jobs, with enterprise features including transactions and clustering.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Optimizing the Metal pipeline to maintain 120 FPS in GPUI

DevFeed: [Optimizing the Metal pipeline to maintain 120 FPS in GPUI](<https://devfeed.tech/articles/optimizing-the-metal-pipeline-to-maintain-120-fps-in-gpui-13397.md>)

Original publisher: [Read original article](<https://zed.dev/blog/120fps>)

Author: Nathan Sobo, Antonio Scandurra

Published: 2024-02-07T00:00:00Z

Content type: article

Language: en

Sources: [Zed Industries - Blog](<https://devfeed.tech/sources/zed-industries-blog.md>)

Topics: [Quartz](<https://devfeed.tech/topics/quartz.md>), [Latency](<https://devfeed.tech/topics/latency.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [blog-post](<https://devfeed.tech/tags/blog-post.md>), [code](<https://devfeed.tech/tags/code.md>), [latency](<https://devfeed.tech/tags/latency.md>), [performance](<https://devfeed.tech/tags/performance.md>), [quartz](<https://devfeed.tech/tags/quartz.md>)

### AI overview

This article explains how Zed investigated and fixed frame drops and janky scrolling in GPUI on an M2 MacBook. The issue involved differences between direct and composited rendering modes, Quartz compositor behavior, and synchronization between Metal presentation and window drawing.

### Source excerpt

Read the "Optimizing the Metal pipeline to maintain 120 FPS in GPUI" blog post.

## How to schedule jobs with Quartz on Ktor

DevFeed: [How to schedule jobs with Quartz on Ktor](<https://devfeed.tech/articles/how-to-schedule-jobs-with-quartz-on-ktor-25567.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2022/ktor-jobs-quartz/>)

Author: Marco Gomiero

Published: 2022-04-22T00:00:00Z

Content type: tutorial

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Ktor](<https://devfeed.tech/topics/ktor.md>), [Quartz](<https://devfeed.tech/topics/quartz.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [Database](<https://devfeed.tech/topics/database.md>), [Persistence](<https://devfeed.tech/topics/persistence.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [database](<https://devfeed.tech/tags/database.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ktor](<https://devfeed.tech/tags/ktor.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [persistence](<https://devfeed.tech/tags/persistence.md>), [quartz](<https://devfeed.tech/tags/quartz.md>), [scheduler](<https://devfeed.tech/tags/scheduler.md>), [scheduling](<https://devfeed.tech/tags/scheduling.md>)

### AI overview

This tutorial explains how to schedule recurring jobs in a Ktor backend project using Quartz. It covers Quartz's persistence of job state, database table setup, logging configuration, and scheduler creation, with MySQL used in the example.

### Source excerpt

SERIES: Building a backend with Ktor Part 1: Structuring a Ktor project Part 2: How to persist Ktor logs Part 3: How to use an in-memory database for testing on Ktor Part 4: How to handle database migrations with Liquibase on Ktor Part 5: Generate API documentation from Swagger on Ktor Part 6: How to schedule jobs with Quartz on Ktor Part 7: Moving from mobile to backend development with Ktor Sometimes, on a backend project, there is the need to run one or more tasks periodically, like for system administration, maintenance, backup, syncing content in the background, etc. These types of tasks can be scheduled "manually" with a cron job or with a scheduling library like Quartz, that makes easy for example the persistence of the task's state even after a reboot of the server.

## NSTableView vim keys

DevFeed: [NSTableView vim keys](<https://devfeed.tech/articles/nstableview-vim-keys-25382.md>)

Original publisher: [Read original article](<https://smileykeith.com/2013/01/08/nstableview-vim-keys/>)

Author: Keith Smiley

Published: 2013-01-09T00:19:00Z

Content type: tutorial

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

Topics: [Vim](<https://devfeed.tech/topics/vim.md>), [Code](<https://devfeed.tech/topics/code.md>), [App](<https://devfeed.tech/topics/app.md>), [data](<https://devfeed.tech/topics/data.md>), [Quartz](<https://devfeed.tech/topics/quartz.md>), [Stack Overflow](<https://devfeed.tech/topics/stackoverflow.md>)

Tags: [apis](<https://devfeed.tech/tags/apis.md>), [app](<https://devfeed.tech/tags/app.md>), [code](<https://devfeed.tech/tags/code.md>), [data](<https://devfeed.tech/tags/data.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [quartz](<https://devfeed.tech/tags/quartz.md>), [vim](<https://devfeed.tech/tags/vim.md>)

### AI overview

This article explains how to add Vim-style j and k navigation to an NSTableView in an OS X application. It describes attempts involving manual selection handling and Quartz Event Services, then presents an approach that works in a sandboxed application while preserving expected selection behavior.

### Source excerpt

I'm currently working on a OS X application that uses a few different NSTableViews to display user data. I was testing them out a bit to make sure multiple deletions worked correctly from my database and I found myself pressing 'j' and 'k' to try and move down and up. I decided it would be pretty cool to implement those two vim shortcuts into my table view just in case anyone else thinks like me. This functionality already exists in The Hit List an awesome GTD app that has a lot of baggage with me, and I'm sure it exists in other applications as well. In my NSTableView subclass' keyDown: method I tried a few things. Attempt 1: First I tried to re implement the functionality myself. In retrospect this doesn't make any sense but at first it was pretty simple. It looked something like this. NSUInteger flags = [theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask; NSNumber *shiftPressed = (flags & NSShiftKeyMask); if ([theEvent keyCode] == 38) { // j NSUInteger index = [[self selectedRowIndexes] lastIndex] + 1; if ([shiftPressed boolValue]) { [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:YES]; } else { [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; } } else if ([theEvent keyCode] == 40) { // k NSUInteger index = [[self selectedRowIndexes] lastIndex] - 1; if ([shiftPressed boolValue]) { [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:YES]; } else { [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; } } The issue with this is the way NSTableView typically expands it's selection. I think of it as a pivot point where you start. Then you go up and down relative to that point. So if you start at index 2 and go down till index 4, you should have 2 rows selected. Then when you go back up you should deselect the rows and indexes 3 and 4 and select the rows and index 1 and 0. At this point I realized it was more difficult than I r