profile
viewpoint

browserify/events 1135

Node's event emitter for all engines.

defunctzombie/ansible-coreos-bootstrap 226

[NOT MAINTAINED] bootstrap a coreos machine for control via ansible

browserify/node-util 194

node.js util module as a module

defunctzombie/badginator 116

badges for your badges

browserify/browser-resolve 99

resolve function which support the browser field in package.json

defunctzombie/bitcoin-address 62

bitcoin address verification and other tools

defunctzombie/changelog 51

changelog release management tool

defunctzombie/away 33

monitor when a user is inactive on a page

defunctzombie/bamboo 23

javascript model library for basic CRUD

defunctzombie/chain-js 9

callback chaining library for javascript

push eventfoxglove/studio

Roman Shtylman

commit sha e5712a32835a6b29a6167f2648f9530625104b5e

Ignore current seek when a new seek occurs in RandomAccessPlayer (#2231) In RandomAccessPlayer when a seek is already loading messages, new seek requests are queued (queue size of 1). Prior to this change, when a seek request arrived while an existing seek request was in-flight, the existing request would finish, emit state, and then the new request would start. Prior to emitting state, the in-flight seek request would set the nextReadStartTime which would override the nextReadStartTime of the latest seek request. Even if the seek requests were for the same time, the first request would alter the next read time of the subsequent request. This change updates the RandomAccessPlayer logic to detect if a seek request occured while another was in-flight and avoid emitting a state update for the now-stale seek request. Fixes: #1712

view details

push time in 3 hours

delete branch foxglove/studio

delete branch : roman/gh-1712

delete time in 3 hours

PR merged foxglove/studio

Reviewers
Ignore current seek when a new seek occurs in RandomAccessPlayer

User-Facing Changes Fixes an intermittent incorrect warning "bag went back in time" when switching layouts.

Description In RandomAccessPlayer when a seek is already loading messages, new seek requests are queued (queue size of 1). Prior to this change, when a seek request arrived while an existing seek request was in-flight, the existing request would finish, emit state, and then the new request would start.

Prior to emitting state, the in-flight seek request would set the nextReadStartTime which would override the nextReadStartTime of the latest seek request. Even if the seek requests were for the same time, the first request would alter the next read time of the subsequent request.

This change updates the RandomAccessPlayer logic to detect if a seek request occured while another was in-flight and avoid emitting a state update for the now-stale seek request.

Fixes: #1712

<!-- link relevant github issues --> <!-- add docs label if this PR requires documentation updates -->

+74 -23

0 comment

3 changed files

defunctzombie

pr closed time in 3 hours

issue closedfoxglove/studio

"Bag went back in time" when switching layouts

Description When switching layouts I get a "bag went back in time" error

  • Version: v0.16 and latest main
  • OS: Ubuntu

Steps To Reproduce <!--- Include code, screenshots, and an example data source (i.e. a .bag file), if relevant. -->

  • Delete appdata directory
  • Open studio with welcome layout and demo.bag
  • Create a new layout, and switch back and forth a few times

Expected Behavior No error

Actual Behavior Screenshot from 2021-08-27 15-26-46

closed time in 3 hours

amacneil

Pull request review commentfoxglove/studio

Fix message path input valid path detection for time and duration

 describe("messagePathsForDatatype", () => {       ".header.frame_id",       ".header.seq",       ".header.stamp",+      ".header.stamp.nsec",+      ".header.stamp.sec",

image

For whatever reason it doesn't seem like those show up in the autocomplete at the top level.

image

But they do show up when looking within stamp. I wonder if there's a depth thing at work here?

defunctzombie

comment created time in 4 hours

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentfoxglove/studio

Fix message path input valid path detection for time and duration

 export function messagePathStructures(    lastDatatypes = undefined;   const structureFor = memoize((datatype: string): MessagePathStructureItemMessage => {+    if (datatype === "time" || datatype === "duration") {+      return {+        structureType: "message",+        nextByName: {+          sec: {+            structureType: "primitive",+            primitiveType: "uint32",+            datatype: "",

I wasn't sure actually. I think for primitive types this field is not used. Maybe needs more typescript union type love.

defunctzombie

comment created time in 4 hours

pull request commentfoxglove/studio

Initialize extension panels with the correct default state.

👍

foxymiles

comment created time in 5 hours

create barnchfoxglove/studio

branch : roman/gh-1958

created branch time in 5 hours

PR opened foxglove/studio

Fix message path input valid path detection for time and duration

User-Facing Changes Writing a message path to .sec or .nsec fields within a field of type time or duration shows the path as valid.

Description time and duration are considered primative types in ROS but are actually objects with two fields (sec, nsec). When specifying the sec or nsec field within a time field (i.e. header.stamp.sec) in the message path input, it would be marked as red indicating the path is invalid. This change fixes this behavior so paths accessing .sec or .nsec of time or duration fields is shown as valid.

The change produces a structure for time and duration with the message structure type and contains sec and nsec primitive fields. Previously the structure had time and duration primative fields with no knowledge of sec or nsec below.

Fixes: #1958

<!-- link relevant github issues --> <!-- add docs label if this PR requires documentation updates -->

+70 -38

0 comment

6 changed files

pr created time in 5 hours

pull request commentfoxglove/rosmsg-msgs-common

Add generated .proto files to package dist dir

Minor thoughts on naming - great otherwise

jtbandes

comment created time in 5 hours

PullRequestReviewEvent

Pull request review commentfoxglove/rosmsg-msgs-common

Add generated .proto files to package dist dir

+import { RosMsgDefinition } from "@foxglove/rosmsg";+import fs from "fs/promises";+import path from "path";++const BUILTINS_PROTO = `syntax = "proto3";++package ros.builtins;++message Time {+  fixed32 sec = 1;+  fixed32 nsec = 2;+}++message Duration {+  fixed32 sec = 1;+  fixed32 nsec = 2;+}+`;++const BUILTIN_TYPE_MAP = new Map([+  ["time", "ros.builtins.Time"],

ros.Time ? tho I guess for consistency having builtins is nice. maybe ros.primatives.Time ?

jtbandes

comment created time in 5 hours

Pull request review commentfoxglove/studio

Initialize extension panels with the correct default state.

 export default function Panel<          // Otherwise, open new panel         const newPanelPath = ownPath.concat("second");-        void mosaicWindowActions.split({ type: panelType }).then(() => {-          const newPanelId = getNodeAtPath(mosaicActions.getRoot(), newPanelPath) as string;-          savePanelConfigs({-            configs: [-              {-                id: newPanelId,-                config: siblingConfigCreator(siblingDefaultConfig),-                defaultConfig: siblingDefaultConfig,-              },-            ],+        const newPanelConfig = siblingConfigCreator(siblingDefaultConfig);+        void mosaicWindowActions+          .split({ type: panelType, panelConfig: newPanelConfig })

The bug was newPanelConfig was not passed in as the panelConfig property to split here?

foxymiles

comment created time in 6 hours

PullRequestReviewEvent

issue commentfoxglove/studio

Improve welcome experience

In-app feedback.

amacneil

comment created time in 6 hours

create barnchfoxglove/studio

branch : roman/gh-1712

created branch time in 11 hours

PR opened foxglove/studio

Ignore current seek when a new seek occurs in RandomAccessPlayer

User-Facing Changes Fixes an intermittent incorrect warning "bag went back in time" when switching layouts.

Description In RandomAccessPlayer when a seek is already loading messages, new seek requests are queued (queue size of 1). Prior to this change, when a seek request arrived while an existing seek request was in-flight, the existing request would finish, emit state, and then the new request would start.

Prior to emitting state, the in-flight seek request would set the nextReadStartTime which would override the nextReadStartTime of the latest seek request. Even if the seek requests were for the same time, the first request would alter the next read time of the subsequent request.

This change updates the RandomAccessPlayer logic to detect if a seek request occured while another was in-flight and avoid emitting a state update for the now-stale seek request.

Fixes: #1712

<!-- link relevant github issues --> <!-- add docs label if this PR requires documentation updates -->

+74 -23

0 comment

3 changed files

pr created time in 11 hours

issue commentfoxglove/studio

Strange error when attempting to install .deb for the wrong architecture

This looks like an error from apt and not anything we can change. Have you seen any documentation or references indicating otherwise?

jhurliman

comment created time in a day

issue commentfoxglove/studio

Create UI around the auto-updater

I saw a notification on my mac recently when an update was available. We might want to do this in-app to be cross platform compatible.

amacneil

comment created time in a day

Pull request review commentfoxglove/studio

Move all documentation out of modals and into Help sidebar or inline

 Display topic data in a tabular format.  Use [message path syntax](#help:message-path-syntax) to determine the data to display. Click a column's header to sort by that column; hold `Shift` to click multiple columns. -[Learn more](https://foxglove.dev/docs/panels/table).+[Jump to docs](https://foxglove.dev/docs/panels/table).

👍

esthersweon

comment created time in a day

PullRequestReviewEvent

Pull request review commentfoxglove/studio

Move all documentation out of modals and into Help sidebar or inline

 Display topic data in a tabular format.  Use [message path syntax](#help:message-path-syntax) to determine the data to display. Click a column's header to sort by that column; hold `Shift` to click multiple columns. -[Learn more](https://foxglove.dev/docs/panels/table).+[Jump to docs](https://foxglove.dev/docs/panels/table).

Jump to docs sounds strange. Open docs? The word jump feels a-typical especially here since it will open a browser window.

esthersweon

comment created time in a day

PullRequestReviewEvent

pull request commentfoxglove/studio

Improve error visibility for mesh markers; support capital .STL extension

Is there a way we could use the existing error reporting mechanism rather than a toast? Even if the operation is async it could be tracked and reported. It feels more intuitive to tie the error to the topic marker that produced it.

jtbandes

comment created time in a day

Pull request review commentfoxglove/studio

Add mcap local file data source

+// This Source Code Form is subject to the terms of the Mozilla Public+// License, v2.0. If a copy of the MPL was not distributed with this+// file, You can obtain one at http://mozilla.org/MPL/2.0/++import { isEqual } from "lodash";+import protobufjs from "protobufjs";+import decompressLZ4 from "wasm-lz4";++import { ChannelInfo, McapReader, McapRecord } from "@foxglove/mcap";+import { parse as parseMessageDefinition } from "@foxglove/rosmsg";+import { LazyMessageReader } from "@foxglove/rosmsg-serialization";+import { MessageReader as ROS2MessageReader } from "@foxglove/rosmsg2-serialization";+import {+  Time,+  compare,+  isLessThan,+  isGreaterThan,+  isTimeInRangeInclusive,+} from "@foxglove/rostime";+import { MessageEvent, Topic } from "@foxglove/studio-base/players/types";+import {+  RandomAccessDataProvider,+  RandomAccessDataProviderDescriptor,+  ExtensionPoint,+  GetMessagesResult,+  GetMessagesTopics,+  InitializationResult,+  Connection,+} from "@foxglove/studio-base/randomAccessDataProviders/types";+import { RosDatatypes } from "@foxglove/studio-base/types/RosDatatypes";++type Options = { file: File };++export default class McapDataProvider implements RandomAccessDataProvider {+  private options: Options;+  private messagesByChannel?: Map<number, MessageEvent<unknown>[]>;++  constructor(options: Options, children: RandomAccessDataProviderDescriptor[]) {+    if (children.length > 0) {+      throw new Error("McapBlobDataProvider cannot have children");+    }+    this.options = options;+  }++  async initialize(_extensionPoint: ExtensionPoint): Promise<InitializationResult> {+    const { file } = this.options;+    await decompressLZ4.isLoaded;++    const streamReader = (file.stream() as ReadableStream<Uint8Array>).getReader();++    const messagesByChannel = new Map<number, MessageEvent<unknown>[]>();+    const channelInfoById = new Map<+      number,+      {+        info: ChannelInfo;+        messageDeserializer: ROS2MessageReader | LazyMessageReader | protobufjs.Type;+      }+    >();++    let startTime: Time | undefined;+    let endTime: Time | undefined;+    function processRecord(record: McapRecord) {+      switch (record.type) {+        default:+          break;++        case "ChannelInfo": {+          const existingInfo = channelInfoById.get(record.id);+          if (existingInfo) {+            if (!isEqual(existingInfo.info, record)) {+              throw new Error(`differing channel infos for for ${record.id}`);+            }+            break;+          }+          let messageDeserializer;+          if (record.schema === "ros1") {+            const parsedDefinitions = parseMessageDefinition(record.schema);+            messageDeserializer = new LazyMessageReader(parsedDefinitions);+          } else if (record.schema === "ros2") {

Thats probably right tho somehow this was working? I saw you did more testing with mcap files - did you find this needed changing?

defunctzombie

comment created time in a day

PullRequestReviewEvent

issue closedfoxglove/studio

Resizing panels causes 3D panel to flicker

via @jtbandes:

https://user-images.githubusercontent.com/637671/116329832-04ea0f00-a781-11eb-971f-73fd0477e01d.mov

closed time in a day

amacneil

issue commentfoxglove/studio

Resizing panels causes 3D panel to flicker

No longer able to reproduce. I suspect this was related to some layout re-rendering or canvas resizing logic which has been implicitly fixed through other changes.

amacneil

comment created time in a day

more