Skip to content
This repository

Add Analog web log tool #15016

Closed
wants to merge 13 commits into from

10 participants

Jason Thaxter Adam Vandenberg Jack Nagel Samuel John Yannis Rammos James Wheare 2bits Rich Manalang intepinte Matt Blair
Jason Thaxter

Addition of this ever-useful weblog analysis tool to brew. Based roughly on the
FreeBSD port install commands, including the analog.cfg-dist, which should be
fine, since analog doesn't really depend on the config file, but brew-specific
style points would be welcome. All extra and supporting files under
share/analog. Of these, only the lang files are essential.

Jason Thaxter Add analog, venerable web logfile analyzer.
Addition of this ever-useful weblog analysis tool to brew. Based roughly on the
FreeBSD port install commands, including the analog.cfg-dist, which should be
fine, since analog doesn't really depend on the config file, but brew-specific
style points would be welcome. All extra and supporting files under
share/analog. Of these, only the lang files are essential. This is not a full
GNU make, just a simple make, with an extra definition for the lang files
location, and manual copy of supporting files into place.

Suggestions welcome, I would prefer to use brew at this point (over that other
thing that installs parallel libraries willy-nilly) so let's get this committed.
80b8126
Library/Formula/analog.rb
((11 lines not shown))
  11
+  depends_on 'jpeg'
  12
+  depends_on 'libpng'
  13
+
  14
+  def install
  15
+    system "make DEFS='-DLANGDIR=\\\"/usr/local/share/analog/lang/\\\"'"
  16
+    system "mkdir -p /usr/local/Cellar/analog/6.0/bin"
  17
+    system "mkdir -p /usr/local/Cellar/analog/6.0/share/analog/lang"
  18
+    system "mkdir -p /usr/local/Cellar/analog/6.0/share/man"
  19
+    system "mkdir -p /usr/local/Cellar/analog/6.0/share/man/man1"
  20
+    system "mkdir -p /usr/local/Cellar/analog/6.0/etc"
  21
+    system "mkdir -p /usr/local/Cellar/analog/6.0/share/analog"
  22
+    system "cp analog /usr/local/Cellar/analog/6.0/bin"
  23
+    system "cp -R examples how-to images lang /usr/local/Cellar/analog/6.0/share/analog/"
  24
+    system "cp analog.man /usr/local/Cellar/analog/6.0/share/man/man1/analog.1"
  25
+    system "cp analog.cfg /usr/local/Cellar/analog/6.0/etc/analog.cfg-dist"
  26
+  end
2
Jack Nagel Owner

Can't assume /usr/local, and you don't have to hardcode paths into the cellar, there are methods for this. Take a look at https://github.com/mxcl/homebrew/wiki/Formula-Cookbook

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
and others added some commits September 16, 2012
Yannis Rammos lilypond: add option to build docs
Closes #14946.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
e00ecd7
James Wheare ircd-hybrid: Bump up the nickname limit to something airier.
There's no config setting for this, so we need to compile it in to something generous and useful

Closes #15005.

Signed-off-by: Max Howell <mxcl@me.com>
dd721cc
2bits net-snmp: fix compile on ML, add darwin12.h
net-snmp has some fixes in HEAD for us coming in 5.7.2.
It fails on ML due to the same problem it has with Lion,
a missing header, and that's what's being fixed. It aslo
can't build the perl bindings because it wants to write to
`/Library/Perl`

- Duplicate the Lion path for ML and create `darwin12.h`
- Add `--enable-ipv6`
- Add `--with-logfile=#{var}/log/snmpd.log` fixes `/var/log/snmpd.log`
- Add `--disable-embedded-perl`
- Add `--without-perl-modules`
- Add `--disable-debugging`
- Remove an unused function `header_created?`

Fixes #14990.
Closes #15009.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
4f0844d
Rich Manalang atlassian-plugin-sdk 4.0
Closes #15015.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
eb26b61
Adam Vandenberg tomcat 7.0.30 9b42f8b
Jack Nagel Update Xcode.latest_version for 4.5
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
719e902
intepinte task 2.1.2
Closes #15012.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
27ce4be
Matt Blair Jenkins 1.482
Closes #15017.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
1224008
Jason Thaxter Updated to use variables instead of hard-coded paths, and to use sha1…
… vs md5.
83706a0
Jason Thaxter Use variables for paths vs hard coded 4f2177e
Jason Thaxter Revert "Use variables for paths vs hard coded"
This reverts commit 4f2177e054f297b35b31134db9da17b181758a5b.
3059b57
Jason Thaxter Use built-in command for man page install
use man1.install and simplify 2 lines to 1
83a7571
Adam Vandenberg
Owner

Please squash to a single commit for review; this will be easier if you make the pull request from a non-master branch.

Adam Vandenberg
Owner

Also, this seems to hard-code the use of gcc.

Adam Vandenberg
Owner

If you make pull requests from branches other than master, then you can git push -f after rebasing to update the pull request without getting merge and other commits.

Adam Vandenberg
Owner

The use of the install method also applies to the things installed to share, too.

Samuel John samueljohn commented on the diff October 22, 2012
Library/Formula/analog.rb
... ...
@@ -0,0 +1,27 @@
  1
+require 'formula'
  2
+
  3
+# Jason Thaxter <jason@thaxter.net>
2

I appreciate your work here, but usually we use git blame and git log to assign credit.

Jason Thaxter
thaxter added a note October 22, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Adam Vandenberg
Owner

This needs to be squashed to a single commit and rebased on master for review. Use a non-master branch for your pull request.

Adam Vandenberg adamv closed this October 27, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Showing 13 unique commits by 9 authors.

Sep 19, 2012
Jason Thaxter Add analog, venerable web logfile analyzer.
Addition of this ever-useful weblog analysis tool to brew. Based roughly on the
FreeBSD port install commands, including the analog.cfg-dist, which should be
fine, since analog doesn't really depend on the config file, but brew-specific
style points would be welcome. All extra and supporting files under
share/analog. Of these, only the lang files are essential. This is not a full
GNU make, just a simple make, with an extra definition for the lang files
location, and manual copy of supporting files into place.

Suggestions welcome, I would prefer to use brew at this point (over that other
thing that installs parallel libraries willy-nilly) so let's get this committed.
80b8126
Sep 20, 2012
Yannis Rammos lilypond: add option to build docs
Closes #14946.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
e00ecd7
James Wheare ircd-hybrid: Bump up the nickname limit to something airier.
There's no config setting for this, so we need to compile it in to something generous and useful

Closes #15005.

Signed-off-by: Max Howell <mxcl@me.com>
dd721cc
2bits net-snmp: fix compile on ML, add darwin12.h
net-snmp has some fixes in HEAD for us coming in 5.7.2.
It fails on ML due to the same problem it has with Lion,
a missing header, and that's what's being fixed. It aslo
can't build the perl bindings because it wants to write to
`/Library/Perl`

- Duplicate the Lion path for ML and create `darwin12.h`
- Add `--enable-ipv6`
- Add `--with-logfile=#{var}/log/snmpd.log` fixes `/var/log/snmpd.log`
- Add `--disable-embedded-perl`
- Add `--without-perl-modules`
- Add `--disable-debugging`
- Remove an unused function `header_created?`

Fixes #14990.
Closes #15009.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
4f0844d
Rich Manalang atlassian-plugin-sdk 4.0
Closes #15015.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
eb26b61
Adam Vandenberg tomcat 7.0.30 9b42f8b
Jack Nagel Update Xcode.latest_version for 4.5
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
719e902
intepinte task 2.1.2
Closes #15012.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
27ce4be
Matt Blair Jenkins 1.482
Closes #15017.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
1224008
Jason Thaxter Updated to use variables instead of hard-coded paths, and to use sha1…
… vs md5.
83706a0
Jason Thaxter Use variables for paths vs hard coded 4f2177e
Jason Thaxter Revert "Use variables for paths vs hard coded"
This reverts commit 4f2177e054f297b35b31134db9da17b181758a5b.
3059b57
Sep 21, 2012
Jason Thaxter Use built-in command for man page install
use man1.install and simplify 2 lines to 1
83a7571
This page is out of date. Refresh to see the latest.
27  Library/Formula/analog.rb
... ...
@@ -0,0 +1,27 @@
  1
+require 'formula'
  2
+
  3
+# Jason Thaxter <jason@thaxter.net>
  4
+
  5
+class Analog < Formula
  6
+  homepage 'http://analog.cx'
  7
+  url 'http://analog.cx/analog-6.0.tar.gz'
  8
+  sha1 '17ad601f84e73c940883fb9b9e805879aac37493'
  9
+
  10
+  depends_on 'gd'
  11
+  depends_on 'jpeg'
  12
+  depends_on 'libpng'
  13
+
  14
+  def install
  15
+    system "make DEFS='-DLANGDIR=\\\"#{share}/analog/lang/\\\"'"
  16
+    system "mkdir -p #{bin}"
  17
+    system "cp analog #{bin}"
  18
+    system "mkdir -p #{share}/analog"
  19
+    system "cp -R examples how-to images lang #{share}/analog/"
  20
+    system "cp analog.cfg #{share}/analog/analog.cfg-dist"
  21
+    man1.install "analog.man" => "analog.1"
  22
+  end
  23
+
  24
+  def test
  25
+    system "#{bin}/analog > /dev/null"
  26
+  end
  27
+end
6  Library/Formula/atlassian-plugin-sdk.rb
@@ -2,8 +2,8 @@
2 2
 
3 3
 class AtlassianPluginSdk < Formula
4 4
   homepage 'https://developer.atlassian.com/display/DOCS/Atlassian+Plugin+SDK+Documentation'
5  
-  url 'https://maven.atlassian.com/content/repositories/atlassian-public/com/atlassian/amps/atlassian-plugin-sdk/3.11/atlassian-plugin-sdk-3.11.tar.gz'
6  
-  sha1 'c54a3498553653d2d5a29362a37fe86df2ea169a'
  5
+  url 'https://maven.atlassian.com/content/repositories/atlassian-public/com/atlassian/amps/atlassian-plugin-sdk/4.0/atlassian-plugin-sdk-4.0.tar.gz'
  6
+  sha1 'f18ee77fbad58ceca3108ccc271cabcefa23f817'
7 7
 
8 8
   def install
9 9
     # Remove windows files
@@ -22,7 +22,7 @@ def caveats
22 22
       visit https://developer.atlassian.com.
23 23
 
24 24
       To create a plugin skeleton using atlas-create-APPLICATION-plugin, e.g.:
25  
-        atlas-create-jira-plugin
  25
+        atlas-create-jira-plugin or atlas-create-confluence-plugin
26 26
 
27 27
       To run your plugin's host application with the plugin skeleton installed:
28 28
         atlas-run
4  Library/Formula/ircd-hybrid.rb
@@ -14,7 +14,9 @@ def install
14 14
 
15 15
     system "./configure", "--disable-dependency-tracking",
16 16
                           "--prefix=#{prefix}",
17  
-                          "--localstatedir=#{var}"
  17
+                          "--localstatedir=#{var}",
  18
+                          # there's no config setting for this so set it to something generous
  19
+                          "--with-nicklen=30"
18 20
     system "make install"
19 21
   end
20 22
 
6  Library/Formula/jenkins.rb
@@ -2,9 +2,9 @@
2 2
 
3 3
 class Jenkins < Formula
4 4
   homepage 'http://jenkins-ci.org'
5  
-  url 'http://mirrors.jenkins-ci.org/war/1.478/jenkins.war'
6  
-  version '1.478'
7  
-  sha1 'e26a450b8e1cee543a9038b37a41b8d0e9b9b043'
  5
+  url 'http://mirrors.jenkins-ci.org/war/1.482/jenkins.war'
  6
+  version '1.482'
  7
+  sha1 '88c1d372282fdc11f8eadff94a415acd5481ca69'
8 8
 
9 9
   head 'https://github.com/jenkinsci/jenkins.git'
10 10
 
17  Library/Formula/lilypond.rb
@@ -26,6 +26,8 @@ class Lilypond < Formula
26 26
 
27 27
   env :userpaths
28 28
 
  29
+  option 'with-doc', "Build documentation in addition to binaries (may require several hours)."
  30
+
29 31
   depends_on TexInstalled.new
30 32
   depends_on 'pkg-config' => :build
31 33
   depends_on 'gettext'
@@ -37,6 +39,15 @@ class Lilypond < Formula
37 39
   depends_on 'texinfo'
38 40
   depends_on :x11
39 41
 
  42
+  # Assert documentation dependencies if requested.
  43
+  if build.include? 'with-doc'
  44
+    depends_on 'netpbm'
  45
+    depends_on 'imagemagick'
  46
+    depends_on 'docbook'
  47
+    depends_on 'dblatex' => :python
  48
+    depends_on 'texi2html'
  49
+  end
  50
+
40 51
   skip_clean :all
41 52
 
42 53
   fails_with :clang do
@@ -52,6 +63,12 @@ def install
52 63
     # Separate steps to ensure that lilypond's custom fonts are created.
53 64
     system 'make all'
54 65
     system "make install"
  66
+
  67
+    # Build documentation if requested.
  68
+    if build.include? 'with-doc'
  69
+      system "make doc"
  70
+      system "make install-doc"
  71
+    end
55 72
   end
56 73
 
57 74
   def test
172  Library/Formula/net-snmp.rb
@@ -7,26 +7,27 @@ class NetSnmp < Formula
7 7
 
8 8
   def patches
9 9
     # Fixes compile error on Lion, missing header darwin11.h
10  
-    # The patch is reported upstream and does not exist in HEAD as of 2012-03-30.
  10
+    # Fixes compile error on Mt. Lion, missing header darwin12.h
  11
+    # The patch is reported upstream and fixed in HEAD. Remove at 5.7.2.
11 12
     # https://sourceforge.net/tracker/?func=detail&aid=3514049&group_id=12694&atid=312694
12 13
     DATA
13 14
   end
14 15
 
15 16
   def install
16  
-    system "./configure", "--prefix=#{prefix}",
17  
-                          "--with-persistent-directory=#{var}/db/net-snmp",
  17
+    system "./configure", "--disable-debugging",
  18
+                          "--prefix=#{prefix}",
  19
+                          "--enable-ipv6",
18 20
                           "--with-defaults",
19  
-                          "--without-rpm",
  21
+                          "--with-persistent-directory=#{var}/db/net-snmp",
  22
+                          "--with-logfile=#{var}/log/snmpd.log",
20 23
                           "--with-mib-modules=host ucd-snmp/diskio",
21  
-                          "--without-kmem-usage"
  24
+                          "--without-rpm",
  25
+                          "--without-kmem-usage",
  26
+                          "--disable-embedded-perl",
  27
+                          "--without-perl-modules"
22 28
     system "make"
23 29
     system "make install"
24 30
   end
25  
-
26  
-  def header_created?
27  
-    cp 'include/net-snmp/system/darwin10.h', 'include/net-snmp/system/darwin11.h'
28  
-    return TRUE
29  
-  end
30 31
 end
31 32
 
32 33
 __END__
@@ -184,3 +185,154 @@ def header_created?
184 185
 +#define UDP_ADDRESSES_IN_HOST_ORDER 1
185 186
 +#endif
186 187
 +
  188
+--- /dev/null
  189
++++ b/include/net-snmp/system/darwin12.h
  190
+@@ -0,0 +1,148 @@
  191
++/*
  192
++ * While Darwin 10 (aka, Mac OS X 10.6 Snow Leopard) is "BSD-like", it differs
  193
++ * substantially enough to not warrant pretending it is a BSD flavor.
  194
++ * This first section are the vestigal BSD remnants.
  195
++ */
  196
++/* Portions of this file are subject to the following copyright(s).  See
  197
++ * the Net-SNMP's COPYING file for more details and other copyrights
  198
++ * that may apply:
  199
++ */
  200
++/*
  201
++ * Portions of this file are copyrighted by:
  202
++ * Copyright (C) 2007 Apple, Inc. All rights reserved.
  203
++ * Use is subject to license terms specified in the COPYING file
  204
++ * distributed with the Net-SNMP package.
  205
++ */
  206
++
  207
++/*
  208
++ * BSD systems use a different method of looking up sockaddr_in values 
  209
++ */
  210
++/* #define NEED_KLGETSA 1 */
  211
++
  212
++/*
  213
++ * ARP_Scan_Next needs a 4th ifIndex argument 
  214
++ */
  215
++#define ARP_SCAN_FOUR_ARGUMENTS 1
  216
++
  217
++#define CHECK_RT_FLAGS 1
  218
++
  219
++/*
  220
++ * this is not good enough before freebsd3! 
  221
++ */
  222
++/* #undef HAVE_NET_IF_MIB_H */
  223
++
  224
++/*
  225
++ * This section adds the relevant definitions from generic.h
  226
++ * (a file we don't include here)
  227
++ */
  228
++
  229
++/*
  230
++ * udp_inpcb list symbol, e.g. for mibII/udpTable.c
  231
++ */
  232
++#define INP_NEXT_SYMBOL inp_next
  233
++
  234
++/*
  235
++ * This section defines Mac OS X 10.5 (and later) specific additions.
  236
++ */
  237
++#define darwin 12
  238
++#ifndef darwin12
  239
++#   define darwin12 darwin
  240
++#endif
  241
++
  242
++/*
  243
++ * Mac OS X should only use the modern API and definitions.
  244
++ */
  245
++#ifndef NETSNMP_NO_LEGACY_DEFINITIONS
  246
++#define NETSNMP_NO_LEGACY_DEFINITIONS 1
  247
++#endif
  248
++
  249
++/*
  250
++ * looks like the IFTable stuff works better than the mibII versions
  251
++ */
  252
++ 
  253
++#define NETSNMP_INCLUDE_IFTABLE_REWRITES
  254
++
  255
++/*
  256
++ * use new host resources files as well
  257
++ */
  258
++#define NETSNMP_INCLUDE_HRSWINST_REWRITES
  259
++#define NETSNMP_INCLUDE_HRSWRUN_REWRITES
  260
++#undef NETSNMP_INCLUDE_HRSWRUN_WRITE_SUPPORT
  261
++#define NETSNMP_CAN_GET_DISK_LABEL 1
  262
++
  263
++/*
  264
++ * Enabling this restricts the compiler to mostly public APIs.
  265
++ */
  266
++#ifndef __APPLE_API_STRICT_CONFORMANCE
  267
++#define __APPLE_API_STRICT_CONFORMANCE 1
  268
++#endif
  269
++#ifndef __APPLE_API_UNSTABLE
  270
++#define __APPLE_API_UNSTABLE 1
  271
++#endif
  272
++
  273
++/*
  274
++ * Darwin's tools are capable of building multiple architectures in one pass.
  275
++ * As a result, platform definitions should be deferred until compile time.
  276
++ */
  277
++#ifdef BYTE_ORDER
  278
++# undef WORDS_BIGENDIAN
  279
++# if BYTE_ORDER == BIG_ENDIAN
  280
++#  define WORDS_BIGENDIAN 1
  281
++# endif
  282
++#endif
  283
++
  284
++/*
  285
++ * Darwin's tools are capable of building multiple architectures in one pass.
  286
++ * As a result, platform definitions should be deferred until compile time.
  287
++ */
  288
++#ifdef BYTE_ORDER
  289
++# undef WORDS_BIGENDIAN
  290
++# if BYTE_ORDER == BIG_ENDIAN
  291
++#  define WORDS_BIGENDIAN 1
  292
++# endif
  293
++#endif
  294
++
  295
++/*
  296
++ * Although Darwin does have an fstab.h file, getfsfile etc. always return null.
  297
++ * At least, as of 5.3.
  298
++ */
  299
++#undef HAVE_FSTAB_H
  300
++
  301
++#define SWAPFILE_DIR "/private/var/vm"
  302
++#define SWAPFILE_PREFIX "swapfile"
  303
++
  304
++/*
  305
++ * These apparently used to be in netinet/tcp_timers.h, but went away in
  306
++ * 10.4.2. Define them here til we find out a way to get the real values.
  307
++ */
  308
++#define TCPTV_MIN       (  1*PR_SLOWHZ)         /* minimum allowable value */
  309
++#define TCPTV_REXMTMAX  ( 64*PR_SLOWHZ)         /* max allowable REXMT value */
  310
++
  311
++/*
  312
++ * Because Mac OS X is built on Mach, it does not provide a BSD-compatible
  313
++ * VM statistics API.
  314
++ */
  315
++#define USE_MACH_HOST_STATISTICS 1
  316
++
  317
++/*
  318
++ * This tells code that manipulates IPv6 that the structures are unified,
  319
++ * i.e., IPv4 and IPv6 use the same structs.
  320
++ * This should eventually be replaced with a configure directive.
  321
++ */
  322
++/* #define USE_UNIFIED_IPV6_STRUCTS 1 */
  323
++#undef STRUCT_in6pcb_HAS_inp_vflag
  324
++
  325
++/*
  326
++ * utility macro used in several darwin specific files
  327
++ */
  328
++#define SNMP_CFRelease(x) do { if (x) { CFRelease(x); x = NULL; } } while(0)
  329
++
  330
++/*
  331
++ * Mac OS X runs on both PPC and Intel hardware,
  332
++ *   which handle udpTable index values differently
  333
++ */
  334
++#include <TargetConditionals.h>
  335
++#ifdef TARGET_RT_LITTLE_ENDIAN
  336
++#define UDP_ADDRESSES_IN_HOST_ORDER 1
  337
++#endif
  338
++
10  Library/Formula/task.rb
@@ -2,17 +2,15 @@
2 2
 
3 3
 class Task < Formula
4 4
   homepage 'http://www.taskwarrior.org/'
5  
-  url 'http://www.taskwarrior.org/download/task-2.1.1.tar.gz'
6  
-  sha1 'c23cb320f3478e37527c5c3cc547286f97bacc7c'
  5
+  url 'http://www.taskwarrior.org/download/task-2.1.2.tar.gz'
  6
+  sha1 '4cd5a5cb562fa407f097e2cd7e7293183773cf5b'
7 7
 
8 8
   depends_on "cmake" => :build
9 9
 
10  
-  skip_clean :all
11  
-
12 10
   def install
13 11
     system "cmake", ".", *std_cmake_args
14 12
     system "make install"
15  
-    (etc+'bash_completion.d').install 'scripts/bash/task.sh'
16  
-    (share+'zsh/site-functions').install   'scripts/zsh/_task'
  13
+    (prefix/'etc/bash_completion.d').install 'scripts/bash/task.sh'
  14
+    (share/'zsh/site-functions').install 'scripts/zsh/_task'
17 15
   end
18 16
 end
6  Library/Formula/tomcat.rb
@@ -2,10 +2,8 @@
2 2
 
3 3
 class Tomcat < Formula
4 4
   homepage 'http://tomcat.apache.org/'
5  
-  url 'http://www.apache.org/dyn/closer.cgi?path=tomcat/tomcat-7/v7.0.29/bin/apache-tomcat-7.0.29.tar.gz'
6  
-  sha1 'f27061da957751d6feb58acb16ded680823203d4'
7  
-
8  
-  skip_clean :all
  5
+  url 'http://www.apache.org/dyn/closer.cgi?path=tomcat/tomcat-7/v7.0.30/bin/apache-tomcat-7.0.30.tar.gz'
  6
+  sha1 '2632d72b2e980f874ddc4f5b0f39a941f9937158'
9 7
 
10 8
   def install
11 9
     # Remove Windows scripts
2  Library/Homebrew/macos/xcode.rb
@@ -23,7 +23,7 @@ def latest_version
23 23
       when 10.6 then "3.2.6"
24 24
     else
25 25
       if MacOS.version >= 10.7
26  
-        "4.4.1"
  26
+        "4.5"
27 27
       else
28 28
         raise "Mac OS X `#{MacOS.version}' is invalid"
29 29
       end
Commit_comment_tip

Tip: You can add notes to lines in a file. Hover to the left of a line to make a note

Something went wrong with that request. Please try again.