Activity
From 01/12/2018 to 02/10/2018
02/02/2018
- 08:17 PM Revision 1650d573 (rsb-cpp): Removed stray include in src/rsb/converter/ByteArrayConverter.cpp
- No idea why it was there in the first place.
* src/rsb/converter/ByteArrayConverter.cpp (includes): removed
rsc/mi... - 02:05 PM RSB XML Support Revision 33637352 (rsb-xml-java): Added license information in pom.xml
- * pom.xml: added license element for LGPLv3 license
- 02:02 PM Revision 07676adc (rsb-java): Added license information in pom.xml
- * pom.xml: added license element for LGPLv3 license
02/01/2018
- 03:06 PM Revision 2a25e9d3 (rsb-cl): Removed unnecessary superclass in src/transport/socket/bus.lisp
- * src/transport/socket/bus.lisp (bus): removed superclass
`broadcast-processor'; unnecessary - 12:21 PM Revision a9bb3b2a (rsb-cl): Simplified connector creation in src/transport/{protocol,transport}.lisp
- * src/transport/protocol.lisp (header): updated copyright
(make-provider eql find-service transport cons): do not i... - 11:55 AM Revision 0cd6d5a0 (rsb-cl): Fixed configuration-inheritance-mixin change in src/patterns/mixins.lisp
- A previous change, 2ff73a9c4a9eab20b07479d5a03b832c831b9159, changed
`make-child-participant' to bind `*configuration...
01/31/2018
- 09:25 PM Revision c521e256 (rsb-tools-cl): Execute commandline tests with RSB_CONFIG_FILES set to %pwd in ...
- * CMakeLists.txt (tools_test): execute the program with
RSB_CONFIG_FILES set to %pwd to avoid interference from the... - 09:25 PM Revision f16a6bbe (rsb-tools-cl): Added tools_test function in CMakeLists.txt
- * CMakeLists.txt (tools_test): new function
(toplevel): use tools_test instead of add_test - 08:48 PM Revision 61c4880d (rsb-tools-cl): Fixed CMake syntax issue in test definition in CMakeLists.txt
- * CMakeLists.txt (toplevel): correctly escape backslash in test
command definition - 08:48 PM Revision 5d4a3171 (rsb-tools-cl): Fixed reader control variable leak in parse-payload-spec in src...
- * src/common/event.lisp (header): updated copyright
(parse-payload-spec): read inside `with-standard-io-syntax' and... - 01:42 PM Revision 688e68cc (rsb-cl): Cosmetic changes in src/transport/spread/*.lisp
- Various cosmetic changes such as formatting and tweaks in
documentation strings and comments.
* src/transport/spread... - 01:27 PM Revision 15435631 (rsb-cl): Cosmetic changes in src/transport/socket/bus-{client,server}.lisp
- * src/transport/socket/bus-client.lisp (header): updated copyright;
fixed typo in one-line summary
* src/transport/... - 11:54 AM Revision 326108db (rsb-tools-cl): Added make.lisp
- 11:54 AM Revision 29ade9bf (rsb-tools-cl): make.lisp without git
- 11:54 AM Revision bf1dedd1 (rsb-tools-cl): dependency hacks
- 11:01 AM Revision 706354a1 (rsb-spread-cpp): Cosmetic changes in src/rsb/transport/spread/Assembly.{h,cpp}
- * src/rsb/transport/spread/Assembly.{h,cpp} (header): updated
copyright
(includes): moved boost/cstdint.hpp inclu... - 10:56 AM Revision d14e67b5 (rsb-spread-cpp): Cosmetic changes in src/rsb/transport/spread/InPushConnector.cpp
- * src/rsb/transport/spread/InPushConnector.cpp (toplevel): removed
used namespaces std, rsc::{logging,runtime,threa... - 10:49 AM Revision 934b5777 (rsb-spread-cpp): Fix potentially invalid iteration in src/rsb/transport/spread...
- * src/rsb/transport/spread/Assembly.cpp (AssemblyPool::PruningTask::execute):
assume that map::erase completely inv... - 10:30 AM Revision 7656f45b (rsb-spread-cpp): Improved a comment in CMakeLists.txt
- * CMakeLists.txt (header): updated copyright
(toplevel): improved a comment - 10:29 AM Revision f3646fc0 (rsb-spread-cpp): Updated copyright in cpack/CPackDebianConfig.cmake
- * cpack/CPackDebianConfig.cmake (toplevel): updated copyright in
copyright snippet
01/30/2018
- 05:43 PM Revision be0427fb (rsb-spread-cpp): Fixed CMake syntax in cpack/CPackDebianConfig.cmake
- * cpack/CPackDebianConfig.cmake (toplevel): fixed CMake syntax in
command string - 11:38 AM Revision 0ba805af (rsb-tools-cl): Fixed typo in comment in resources/base.css
- * resources/base.css (toplevel): fixed typo in comment
01/29/2018
- 08:24 PM Revision b45a0e09 (rsb-java): Style improvement in mvnprep.sh
- * mvnprep.sh: use $(...) instead of backticks for process expansion
- 07:33 PM Revision 4669a121 (rsb-java): Bumped jacoco version 0.7.5.201505241946 -> 0.8.0 in pom.xml
- 05:56 PM Revision a769e1c1 (rsb-cl): Improved update of remote-host-info instances in src/introspection/re...
- * src/model/protocol.lisp (header): updated copyright
(update-using-info): new generic function; updating an existi... - 05:55 PM Revision 2ff73a9c (rsb-cl): No configuration leak into children of configuration-inheritance-mixi...
- * src/patterns/mixins.lisp (header): updated copyright
(make-child-participant :around configuration-inheritance-mi... - 09:54 AM Revision 35bfcdbc (rsb-spread-cpp): Improved notificationToEvent in src/rsb/transport/spread/InCo...
- It now accepts a Notification (not a rsb::protocol::Notification),
making, among other things, the already known wire... - 09:52 AM Revision a863c2b5 (rsb-spread-cpp): Initialize logger in src/rsb/transport/spread/InConnector.cpp
- The missing initialization (unsurprisingly) caused a crash in handleError.
* src/rsb/transport/spread/InConnector.cp... - 09:49 AM Revision a91d639a (rsb-spread-cpp): Fix memory corruption in src/rsb/transport/spread/OutConnecto...
- Apparently, resizing the vector of fragments invalidated the pointer
obtained from the mutable_notification() call.
... - 09:48 AM Revision 1c78b95a (rsb-spread-cpp): Fix fragmentation bug in src/rsb/transport/spread/OutConnecto...
- This caused incorrect payload fragments to be transmitted.
* src/rsb/transport/spread/OutConnector.cpp (OutConnector...
01/26/2018
- 06:28 PM Revision 9f7c679c (rsb-python): Added documentation string to createParticipant in rsb/__init__.py
- * rsb/__init__.py (createParticipant): added documentation string
- 06:25 PM Revision ead127ac (rsb-python): Cleaned up imports in rsb/__init__.py
- * rsb/__init__.py (import rsb.util): moved to top of file
(import rsb.eventprocessing): likewise
(import rsb.filt... - 06:22 PM Revision 7cebd105 (rsb-python): Fixed typo in module docstring in rsb/transport/rsbspread/__init_...
- * rsb/transport/rsbspread/__init__.py (toplevel): fixed typo in module
documentation string - 06:12 PM Revision 90601d9f (rsb-manual): Mention full Spread connection sharing in Python in news.rst
- refs #2531
* news.rst (RSB 0.18): mention full Spread connection sharing in
Python implementation - 06:07 PM Revision 26449fb1 (rsb-python): Spread connection sharing in rsb/transport/rsbspread/__init__.py
- fixes #2531
A new class Bus manages one Spread connection and its group
memberships. One or more connectors are atta... - 05:40 PM Enhancement #2531 (Resolved): Spread connection pooling for listeners [Python]
- Applied in changeset commit:rsb-python|26449fb1ebad34351b22acbf6939a21b18338a95.
- 05:26 PM Revision fd01ee44 (rsb-python): Removed RefCountingSpreadConnection in rsb/transport/rsbspread/__...
- refs #2531
* rsb/transport/rsbspread/__init__.py (RefCountingSpreadConnection):
removed; will be replaced by full ... - 02:30 PM Revision f8462a04 (rsb-python): Use ScopeDispatcher in rsb/transport/socket/__init__.py
- * rsb/transport/socket/__init__.py (header): updated copyright
(import rsb.eventprocessing): new import
(Bus.__in... - 01:51 PM Revision dc5e89ec (rsb-python): Added ScopeDispatcher in rsb/eventprocessing.py
- refs #2531
* rsb/eventprocessing.py (header): updated copyright
(ScopeDispatcher): new class; maintains a map of s... - 01:29 PM Revision 6ac91f4f (rsb-python): Removed unused import in rsb/transport/rsbspread/__init__.py
- * rsb/transport/rsbspread/__init__.py (import logging): removed;
unused - 01:12 PM Revision 41364896 (rsb-python): Added eventAndWireDataToNotifications in rsb/transport/conversion.py
- * rsb/transport/conversion.py (header): updated copyright
(eventAndWireDataToNotifications): new function; takes al... - 01:06 PM Revision d63f2b4a (rsb-python): Better logging in Membership class in rsb/transport/rsbspread/__i...
- * rsb/transport/rsbspread/__init__.py (Memberships.join): improved
logging
(Memberships.leave): likewise - 01:03 PM Revision da7ff9f8 (rsb-python): Added real methods to SpreadConnection in rsb/transport/rsbspread...
- The __getattr__ auto-delegation is a neat party trick but not so great
as a programmer interface.
* rsb/transport/rs... - 11:08 AM Revision 12c1a579 (rsb-spread-cpp): Fixed Debian changelog computation in cpack/CPackDebianConfig...
- * cpack/CPackDebianConfig.cmake: handle commits that are not described
by existing tags - 10:53 AM Revision d464cb82 (rsb-spread-cpp): Fixed Debian changelog computation in cpack/CPackDebianConfig...
- * cpack/CPackDebianConfig.cmake: handle commits that are not described
by existing tags
01/25/2018
- 08:57 PM Revision e92eeaa3 (rsb-python): Added new class Memberships in rsb/transport/rsbspread/__init__.py
- The new class is responsible for managing Spread group memberships for
multiple clients. This implementation uses ref... - 08:57 PM Revision d344a533 (rsb-python): Added new class DeserializingHandler in rsb/transport/rsbspread/_...
- * The new class DeserializingHandler replaces the
handleReceivedRegularMsg free function.
* The SpreadReceiverTask ... - 08:57 PM Revision 7d0ec6e1 (rsb-python): Added host, port attributes to SpreadConnection in rsb/transport/...
- * rsb/transport/rsbspread/__init__.py (SpreadConnection.host): new
attribute
(Spread.port): likewise - 08:57 PM Revision 545b9b28 (rsb-python): Added class GroupNameCache^1 in rsb/transport/rsbspread/__init__.py
- [1] Not yet an actual cache.
* rsb/transport/rsbspread/__init__.py (GroupNameCache): new class;
converts scopes to... - 08:57 PM Revision f30de1d4 (rsb-python): Removed unused imports in rsb/transport/rsbspread/__init__.py
- * rsb/transport/rsbspread/__init__.py (import math): removed; unused
(import time): likewise
(import rsb.filter):... - 08:07 PM Revision 859ceb79 (rsb-spread-cpp): Fixed Debian changelog computation in cpack/CPackDebianConfig...
- * cpack/CPackDebianConfig.cmake: handle commits that are not described
by existing tags - 07:04 PM Revision a4c7806b (rsb-cpp): Create gzip output without timestamps in cpack/CPackDebianConfig.cmake
- Timestamps in the gzip output obstruct reproducible builds and get
flagged by lintian.
* cpack/CPackDebianConfig.cma... - 07:02 PM Revision 12706085 (rsb-spread-cpp): Create gzip output without timestamps in cpack/CPackDebianCon...
- Timestamps in the gzip output obstruct reproducible builds and get
flagged by lintian.
* cpack/CPackDebianConfig.cma... - 06:51 PM Revision 1518c806 (rsb-python): Added class GroupNameCache^1 in rsb/transport/rsbspread/__init__.py
- [1] Not yet an actual cache.
* rsb/transport/rsbspread/__init__.py (GroupNameCache): new class;
converts scopes to... - 06:07 PM Revision ddfeda90 (rsb-python): Added host, port attributes to SpreadConnection in rsb/transport/...
- * rsb/transport/rsbspread/__init__.py (SpreadConnection.host): new
attribute
(Spread.port): likewise - 05:55 PM Revision a2475c47 (rsb-python): Added new class DeserializingHandler in rsb/transport/rsbspread/_...
- * The new class DeserializingHandler replaces the
handleReceivedRegularMsg free function.
* The SpreadReceiverTask ... - 12:34 PM Revision 938dcca4 (rsb-python): Added new class Memberships in rsb/transport/rsbspread/__init__.py
- The new class is responsible for managing Spread group memberships for
multiple clients. This implementation uses ref... - 12:17 PM Revision 913215a4 (rsb-python): Removed unused imports in rsb/transport/rsbspread/__init__.py
- * rsb/transport/rsbspread/__init__.py (import math): removed; unused
(import time): likewise
(import rsb.filter):... - 09:32 AM Enhancement #2531 (In Progress): Spread connection pooling for listeners [Python]
01/24/2018
- 04:23 PM Revision b0d8f3e4 (rsb-python): InPullConnector uses better message discrimination in rsb/transpo...
- See commit 9c55841d1cb8d3da24727e01cfdf490b7f2acc61.
* rsb/transport/rsbspread/__init__.py (InPullConnector.raiseEve... - 03:57 PM Revision ea3f271e (rsb-python): Moved common code into new class InConnector in rsb/transport/rsb...
- The new InConnector class is responsible for managing the scope as
well as Spread group memberships.
* rsb/transport... - 03:28 PM Revision 15f55274 (rsb-python): Moved QoS computation into OutConnector in rsb/transport/rsbsprea...
- * rsb/transport/rsbspread/__init__.py (header): updated copyright
(Connector.setQualityOfServiceSpec): removed; mov...
01/23/2018
- 09:32 PM Revision 0d85fc6b (rsb-manual): Mention full Spread connection sharing in C++ in news.rst
- refs #2532
* news.rst (RSB 0.18): mention full Spread connection sharing in C++
implementation - 09:23 PM Revision 0b202357 (rsb-spread-cpp): "Unscreamified" rsb-spread-*.cmake.in
- * rsb-spread-config.cmake.in: "unscreamified"
* rsb-spread-config-version.cmake.in: likewise
* rsb-spread-buildtree-s... - 09:11 PM Revision eb808d3a (rsb-spread-cpp): Improved logging in src/rsb/transport/spread/*.{h,cpp}
- * src/rsb/transport/spread/SpreadConnection.{h,cpp} (includes): added
iostream and rsc/runtime/Printable.h
(Sprea... - 09:03 PM Revision 61decafa (rsb-manual): Mention full Spread connection sharing in C++ in news.rst
- refs #2532
* news.rst (RSB 0.18): mention full Spread connection sharing in C++
implementation - 08:59 PM Revision 5a4eb284 (rsb-spread-cpp): Spread connection sharing in src/rsb/transport/spread/*.{h,cpp}
- fixes #2532
A new class Bus manages one Spread connection and its group
memberships. One or more connectors are atta... - 08:47 PM Revision e8dbe8c6 (rsb-spread-cpp): Removed RefCountingSpreadConnection in src/rsb/transport/spre...
- This commit removes the RefCountingSpreadConnection class in
preparation for full, mandatory Spread connection sharin... - 06:53 PM Revision 7532dd0b (rsb-spread-cpp): Initial error handling in src/rsb/transport/spread/*Connector...
- refs #1035
* src/rsb/transport/spread/InConnector.{h,cpp} (InConnector::handleError):
new method;
* src/rsb/transp... - 05:37 PM Revision e7324e86 (rsb-spread-cpp): Moved notification deserialization into InConnector in src/rs...
- * src/rsb/transport/spread/InConnector.{h,cpp} (include): added
rsc/logging/Logger.h, rsb/protocol/Notification.h,
... - 05:26 PM Revision 612afde2 (rsb-spread-cpp): Added InConnector class in src/rsb/transport/spread/InConnect...
- Base class for In{Pull,Push}Connector classes. The new class is
responsible for managing the SpreadConnection and gro...
01/22/2018
- 02:53 PM Revision 9005956d (rsb-spread-cpp): Cosmetic changes in OutConnector.h
- * src/rsb/transport/spread/OutConnector.h (OutConnector): removed
unnecessary package qualification
(OutConnector...
01/19/2018
- 09:27 PM Revision 454a3d48 (rsb-python): Simplified observer action stuff in rsb/transport/rsbspread/__ini...
- The observer action of a SpreadReceiverTask can no longer be
changed. Instead, the InPushConnector stores, and potent... - 09:25 PM Revision dd4fe650 (rsb-python): Simplified SpreadReceiverTask termination in rsb/transport/rsbspr...
- Since the unit tests can now use the "wake-up group" to interrupt the
Spread receive call, the interrupted machinery ... - 09:21 PM Revision 9c55841d (rsb-python): Better message discrimination in rsb/transport/rsbspread/__init__.py
- Use the presence of the msg_type attribute to identify "regular"
Spread messages. This has the advantage that it can ... - 09:16 PM Revision 313056e5 (rsb-python): Added missing deactivate calls in test/rsbspread_test.py
- * test/rsbspread_test.py (header): updated copyright
(SpreadConnectorTest.testSequencing): added missing deactivate... - 09:15 PM Revision d4954125 (rsb-python): Added missing deactivate calls in test/transporttest.py
- * test/transporttest.py (TransportCheck.testHierarchySending): added
missing deactivate calls
01/18/2018
- 04:49 PM Revision 4523d3a4 (rsb-spread-cpp): Added includes in src/rsb/transport/spread/GroupNameCache.cpp
- * src/rsb/transport/spread/GroupNameCache.cpp (includes): added
boost/thread/{locks,lock_types}.hpp - 04:34 PM Revision 06807d5e (rsb-spread-cpp): Only use SP_BUG if it is defined in src/rsb/transport/spread/...
- * src/rsb/transport/spread/ErrorMessages.cpp (spreadErrorString): only
include case for SP_BUG if it is defined - 04:24 PM Revision 423b5d12 (rsb-spread-cpp): Documentation string and RSBSPREAD_EXPORT in src/rsb/transpor...
- * src/rsb/transport/spread/ConnectorBase.h (includes): added
rsb/transport/spread/rsbspreadexports.h
(ConnectorBa... - 04:08 PM Revision 972711ac (rsb-spread-cpp): Set scope of in-direction connectors in test/rsb/transport/Co...
- * test/rsb/transport/ConnectorTest.cpp
(test ConnectorTest::testConnection): call setScope before
activating for ...
01/16/2018
- 07:08 PM Revision 6f439b67 (rsb-cpp): Added mapAllSinks in src/rsb/eventprocessing/ScopeDispatcher.h
- * src/rsb/eventprocessing/ScopeDispatcher.h (ScopeDispatcher::mapAllSinks)
new member function; call a functor on a... - 06:55 PM Revision ebbfb2a1 (rsb-spread-cpp): Added license headers in src/rsb/transport/spread/ConnectorBa...
- * src/rsb/transport/spread/ConnectorBase.{h,cpp} (header): added
license header - 04:30 PM Revision 145c5a0c (rsb-cpp): Made OutConnector: Connector virtual in src/rsb/transport/OutConnect...
- * src/rsb/transport/OutConnector.h (header): updated copyright
(OutConnector): made Connector base class virtual - 04:24 PM Revision dd904264 (rsb-spread-cpp): Added class ConnectorBase in src/rsb/transport/spread/Connect...
- * src/rsb/transport/spread/ConnectorBase.{h,cpp}: new files; contain
ConnectorBase base class for Connector classes... - 03:56 PM Revision dadffc0f (rsb-cpp): Use SinkDispatcher in src/rsb/transport/socket/Bus.{h,cpp}
- * src/rsb/transport/socket/Bus.h (Bus::removeSink): added const
modifier to sink parameter
* src/rsb/transport/sock... - 03:53 PM Revision 78da5bb3 (rsb-cpp): Refactored Bus[Server][Impl] classes in src/rsb/transport/socket/Bus...
- * Turned Bus into an interface, the new class BusImpl contains the
implementation.
* As a result, BusServer is now ... - 12:34 PM Revision ba9ee5d2 (rsb-spread-cpp): fake version
- 12:34 PM Revision 498686bc (rsb-spread-cpp): mostly logging stuff
- 12:33 PM Revision ef5091c7 (rsb-spread-cpp): namespace issue
- 12:27 PM Revision bc87079c (rsb-spread-cpp): fake version
- 12:27 PM Revision 20e86205 (rsb-spread-cpp): mostly logging stuff
- 12:27 PM Revision 5744873a (rsb-spread-cpp): lambda "fix"
- 11:34 AM Revision d46e8387 (rsb-cpp): fake version
- 11:34 AM Revision 836687c2 (rsb-cpp): different default port for socket test
- 11:34 AM Revision 7a942ae3 (rsb-cpp): unrelated
- 11:34 AM Revision 7f04b816 (rsb-cpp): "lambda" fix
- 10:46 AM Revision eaae754f (rsb-spread-cpp): fake version
- 10:45 AM Revision efa54f66 (rsb-cpp): fake version
- 10:43 AM Revision 67dcb753 (rsb-cpp): different default port for socket test
- 10:43 AM Revision df649823 (rsb-cpp): Use SinkDispatcher in src/rsb/transport/socket/Bus.{h,cpp}
- * src/rsb/transport/socket/Bus.{h,cpp} (header): updated copyright
(Bus::addSink)
(Bus::removeSink)
(Bus::handl... - 10:43 AM Revision e8610a23 (rsb-cpp): unrelated
- 10:31 AM Revision ca7c505f (rsb-cpp): Refactored Bus[Server][Impl] classes in src/rsb/transport/socket/Bus...
- * Turned Bus into an interface, the new class BusImpl contains the
implementation.
* As a result, BusServerImpl no ...
01/15/2018
- 09:56 PM Revision 31d0ea52 (rsb-cpp): "Fix" test/rsb/eventprocessing/ScopeDispatcher.cpp
- * test/rsb/eventprocessing/ScopeDispatcher.cpp: disable
only-sometimes-compiling code - 08:50 PM Revision 28ea86dc (rsb-cpp): Added [Weak]ScopeDispatcher in src/rsb/eventprocessing/ScopeDispatch...
- * src/rsb/eventprocessing/ScopeDispatcher.h: new file; header-only
implementation of the ScopeDispatcher and WeakSc... - 07:49 PM Revision a56dc5a0 (rsb-cpp): Added [Weak]ScopeDispatcher in src/rsb/eventprocessing/ScopeDispatch...
- * src/rsb/eventprocessing/ScopeDispatcher.h: new file; header-only
implementation of the ScopeDispatcher and WeakSc...
01/12/2018
- 02:09 PM Revision 755ea2c6 (rsb-spread-cpp): mostly logging stuff
- 02:09 PM Revision 62edddb0 (rsb-spread-cpp): stuff
- 02:08 PM Revision a385a537 (rsb-spread-cpp): Partial connector pooling
- fixes #2532
- 12:54 PM Revision 2e7722af (rsb-spread-cpp): stuff
- 12:54 PM Revision 935d1049 (rsb-spread-cpp): mostly logging stuff
- 12:54 PM Revision 2dfe5f38 (rsb-spread-cpp): unrelated improvements
- 12:54 PM Revision e95dbcbf (rsb-spread-cpp): Partial connector pooling
- fixes #2532
- 12:50 PM Enhancement #2532 (Resolved): Spread connection pooling for listeners [C++]
- Applied in changeset commit:rsb-spread-cpp|c6041b800ec93112d6feb63d7830cf99bb20f711.
- 12:30 PM Revision 133315bb (rsb-cpp): unrelated
- 12:30 PM Revision 3dfbd3e0 (rsb-cpp): different default port for socket test
- 12:30 PM Revision 39a853b8 (rsb-cpp): Use SinkDispatcher in src/rsb/transport/socket/Bus.{h,cpp}
- * src/rsb/transport/socket/Bus.{h,cpp} (header): updated copyright
(Bus::addSink)
(Bus::removeSink)
(Bus::handl... - 12:30 PM Revision b0d9c5b7 (rsb-cpp): Added ScopeDispatcher in src/rsb/eventprocessing/ScopeDispatcher.h
- * src/rsb/eventprocessing/ScopeDispatcher.h
- 12:14 PM Revision f7982b34 (rsb-spread-cpp): mostly logging stuff
01/11/2018
- 12:03 AM Revision f339688d (rsb-spread-cpp): unrelated improvements
- 12:03 AM Revision e79e1c50 (rsb-spread-cpp): stuff
- 12:03 AM Revision c6041b80 (rsb-spread-cpp): Partial connector pooling
- fixes #2532
Also available in: Atom