text:
Node 16 support on self-hosted runners

TL;DR
When trying to use the action in a self-hosted runner, we get the following:
Error: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter ''using: node16' is not supported, use 'docker' or 'node12' instead.')
The self-hosted runner is a Debian machine using node 16.
Expected behavior
The error should not happen, just run the whole workflow.
Observed behavior
No response
Action YAML
name: Deploy

on:
  push:
    branches:
      - master

jobs:
    deploy-to-test:
    runs-on: [self-hosted, test-environment]

    needs: [version-bump]

    env:
      SLS_ENV: test

    steps:
     - name: Checkout repo
        uses: actions/checkout@v2
        with:
          ref: ${{ github.ref }}
      - name: Use Node.js 16
        uses: actions/setup-node@v2
        with:
          node-version: "16"
      - name: Install dependencies
        run: |
          npm ci
          cd db
          npm ci
          cd ..
      - name: Auth in GCloud
        uses: google-github-actions/auth@v0
        with:
          credentials_json: ${{ secrets.KEY }}
      - name: Set up Cloud SDK
        uses: google-github-actions/setup-gcloud@v0
        with:
          project_id: ${{ secrets.PROJECT }}

Log output
Download action repository 'actions/checkout@v2'
Download action repository 'actions/setup-node@v2'
Download action repository 'google-github-actions/auth@v0'
Download action repository 'google-github-actions/setup-gcloud@master'
Download action repository 'rtCamp/action-slack-notify@v2'
Error: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter ''using: node16' is not supported, use 'docker' or 'node12' instead.')
   at GitHub.Runner.Worker.ActionManifestManager.ConvertRuns(IExecutionContext executionContext, TemplateContext templateContext, TemplateToken inputsToken, String fileRelativePath, MappingToken outputs)
   at GitHub.Runner.Worker.ActionManifestManager.Load(IExecutionContext executionContext, String manifestFile)
Error: Fail to load google-github-actions/auth/v0/action.yml

Additional information
When we remove the specific auth step, everything works just fine.

Hi @maduq1 - you can pin to https://github.com/google-github-actions/auth/releases/tag/v0.4.4, which is the last release that supports Node 12. Node 12 is EOL and will no longer be supported after 2022-04-30.
The error message you're getting is coming from the GitHub Actions runner. Please make sure you're using the latest version. If you continue to get an error after upgrading to the latest version, I would recommend you contact GitHub support. Unfortunately there's nothing we can do in the auth action besides restore support for Node 12, but as I mentioned above, it's EOL and will no longer receive security updates soon. Given auth relies on cryptography, we cannot take that risk. Additionally, the GitHub managed runners do support Node 16, so I think this should be solvable with an update.
Please let me know if you have any questions.

Hi @sethvargo, I think the problem is just the opposite. Somehow, when pulling the code for this action, there is some sort of requirement to use node 12 somewhere here.
We have updated our runners and even had the same issue with another action: https://github.com/tool3/bump/pull/17
After updating the dependency there, our workflow worked fine.
Maybe there's something wrong on our code? Will uses: google-github-actions/auth@v0 pull the action with node 16 support correctly? Is there an easier way to debug this properly?

Hi @sethvargo sorry for multiple messages. Now I understand! In https://github.com/marketplace/actions/authenticate-to-google-cloud the latest published version is v0.4.3, and the version that only supports node16 is v0.5.0 onwards, so the problem I am experiencing might be because the latest published version is not released?

Hmm - we've published 0.5.0 and 0.6.0 since then. @bharathkkb any idea why the official action is lagging behind releases? Or @abirismyname?
@maduq1 v0 floats and current targets the same hash as v0.6.0: https://github.com/google-github-actions/auth/tags

@abirismyname the release showed the Publish this Action to the GitHub Marketplace as checked. I unchecked and checked it again followed by updating the release and it showed up in the marketplace. I had assumed the Publish this Action to the GitHub Marketplace was sticky and did that for subsequent new releases?

Something very odd that I receive, apart of the node12 error, is the following: Fail to load google-github-actions/auth/v0/action.yml It looks like it cannot find the file?
I have checked the logs and it looks the sha is right: Download action repository 'google-github-actions/auth@v0' (SHA:8d125895b958610ec414ca4dae010257eaa814d3) (this points to v0.6.0)
Download action repository 'google-github-actions/setup-gcloud@v0' (SHA:04141d8a7edfc8c679682f23e7bbbe05cbe32bb3)
Download action repository 'rtCamp/action-slack-notify@v2' (SHA:12e36fc18b0689399306c2e0b3e0f[29](https://git.build.ingka.ikea.com/smaland/smaland_backend/runs/314170?check_suite_focus=true#step:1:29)78b7f1ee7)
Error: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter ''using: node1[6](https://git.build.ingka.ikea.com/smaland/smaland_backend/runs/314170?check_suite_focus=true#step:1:6)' is not supported, use 'docker' or 'node12' instead.')
   at GitHub.Runner.Worker.ActionManifestManager.ConvertRuns(IExecutionContext executionContext, TemplateContext templateContext, TemplateToken inputsToken, String fileRelativePath, MappingToken outputs)
   at GitHub.Runner.Worker.ActionManifestManager.Load(IExecutionContext executionContext, String manifestFile)
Error: Fail to load google-github-actions/auth/v0/action.yml```

Hi @maduq1
That error makes sense. I don't think the self-hosted actions runner supports Node 16 yet. The error specifically says "node 1[6] is not supported". Note we don't control the self-hosted runners or actions package, and Node 12 is headed to EOL shortly.

I've been checking and I think they do support node16. As I mentioned, we had the same problem with another marketplace action https://github.com/tool3/bump/pull/17 and after the fix, everything worked as expected. We were having the very same error.

Hi @maduq1
I'm not really sure how to debug this. The error message has weirdly misplaced quotes and the six is in brackets [6]. The error message is also clearly saying that "node12" is the only valid value.
Are your self-hosted runners ephemeral?

I don't know either. I think the error message is not totally right, I think it messed up with markdown somehow.
The quotes are definitely misplaced and duplicated, but the 6 is in place:

Error: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter ''using: node16' is not supported, use 'docker' or 'node12' instead.')
at GitHub.Runner.Worker.ActionManifestManager.ConvertRuns(IExecutionContext executionContext, TemplateContext templateContext, TemplateToken inputsToken, String fileRelativePath, MappingToken outputs)
at GitHub.Runner.Worker.ActionManifestManager.Load(IExecutionContext executionContext, String manifestFile)
Error: Fail to load google-github-actions/auth/v0/action.yml

Our self-hosted runners are not ephemeral, they are Debian VMs that are up all day long. I also made sure to update node in them, and remove any trace of node12. I understand this is hard to debug, my apologies. Should you have any idea about other logging we can look for, just give me a shout. And thanks a lot for checking!

Do you know what version of the Actions runner you're using on your VMs? Are you using the virtual-environments setup too?

They are running the version 2.283.3. Regarding virtual-environments, I am not sure what that is (is it related with python? our project is js) so I'd say my answer is no 😅

Hi @maduq1 - I believe 2.283 is quite behind. 2.285.0 appears to be the first version where Node 16 was supported. I would recommend updating your runner version. If the latest version isn't available, you should reach out to GitHub support.
Re: virtual-environments, these are the base machine images that have pre-installed software, etc.
Since 2.283.3 does not support Node 16 per the release notes, the most appropriate action is to update the version of your runners. I'm going to make an update to our readme to hint the minimum version, then I'll close out this issue.

Hi @sethvargo, thanks for all the support.
Now it's finally working. Our main mistake was referring to the default instructions that appear when clicking on "New Runner" from Github. There the version it suggests is way lower than the latest release, which can be obtained from here
Funnily enough, our runners have updated themselves a couple of times (they are not very clean in doing so, we can see the folders where they extract the changes), but didn't update to the latest one 🤷

@maduq1 - that feels like good feedback to submit to the GitHub Actions team via a support ticket 😄

authors: bharathkkb maduq1 sethvargo

repo: google-github-actions/auth


text:
Cannot use env with no value

TL;DR
Empty env makes action to crash.
Expected behavior
Set env to empty value. (like export TEST_ENV=)
Observed behavior
Error
Action YAML
on:
 workflow_call:
  inputs:
    ENV_DEBUG_OVERWRITE:
      required: false
      type: string

jobs:
 deploy:
  runs-on: ubuntu-latest
  environment: ${{ inputs.ENVIRONMENT }}
  steps:
  - name: Deploy
     uses: "google-github-actions/deploy-cloudrun@v1"
     with:
       env_vars: |
         ENV_DEBUG_OVERWRITE=${{ inputs.ENV_DEBUG_OVERWRITE}}

Log output
Run google-github-actions/deploy-cloudrun@v1
  with:
    service: ...
    region: ...
    image: ...
    env_vars:
  ENV_DEBUG_OVERWRITE=

    secrets: ...

    skip_default_labels: false
    no_traffic: false
  env:
    ...
Error: google-github-actions/deploy-cloudrun failed with: failed to parse KEY=VALUE pair "ENV_DEBUG_OVERWRITE=": no value

Additional information
No response

Fixed by upgrading to google-github-actions/deploy-cloudrun@v2

source: gharchive/issue

repo: google-github-actions/deploy-cloudrun

license_type: permissive

license_source: bigquery


text:
Reproducing the flan_v2 results of T5-xl

First, thanks for this excellent work. However, I met some problems when reproducing the results of T2-xl.
My setting is:
Pretrained model and optimizer:
I used the T5-v1_1-xl pretrained model and following the training setting in "Scaling Instruction-Finetuned Language Models": batch size 64, Dropout 0.05, LR 5e-4, 38K steps, adafactor optimizer.
Data:
For the data, I first used the training data provided by SirNeural and evaluated the model on MMLU. When I equally sampled the 5 datasets (i.e. cot, flanv2, t0, diglog, niv2), I got  45% 5-shot accuracy on MMLU, which is similar to the  w/o mixture balancing result in the paper. However,  after I mixed the data with the suggested rates here, the accuracy is not improved (44%).
Afterwards, I tried the data provided by Enrico Shippole and mixed the data following the suggested rates. But the accuracy became worse (42% on MMLU). I also tried to use a larger batch size (128, considering batch packing ) and deduplicate the data, which nearly didn't help.
Are there any suggestions to reproduce the MMLU results of the released Flan-xl-t5 model (49%) or even the results in the paper(52%) ?  Thanks a lot.

@danczs Thanks for the question.
A couple thoughts:

I'm surprised that the SirNeural did so well. The reason we recommended Enrico's version is because it properly applies the dataset caps and sample balancing so the overall mixture isn't dominated by the largest datasets. Even if you balance the SirNeural subsets with the given mixture ratios, they should still be dominated by the largest datasets in each subset.
I would not hold too strictly to the hyperparameters we used in the paper, since that was with a particular internal configuration of TPUs that I've heard doesn't generalize well to GPUs or other TPU configurations necessarily.
Is the model still learning after 38k steps? We trained for longer I believe.
Surprised Enrico's version didn't do very well. If you just train with T0 or Flan2021 subsets does it do better than 42% -- I believe it should? Wondering if there is an issue with some subset of the data.

Sorry this could not be more helpful. It's hard to translate the internal code (which I no longer have access to) to external implementations. I would also note that my co-authors did A LOT of tuning and runs with internal configuration to get the 52% number. The variability per run with the same data can vary by 1-2% max performance, and then between checkpoints on the same run you might see another 1-2% variability even after its converged. (Just something to keep in mind.)
Best,

@shayne-longpre  Thanks very much for your reply.

Yeah, SirNeural's dataset is much larger than Enrico's (e.g. 300 million vs  5  million instances for FLAN2021) and is at risk of duplication. However, it seems that Enrico's dataset has its own problem.
Thanks for your suggestion, I'll try more hyper-parameters.
Yeah, according to the trend, the loss will continue decreasing. But the model is a little overfitting, since the result is not improved or even worse after 20k steps. I'll try a much lower lr with more steps.
I tried Enrico's FLAN 2021 set for 40k steps and only got 35%.

Thanks for your explanations, it helps a lot.

@danczs Hmm I'm not sure why it was so low. I noticed that a few recent papers seem to have gotten strong results with a 100k sample of the training data (e.g. https://arxiv.org/pdf/2306.04751.pdf) and their training code is public.
Also, maybe Hyung Won's recent comments provide some insights here?

authors: danczs shayne-longpre

repo: google-research/FLAN


text:
How to use this code with less computing resource?

Hi,
I have a question about circuit training for Araine RISC-V, in the guidance you have provided. You used a lot of computing resources including 20 96vCPUs and 8xV100 GPUs, however we do not have that much computing resources,  is that means we can not get a reasonable training result(episode return increase with training process) like you have presented in your tensorboard? If we can get a good training result with our server configuration, would you please tell us how to adjust hyperparameters in your source code, thanks!

You need a lot of CPUs to generate all of the training data. There is nothing currently that you can do about that. If you had less agents, then the system would just take longer to get the data needed for each iteration.


text:
What is the meaning of expanding the dataset about labeled and unlabeled data?

Hi, I recently read FixMatch's paper and code. In the implementation of FixMatch, for example, 4000 labeled data; you need to copy the labeled data to 65536, and copy the remaining unlabeled to 65536*7. I don't quite understand why do this. Do you know why do this？ Or is it the default setting for semi-supervised fields?

I don't quite follow the question. What do you mean "copy the labeled data to 65536"? We train for 65536 kimgs as a hyperparameter, in order to get as high accuracy as possible.

authors: Chen-Song carlini

repo: google-research/fixmatch


text:
fast-attention: train well but predict badly

I use the transformer model in models/official/nlp/transformer/transformer.py to train a seq2seq model, replacing the built-in keras attention with performer fast-attention(tensorflow version),  for example, the decoder stack is as follows

It seams images can't be displayed:

    # DecoderStack
    def build(self, input_shape):
        """Builds the decoder stack."""
        params = self.params
        for _ in range(params["num_hidden_layers"]):
            if not params["use_fast_attn"]:  # ==========set to True to use fast_attention=============
                self_attention_layer = attention_layer.SelfAttention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"])
                enc_dec_attention_layer = attention_layer.Attention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"])
            else:
                self_attention_layer = fast_attention.SelfAttention(  # ==========use fast_attention=============
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"],
                    kernel_transformation=fast_attention.softmax_kernel_transformation,
                    causal=True,
                    projection_matrix_type=1,
                    nb_random_features=nb_random_features,  # =============100(model hidden size is 512)============
                )
                enc_dec_attention_layer = fast_attention.Attention(  # ==========use fast_attention=============
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"],
                    kernel_transformation=fast_attention.softmax_kernel_transformation,
                    causal=False,
                    projection_matrix_type=1,
                    nb_random_features=nb_random_features,
                )
            feed_forward_network = ffn_layer.FeedForwardNetwork(
                params["hidden_size"], params["filter_size"], params["relu_dropout"])

            self.layers.append([
                PrePostProcessingWrapper(self_attention_layer, params),  # x->LNorm(x)->{layer(x)=y}->Dropout(y)->y+x
                PrePostProcessingWrapper(enc_dec_attention_layer, params),
                PrePostProcessingWrapper(feed_forward_network, params)
            ])
        self.output_normalization = tf.keras.layers.LayerNormalization(
            epsilon=1e-6, dtype="float32")
        super(DecoderStack, self).build(input_shape)

The training stage is perfect, with good decoder outputs almost the same as the targets. An example is, if the target is "He is playing basktball in the basketball gym", the output could be the same.

But when doing inference, the decoder outputs are very bad. The output for the above example now is "He is playing is playing is playing is playing is playing ", even more worse with "He He He He He He He He He He He He ".

I just change the mode from "train" to "predict", and use beam search. Whether setting beam_size=1 or not, the output is the same and bad.

When doing inference, I check the decoder attention output(layer0) in "fast_attention.py>Attention>call()", the states between beams of an sample are almost the same in step 2.

It seams images can't be displayed:

        if cache is not None:
            # Combine cached keys and values with new keys and values.
            if decode_loop_step is not None:
                cache_k_shape = cache["k"].shape.as_list()
                indices = tf.reshape(
                    tf.one_hot(decode_loop_step, cache_k_shape[1], dtype=key.dtype),
                    [1, cache_k_shape[1], 1, 1])
                key = cache["k"] + key * indices
                cache_v_shape = cache["v"].shape.as_list()
                indices = tf.reshape(
                    tf.one_hot(decode_loop_step, cache_v_shape[1], dtype=value.dtype),
                    [1, cache_v_shape[1], 1, 1])
                value = cache["v"] + value * indices
        else:
            key = tf.concat([tf.cast(cache["k"], key.dtype), key], axis=1)
            value = tf.concat([tf.cast(cache["v"], value.dtype), value], axis=1)

            # Update cache
            cache["k"] = key
            cache["v"] = value

        attention_output = favor_attention(query, key, value,
                                           self.kernel_transformation, self.causal,
                                           bias, projection_matrix)

        # the attention_output is:
        attention_output = tf.Tensor(
        [[-9.661879   2.9591107  1.3627272 ... -5.7556434 -4.247857   5.5499997]
         [-9.661878   2.9591098  1.3627269 ... -5.7556424 -4.247855   5.55     ]
         [-9.661879   2.9591098  1.3627272 ... -5.755643  -4.247857   5.5499997]
         [-9.661878   2.9591103  1.3627266 ... -5.755642  -4.2478557  5.549999 ]
         [-9.661879   2.9591098  1.3627272 ... -5.7556434 -4.247856   5.5499997]], shape=(5, 512), dtype=float32)

Using the raw code and the built-in keras attention, everying is good.

any help, thanks.

Currently the problem is:
While inferring, the first token can be generated correctly, but it starts generating repeatedly from the second step. So the output looks like "PAD A A A A A A A...". (A is expected; PAD is the start token of sentence of decoder.)
After the first token has been generated, I remove the PAD-token, then the second token can be correct, but afterwards it repeats again. The output looks like "A B C B C B C B C..." or "A B B B B B B B B..." (A B C are all expected)

Just another fast attention user. Haven't study your model.
From my observation, the attention_dropout and the training are not yet supported in the build and call function correspondingly.
In my model, the validation loss is higher than the training loss. Hence, overfitting.
Is this the reason behind your 'train well predict bad' scenario? If yes, place a separate Dropout layer after this fast Attention layer.
ps: tensorflow supports embedded dropout badly. e.g. LSTM(dropout=...) memory leakage since 2.0 not fixed until recently >2.3?

Just another fast attention user. Haven't study your model.
From my observation, the attention_dropout and the training are not yet supported in the build and call function correspondingly.
In my model, the validation loss is higher than the training loss. Hence, overfitting.
Is this the reason behind your 'train well predict bad' scenario? If yes, place a separate Dropout layer after this fast Attention layer.
ps: tensorflow supports embedded dropout badly. e.g. LSTM(dropout=...) memory leakage since 2.0 not fixed until recently >2.3?

Just another fast attention user. Haven't studied your model.
From my observation, the attention_dropout and the training are not yet supported in the build and call function correspondingly.
In my model, the validation loss is higher than the training loss. Hence, overfitting.
Is this the reason behind your 'train well predict bad' scenario? If yes, place a separate Dropout layer after this fast Attention layer.
ps: tensorflow supports embedded dropout badly. e.g. LSTM(dropout=...) memory leakage since 2.0 not fixed until recently >2.3?

Thanks, I just tried it and indeed didn't delve into the implementation of fast-attention, sorry.
Out of confidence in the author, I didn't think it was an simple overfitting problem due to the invalid dropout, but a complex one.
I will read the code in detail.
Thanks again.

Just another fast attention user. Haven't studied your model.
From my observation, the attention_dropout and the training are not yet supported in the build and call function correspondingly.
In my model, the validation loss is higher than the training loss. Hence, overfitting.
Is this the reason behind your 'train well predict bad' scenario? If yes, place a separate Dropout layer after this fast Attention layer.
ps: tensorflow supports embedded dropout badly. e.g. LSTM(dropout=...) memory leakage since 2.0 not fixed until recently >2.3?

Thanks, I just tried it and indeed didn't delve into the implementation of fast-attention, sorry.
Out of confidence in the author, I didn't think it was an simple overfitting problem due to the invalid dropout, but a complex one.
I will read the code in detail.
Thanks again.

Just another fast attention user. Haven't studied your model.
From my observation, the attention_dropout and the training are not yet supported in the build and call function correspondingly.
In my model, the validation loss is higher than the training loss. Hence, overfitting.
Is this the reason behind your 'train well predict bad' scenario? If yes, place a separate Dropout layer after this fast Attention layer.
ps: tensorflow supports embedded dropout badly. e.g. LSTM(dropout=...) memory leakage since 2.0 not fixed until recently >2.3?

I check the code and it's true for "the attention_dropout and the training are not yet supported in the build".
For "If yes, place a separate Dropout layer after this fast Attention layer.", each layer has been wrapped by the PrePostProcessingWrapper layer, which include the layer norm and dropout:
# code in DecodeStack/build()
...
        for _ in range(params["num_hidden_layers"]):
            if not params["use_fast_attn"]:
                self_attention_layer = attention_layer.SelfAttention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"])
                enc_dec_attention_layer = attention_layer.Attention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"])
            else:
                self_attention_layer = fast_attention.SelfAttention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"],
                    kernel_transformation=fast_attention.softmax_kernel_transformation,
                    causal=True,
                    projection_matrix_type=1,
                    nb_random_features=nb_random_features,
                )
                enc_dec_attention_layer = fast_attention.Attention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"],
                    kernel_transformation=fast_attention.softmax_kernel_transformation,
                    causal=False,
                    projection_matrix_type=1,
                    nb_random_features=nb_random_features,
                )
            feed_forward_network = ffn_layer.FeedForwardNetwork(
                params["hidden_size"], params["filter_size"], params["relu_dropout"])
            # ==================wrap each layer===================
            self.layers.append([
                PrePostProcessingWrapper(self_attention_layer, params),  # x->LNorm(x)->{layer(x)=y}->Dropout(y)->y+x
                PrePostProcessingWrapper(enc_dec_attention_layer, params),
                PrePostProcessingWrapper(feed_forward_network, params)
            ])
...
# And the PrePostProcessingWrapper
class PrePostProcessingWrapper(tf.keras.layers.Layer):
    """Wrapper class that applies layer pre-processing and post-processing."""
    def __init__(self, layer, params):
        super(PrePostProcessingWrapper, self).__init__()
        self.layer = layer
        self.params = params
        self.postprocess_dropout = params["layer_postprocess_dropout"]

    def build(self, input_shape):
        # Create normalization layer
        self.layer_norm = tf.keras.layers.LayerNormalization(
            epsilon=1e-6, dtype="float32")
        super(PrePostProcessingWrapper, self).build(input_shape)

    def get_config(self):
        return {
            "params": self.params,
        }
    def call(self, x, *args, **kwargs):
        """Calls wrapped layer with same parameters."""
        # Preprocessing: apply layer normalization
        training = kwargs["training"]

        # axis=-1
        y = self.layer_norm(x)  #  ============using pre layer norm==============

        # Get layer output
        y = self.layer(y, *args, **kwargs)

        # Postprocessing: apply dropout and residual connection
        if training:
            y = tf.nn.dropout(y, rate=self.postprocess_dropout)  # ========using dropout when training=========
        return x + y  #

Just another fast attention user. Haven't studied your model.
From my observation, the attention_dropout and the training are not yet supported in the build and call function correspondingly.
In my model, the validation loss is higher than the training loss. Hence, overfitting.
Is this the reason behind your 'train well predict bad' scenario? If yes, place a separate Dropout layer after this fast Attention layer.
ps: tensorflow supports embedded dropout badly. e.g. LSTM(dropout=...) memory leakage since 2.0 not fixed until recently >2.3?

I check the code and it's true for "the attention_dropout and the training are not yet supported in the build".
For "If yes, place a separate Dropout layer after this fast Attention layer.", each layer has been wrapped by the PrePostProcessingWrapper layer, which include the layer norm and dropout:
# code in DecodeStack/build()
...
        for _ in range(params["num_hidden_layers"]):
            if not params["use_fast_attn"]:
                self_attention_layer = attention_layer.SelfAttention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"])
                enc_dec_attention_layer = attention_layer.Attention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"])
            else:
                self_attention_layer = fast_attention.SelfAttention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"],
                    kernel_transformation=fast_attention.softmax_kernel_transformation,
                    causal=True,
                    projection_matrix_type=1,
                    nb_random_features=nb_random_features,
                )
                enc_dec_attention_layer = fast_attention.Attention(
                    params["hidden_size"], params["num_heads"],
                    params["attention_dropout"],
                    kernel_transformation=fast_attention.softmax_kernel_transformation,
                    causal=False,
                    projection_matrix_type=1,
                    nb_random_features=nb_random_features,
                )
            feed_forward_network = ffn_layer.FeedForwardNetwork(
                params["hidden_size"], params["filter_size"], params["relu_dropout"])
            # ==================wrap each layer===================
            self.layers.append([
                PrePostProcessingWrapper(self_attention_layer, params),  # x->LNorm(x)->{layer(x)=y}->Dropout(y)->y+x
                PrePostProcessingWrapper(enc_dec_attention_layer, params),
                PrePostProcessingWrapper(feed_forward_network, params)
            ])
...
# And the PrePostProcessingWrapper
class PrePostProcessingWrapper(tf.keras.layers.Layer):
    """Wrapper class that applies layer pre-processing and post-processing."""
    def __init__(self, layer, params):
        super(PrePostProcessingWrapper, self).__init__()
        self.layer = layer
        self.params = params
        self.postprocess_dropout = params["layer_postprocess_dropout"]

    def build(self, input_shape):
        # Create normalization layer
        self.layer_norm = tf.keras.layers.LayerNormalization(
            epsilon=1e-6, dtype="float32")
        super(PrePostProcessingWrapper, self).build(input_shape)

    def get_config(self):
        return {
            "params": self.params,
        }
    def call(self, x, *args, **kwargs):
        """Calls wrapped layer with same parameters."""
        # Preprocessing: apply layer normalization
        training = kwargs["training"]

        # axis=-1
        y = self.layer_norm(x)  #  ============using pre layer norm==============

        # Get layer output
        y = self.layer(y, *args, **kwargs)

        # Postprocessing: apply dropout and residual connection
        if training:
            y = tf.nn.dropout(y, rate=self.postprocess_dropout)  # ========using dropout when training=========
        return x + y  #

I train the transformer model with the built-in attention. The predictions are good with results like "A B C D E F G...".
Then I almost directly replace the built-in attention with the fast one(TF performer). Without any re-training, the predictions become bad with results containing repetive words like "A B B B..."
Maybe the TF-version performer has bug. I'll keep going through the code.

I train the transformer model with the built-in attention. The predictions are good with results like "A B C D E F G...".
Then I almost directly replace the built-in attention with the fast one(TF performer). Without any re-training, the predictions become bad with results containing repetive words like "A B B B..."
Maybe the TF-version performer has bug. I'll keep going through the code.

Your inference output seems stuttering in the early stage. Then it must be related to the inference cycle. Say the proper use of the 'cache' parameter in the function call() because, unlike ordinary RNN with self-attention, fast attention relies on manual relaying of internal states. If it's still not working, then there maybe programming bugs in the inference logic.

repo: google-research/google-research


text:
why multiply -1 to viewdirs in orientation_loss

Hi, I noticed that in orientation_loss, the viewdirs are multiplied with -1. The comment says this is to represent normalized vectors from point to camera.
v = -1. * rays.viewdirs
n_dot_v = (n * v[..., None, :]).sum(axis=-1)

This seems to be different with equation 11 in ref-nerf paper. Could you please give me some hints about it?

Sorry I misunderstood. The loss is computed with minimum instead of maximum, so the implementation is correct.
https://github.com/google-research/multinerf/blob/b02228160d3179300c7d499dca28cb9ca3677f32/internal/train_utils.py#L167

repo: google-research/multinerf


text:
For OWL-ViT, is there a demo which shows the way using image patch as querys to do one-shot detection?

Hi, thanks for your great work. And the demo of text zero-shot is amazing.
For OWL-ViT, is there a demo which shows the way using image patch as querys to do one-shot detection?
Thanks.

Hi, we're actively working on this demo and will let you know when it's available, hopefully some time next week.

@mjlm And what prompt is used in coco evaluation? In the paper, it says it uses the seven best prompts, so what are the seven best text prompts? Thanks.

The prompts can be found in the CLIP repository. During inference we used the 7 ensembling prompts from the colab.

Is this still in the works? I've been interested in seeing how image input queries could be used as well

Hi, we're actively working on this demo and will let you know when it's available, hopefully some time next week.

Hi, is this one-shot detection demo finished? I'm also very interested in it and want to try.

We're still working on this and will let you know here when the demo is ready. I re-opened the issue to keep track.

We're still working on this and will let you know here when the demo is ready. I re-opened the issue to keep track.

That would be very nice, thank you!

We just added a Playground Colab with an interactive demo of both text-conditioned and image-conditioned detection:

The underlying code illustrates how to extract an embedding for a given image patch, specifically here: https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/notebooks/inference.py#L110-L131
Let us know if you have any questions!

We just added a Playground Colab with an interactive demo of both text-conditioned and image-conditioned detection:

The underlying code illustrates how to extract an embedding for a given image patch, specifically here: https://github.com/google-research/scenic/blob/main/scenic/projects/owl_vit/notebooks/inference.py#L110-L131
Let us know if you have any questions!

Thanks for your reply！I don't have any problems now.

Hi, @mjlm , thanks for your great  work!
I wonder if there are any plans to implement multi-query image-conditioned detection.
Sometimes a single query image is often unable to capture all the features of an object, and using multiple query images to represent it can yield better results.
thanks again!

You can simply average the embeddings of multiple boxes to get a query embedding. This is how we implemented few-shot (i.e. more than one-shot) detection in the paper.
#890 will add example code for image-conditioned detection to the colab. The example shows how to get a query_embedding from the class_embeddings of the source (query) image. If you have e.g. two query embeddings representing the same object, you can simply do two_shot_query_embedding = (query_embedding_1 + query_embedding_2) / 2. This simple method worked for us. Another option would be to keep the embeddings separate, but map them to the same class after classification.

authors: AlexeyG BIGBALLON Edwardmark mjlm stevebottos xishanhan

repo: google-research/scenic


text:
Use cache for Renode downloading in CI

This will save a lot of bandwidth and speed up the whole CI process
I mark it as a draft, as it's still using Renode action from a branch. As soon as we merge it, I'll update this PR

The action is released, so this is ready to be reviewed. This allows us to download Renode once per a CI run instead of ~500 times.

source: gharchive/pull-request

repo: google/CFU-Playground


text:
[EN] Feedback for: /web/fundamentals/getting-started/push-notifications/step-06?hl=en

Hey!
Where you tell the user to copy the subscription IDs - be careful!
Chrome converts periods to be ellipses in console output, which means the subscription ID becomes corrupted.
Copying and pasting this will be a problem later on in the guide because of this.
Darryl

Merging into #3445

authors: petele whiteswift

repo: google/WebFundamentals


text:
Web tutorial on debugging w/ DevTools does not produce expected result.

In the article Web "Get Started With Debugging JavaScript In Chrome DevTools, at Step 2 "Pause the code with a breakpoint," with DevTools open and in the state directed by the article, clicking on the "Add Number 1 And Number 2" button produces no breakpoint. Nor did the execution stop on another line of code. Rather, it continued to the end reproducing the error (5 + 1 =51).
Moreover, clicking on the "file an issue" link produced no result.
Chrome 57.0.2987.110 (64-bit); MacBook Air running Sierra 10.12.3.

Hi @alxfyv I was not able to reproduce the described bug in deb tools, however, I did noticed  "file an issue" link error. I'll file separate issue for that. Thanks !

authors: alxfyv kosamari


text:
Where is the Device Toolbar?

Welcome! Please use this template for reporting documentation issues on https://developers.google.com/web/.
For questions about Chrome DevTools, checkout the
google-chrome-devtools tag on StackOverflow.
For questions about Chrome, check the google-chrome
tag. If you think you've found a Chrome bug, check out our
feedback page for more details on how to file it.
Page Affected: https://developers.google.com/web/TODO
https://developers.google.com/web/tools/chrome-devtools/device-mode/
What needs to be done?
Please provide description of what's needs to be done here. Please be sure to include the link to the original page
and any supporting links/data.
Instructions on where to find, or how to open the Device Toolbar.  It states to "Click Toggle Device Toolbar" - no indication of where these words are located nor what to click or toggle.  It assumes that the toolbar is already opened.  Does not instruct how to open it.

[ ] Appropriate type-something label has been added.
[ ] Appropriate section-something label has been added.

The button is located in between "Elements" and the inspect icon (the leftmost one) in the DevTools toolbar. if you browse the article with images enabled you can see the same icon next to the "Click Toggle Device Toolbar".
You can also toggle Device Mode by hitting Ctrl/Cmd+Shift+M.

authors: mbrasseau myakura


text:
Fix typo

What's changed, or what was fixed?

Fix typo

Fixes: N/A
Target Live Date: N/A

[ ] This has been reviewed and approved by (NAME)
[X] I have run gulp test locally and all tests pass.
[x] I have added the appropriate type-something label.
[ ] I've staged the site and manually verified that my content displays correctly.

R: @petele

@gauntface - please merge when you're happy.


text:
Blockchain App ClassyShark 3exodus

How reliable is ClassyShark 3exodus when scanning an App which Implements Blockchain Tech?

ClassyShark doesn't care which APK it is inspecting

authors: borisf thelostamerican

repo: google/android-classyshark


text:
Catalog application is stuck when submit button is clicked for Attachment response.

Describe the bug
In catalog app, captured response json is shown on the screen when user click on submit button.
If attachment size is more than 500 KB then application get stuck when user click on Submit button.
Component
reference app, or SDC gallery app
To Reproduce
Steps to reproduce the behavior:

Go to Catalog app
Click on attachment component
Click on Take Photo
Photo get uploaded to the attachment.
Click on Submit button
See catalog app get stuck and then exits

Expected behavior
Application should not be stuck.
May be attachment binary data can be skipped when response json get shown in the form of text on the screen.
Screenshots
If applicable, add screenshots to help explain your problem.
Smartphone (please complete the following information):

Device: Nokia 3.4
Android version: Android 12

Additional context
Add any other context about the problem here.
Would you like to work on the issue?
Please state if this issue should be assigned to you or who you think could help to solve this issue.

@shelaghm @FikriMilano

@santosh-pingle can you say more about this?
My understanding is that

It seems like this error shouldn't happen and that we should fix this bug
If we can't fix the issue, we could show an error message so that people know what's causing the app to get stuck?

Did you have something else in mind?

@santosh-pingle
Correct me if I'm wrong, but this likely happens because the questionnaire response contains an attachment binary that is too large.
Even if you're not trying to display the attachment binary in a text after submission, the issue still happens.
This ticket should resolve this issue: https://github.com/google/android-fhir/issues/1858

authors: FikriMilano santosh-pingle shelaghm

repo: google/android-fhir


text:
Inconsistency issue - geo_performance

https://github.com/google/app-reporting-pack/blob/9821415aafccb90152ffdad2b9a75ce5599707ac/bq_queries/geo_performance.sql#L47
this join brings duplicates and inconsistency in metrics, in particular costs value

Thanks for spotting this! Fixed in Remove duplicates from geo_performance table.

authors: AndreyMarkinPPC yershovkiril

repo: google/app-reporting-pack

license_source: github-api


text:
CModuleContainerNode.java:118: error: incompatible types: Object cannot be converted to TreeNode

I'm unable to compile binnavi:
16:45:31.172 [ERROR] [system.err] binnavi-master/src/main/java/com/google/security/zynamics/binnavi/Gui/MainWindow/ProjectTree/Nodes/ModuleContainer/CModuleContainerNode.java:118: error: incompatible types: Object cannot be converted to TreeNode
16:45:31.173 [ERROR] [system.err]     for (TreeNode node : children) {
16:45:31.173 [ERROR] [system.err]                          ^
16:45:31.737 [ERROR] [system.err] Note: Some input files use or override a deprecated API.
16:45:31.737 [ERROR] [system.err] Note: Recompile with -Xlint:deprecation for details.

Hmm, JDK 11 is required to build this project, and it's not mentioned in the README file

repo: google/binnavi


text:
Why parameter ‘prob_crossover’ is 0？

Hi,
I know that neat algorithm needs to crossover in the evolution. Does WANN abandon this point and only make the mutation?
Thanks

Hey,
this is largely due to how NEAT defines crossover:

Matching genes are inherited randomly, whereas disjoint genes (those that do not match in the middle) and excess genes (those that do not match in the end) are inherited from the more fit parent.

From "Evolving Neural Networks through Augmenting Topologies"
In the implementation (of this repository) it is stated a bit more clear: Take all genes from the more fit parent. With some chance take some of the weights of the less fit parents for those genes that match up. Since WANNs don't use weights, this version of crossover becomes pretty much meaningless.
I was honestly suprised by this as well.  Deprecation of crossover is neither mentioned in the paper nor on the github-website. It would certainly be interesting to see whether crossover can take on a different shape in the context of WANNs.
TL;DR: Crossover in NEAT just affects the weights.

Hey,
this is largely due to how NEAT defines crossover:

Matching genes are inherited randomly, whereas disjoint genes (those that do not match in the middle) and excess genes (those that do not match in the end) are inherited from the more fit parent.

From "Evolving Neural Networks through Augmenting Topologies"
In the implementation (of this repository) it is stated a bit more clear: Take all genes from the more fit parent. With some chance take some of the weights of the less fit parents for those genes that match up. Since WANNs don't use weights, this version of crossover becomes pretty much meaningless.
I was honestly suprised by this as well. Deprecation of crossover is neither mentioned in the paper nor on the github-website. It would certainly be interesting to see whether crossover can take on a different shape in the context of WANNs.
TL;DR: Crossover in NEAT just affects the weights.

Thanks for your reply!
But I thought the crossover in NEAT is realized after the Innovation ID.
Here is the Fig. Whats in the Fig is the Crossover of structure?

Hey,
this is largely due to how NEAT defines crossover:

Matching genes are inherited randomly, whereas disjoint genes (those that do not match in the middle) and excess genes (those that do not match in the end) are inherited from the more fit parent.

From "Evolving Neural Networks through Augmenting Topologies"
In the implementation (of this repository) it is stated a bit more clear: Take all genes from the more fit parent. With some chance take some of the weights of the less fit parents for those genes that match up. Since WANNs don't use weights, this version of crossover becomes pretty much meaningless.
I was honestly suprised by this as well. Deprecation of crossover is neither mentioned in the paper nor on the github-website. It would certainly be interesting to see whether crossover can take on a different shape in the context of WANNs.
TL;DR: Crossover in NEAT just affects the weights.

Thanks for you reply!
But in this Fig, the child tree change the structure through the parent's Innovation ID.
Is that a Crossover?

Hey guys, when we made WANNs NEAT was our starting point, but we simplified it greatly, cutting out speciation and crossover.
The motivation was not that we thought it would necessarily work better without crossover and speciation but that to communicate the main point that we could encode the solutions entirely in the structure. NEAT has a lot of moving parts, and as we were presenting this to an ML audience not an EA audience, we thought the cleaner we could make the implementation the better.
So rather than having to explain crossover in the paper, we cut it. Rather than having to explain compatibility distance and fitness sharing, we cut it.
But is all still in there. You can run start using crossover and speciation just by changing some hyperparameters. It worked without, but we didn't do any thorough testing to see if it would have worked better with. My intuition is that crossover will not be that beneficial, there are no weights to average and so it will just add structure --- in the WANN case we are trying to find less complex solutions, so this might be a cross purposes. If you do start using crossover remember that crossover takes place only within species. The way things are set up right now we are only using multi-objective optimization and no species, or rather all are in the same species. This will end up in a lot of bloat. Be sure to use species if you are using crossover.
If you are playing around and find something interesting don't hesitate to let us know!

But in this Fig(from NEAT), the child tree change the structure through the parent's Innovation ID.
Is that a Crossover?

Ah, interesting - the paper states:

In composing the offspring, genes are randomly chosen from either parent at matching genes,whereas all excess or disjoint genes are always included from the more fit parent.

Only in the caption of figure 4 does it add:

In this case, equal fitnesses are assumed, so the disjoint and excess genes are also inherited randomly.

Pretty, weird that they base their image on an edge case...
@agaier It won't even add structure, though, since due to the way crossover is implemented in this repository, all genes are always inherited from the more fit parent (and it is assumend that there won't be equally fit parents) - only the weights might be inherited from the less fit parent (the relevant implementations can be found [here (WANN)](https://github.com/google/brain-tokyo-workshop/blob/master/WANNRelease/WANN/wann_src/_variation.py#L94] and here (prettyNEAT) -  prettyNeatWann does not contain any crossover function).
@jinglinglingling If you want to test crossover on WANNs, it might be worth looking at other NEAT implementations and see if they also structurally crossover the two parents.

authors: agaier jinglinglingling plonerma

repo: google/brain-tokyo-workshop


text:
support for new environments

Hi,
Thanks for the awesome work, I really think this is a game-changer!
Do you have any potential robotics manipulation environments on your roadmap, e.g. Meta-World?
I think it would be a great service to the community (including me!) to add one of those.
Maybe it's a daunting task, I can't tell.
Thanks anyways,
Massimo Caccia

Hello Massimo!  We have a few primitive environments that show that brax can manage robotic manipulation, such as Grasp.  Our immediate roadmap is to improve some of the core functionality of brax - we have some exciting features coming up - so nothing short term to add new environments.
That said, we don't think building a more robust environment suite would be a daunting task.  Most of the ingredients are there!  So I'm going to leave this issue open in case anyone wants to jump in and propose such a thing.

Ok great, thanks Erik!
looping @lebrice if you are curious

more envs would be great, but would it be not greater to have a tool to build own/custom envs and own/custom robots/models/bodies ?
There are tools like gazebo that has a model-editor ( http://gazebosim.org/tutorials?tut=model_editor ) which saves only sdf format.
Or a solidWorks plugin ( https://blogs.solidworks.com/teacher/wp-content/uploads/sites/3/WPI-Robotics-SolidWorks-to-Gazebo.pdf )  which seemed to only save urdf (but i dont know). Also solidWorks is no free.
Then there are tools to convert e.g. urdf to sdf . E.g. directly from gazebo with gz sdf xx.urdf yy.sdf . But there the problem is, there is no tool to visually create urdf models.
So the question would be, create a tool/plugin to visually create brax-config models? Own tool, or plugin of e.g. freeCAD, skechtup, etc.
Or create a tool that converts e.g. gazebo sdf files (gazebo has a good model editor, with placing joints/rotation etc.) to brax-config-files like the urdf_converter.py ?

Closing this as I think it's addressed, but please do re-open if you have any remaining questions.

authors: erikfrey flobotics optimass

repo: google/brax


text:
use r0 by default for classic connection requests

I don't remember why this was set as r2 by default, but r0 is a better default, as it will connect better/faster.
(a future PR should allow this to be customized of course)

Actually, by experience using R0 will result in far more page timeouts. I need to find the reason why since I don't quite remember! Let me check the spec

Ok it depends on the page scan activity of the remote device:

R0 listens continuously, the initiator will not miss it
Listen every 1.28s, the initiator can miss it if it uses R0
Listen every 2.56s, the initiator can miss it if it uses R0 or R1

Since we don't know the peer device, the safer mode is R2 which is more aggressive. But I don't think it will be slower 🤔

authors: barbibulle uael

repo: google/bumble


text:
Add an @pure annotation

I'd like to have an annotation to declare an intent that a function will not have side effects. In the presence of this annotation, I'd like the compiler to warn me if the function has side effects.
In a lot of code, you have simple helper methods that are intended to be side-effect free. It's very easy for a side effect to be accidentally introduced at a later time. I'd like to have a warning issued for this so the developer can correct it.

What we discussed was that this annotation would indicate that a function was dead code if it's return value is not used.
The compiler should warn if the side effect detection disagreed with the annotation. The warning would be suppressible.

Prior art exists with the UglifyJS --pure-funcs option.

Was there any progress on this item?

AFAIK, no action has ever been taken on this.

I don't currently see us having time to implement this, but I think I could find time to review a pull request, if someone wanted to create one.

repo: google/closure-compiler


text:
Depswriter doesn't support multiple imports using curly braces

The depswriter currently doesn't allow importing multiple dependencies like so:
const {myDep} = goog.require('a.b.c');
const {Foo, Bar} = goog.require('a.b.d');

This is the original regex pattern:
_REQUIRE_REGEX_STRING = (r'^\s*(?:(?:var|let|const)\s+[a-zA-Z_$][a-zA-Z0-9$_]*'
                         r'\s*=\s*)?goog\.require\(\s*[\'"](.+)[\'"]\s*\)')

My quick and probably not ideal solution for now looks like this:
_REQUIRE_REGEX_STRING = (r'^\s*(?:(?:var|let|const)\s+(?:'
                         r'(?:\{+[a-zA-Z_$][,\sa-zA-Z0-9$_]+\})|'
                         r'(?:[a-zA-Z_$]?[a-zA-Z0-9$_])'
                         r')*\s*=\s*)?goog\.require\(\s*[\'"](.+)[\'"]\s*\)')

This means we have to compile the entire project when developing and cant run the app in browser which significantly slows down dev time.

Feel free to complete what was started here in #739

authors: DustinJSilk mashedcode

repo: google/closure-library


text:
Support for arbitrary aspect ratios in output window

I wonder how difficult it would be to have support for arbitrary aspect ratios in the output, because a square output limits student possibilities to create interesting scenes, since most devices are actually not square. Restricting the window to be square forces them to waste a lot of space for their scene in the horizontal direction, especially when compared with similar environments that target the same population.
One of the things I like the most about CodeWorld is the fact that the output uses abstract display units instead of pixels or other device-dependent units. Also, I think 10x10 is a good default choice for a general drawing. However, I don't see why choosing to build a 15x10 scene would be a problem, especially now that there are built-in controls to zoom and pan the output.
The only possible problem could be the coordinatePlane facility, which I think should be a function anyway, so that the span and resolution are configurable. This could be also important for using CodeWorld as a programmable graphing calculator, for which it has a lot of potential.

The reason for a fixed-size canvas has always been simplicity.  I agree with most of what you're saying, but would just need to see what the UI looks like.  Adding arguments to a function is I think a big step in complexity: drawingOf(flower) can be read and pronounced naturally, while drawingOf(flower, 10, 10) feels a lot more technical.
Maybe there's a clever way to do this without making the code complex.  Maybe even something in the UI, where you can select a device to build for outside of the code, and that includes the aspect ratio.

I don't think that drawingOf needs to be modified. On the CodeWorld language side, the only modification I think is needed is adding a wideCoordinatePlane that takes in a width as a parameter, so that wideCoordinatePlane(width) fills a rectangular area of width by 20 units.
Then, in the GUI side, maybe a small button to unlock the aspect, so that when you move the left side of the output window while it is unlocked, it changes only the width.
Finally, for the fullscreen mode, maybe a parameter in the URL, like ... mode=codeworld&wide=30.
I think that is all that is needed, as a drawing is potentially infinite, so it is just a convention that you create the interesting part of your drawing so that it fits the expected output.

Okay, this sounds fine.  Although I might prefer one coordinatePlane Picture value that is conceptually infinite (of course, the drawing code would look at the transformations and decide how much needs to be drawn).  This might be unfortunate for current projects that rely on the bounded coordinate plane, though.

The problem I see with an infinite coordinatePlane is that it would be a magic value (like the current codeWorldLogo) that is not possible to  create within CodeWorld, unless there are also new API functions to facilitate the creation of infinite Pictures. Otherwise, a user could not create their own version of coordinatePlane. The problem an infinite coordinatePlane would solve is easily solved currently in user space, as I illustrated with the graphed function.

I gave it more thought, and the problem I have is that we may be creating confusion similar to the Text/Lettering dichotomy. A coordinate plane (which is an infinite abstract concept) and a particular pictorial representation of a finite part of a coordinate plane are not the same thing, in the same vein that a Text and a Lettering of it are not the same thing. Just like there are many styled letterings of the same text, which may come in different colors, fonts and sizes, there could be many styled renderings of an abstract coordinate plane (with or without guides, labels, with different spacing, etc.).

There's plenty of time to discuss the coordinate plane problem in the other issue.  I actually think it would be just fine to implement this without getting to that question at all.  So after the implementation, coordinatePlane as a picture just might not take up the entire screen any longer.
A few design points:

I like the idea of having a "Lock aspect ratio" toggle, which controls the screen.  If you unlock the aspect ratio, resize, and then relock, I think the screen should remain fixed at the non-square ratio.
Would you want to define a unit of distance as 1/20 the smaller of the two screen dimensions, so that if the screen is non-square, you get extra distance in the longer dimension?
Ideally, when exporting a project, it should export with the aspect ratio properties preserved.  So, if the aspect ratio is unlocked, you'd get a link that resizes the canvas to the whole screen; if it's locked, it would resize the canvas to the largest that fits at that aspect ratio.

About point 2:
I was thinking about allowing just 1 degree of freedom instead of 2. So, the vertical dimension would stay at 20 units and the horizontal dimension would vary. I think that is simpler, and it covers all possible aspect ratios anyway.
The good think about a fixed 20 by 20 display port is that it helps students focus better. A fully unconstrained view port could be more distracting.

authors: alphalambda cdsmith

repo: google/codeworld


text:
why no heterozygous site

Dear,
I have already test the deepsomatic to run both illumina and pacbio platform
but I have find a ambiguous result that all Pass variant is no heterozygous site ,the Pass variant is all homozygous
I wander why

Hi @huangl07 ,
DeepSomatic calls somatic variants. Unlike germline variants, there isn't really a notion of heterozygous variants. Anything 1/1 by DeepSomatic means it's determined as a somatic variant.
Hope this helps! Feel free to follow up if you have more questions.

well，Maybe it difficult to adapt other softwares，I have used sentieon and GATK，they put somatic variant Genotype "0/1"
and Also，it output the normal sample genotype and depth
thankyou！

Hi @huangl07 ,
If you want to obtain the genotype of the normal, currently the solution would be to run DeepVariant (https://github.com/google/deepvariant) on the normal bam and get the accurate genotypes.
I can lay out two things which prevented us from genotyping the normal:

The truth set comes from SEQC2 which only has Tumor/Normal status, it does not have normal genotypes present.
The intention of somatic calling is to determine normal vs tumor, genotyping the normal variants is a secondary function and there are currently methods like DeepVariant available to do it accurately.

On somatic variants being "0/1" or "1/1": somatic variants generally do not have "genotypes" as they are not inherited, so calling them "0/1" or "1/1" would be synonymous. You can use bcftools to convert all '1/1 to '0/1 and vice versa and it should be synonymous. Hope this helps.

thankyou!
I will back if I have other questions

Thank you, I will close this for now. Feel free to re-open if you have more questions.

authors: huangl07 kishwarshafin pichuan

repo: google/deepsomatic


text:
Add traveler bit

Indicates that this TEK has travelled beyond it's assigned region(s).
Add ability to include or exclusively get travellers in the exposure iterator.
Fixes #792

/hold

lgtm

authors: flagxor mikehelmick

repo: google/exposure-notifications-server


text:
Changed ALL_SHADER_STATE_FLAGS initializer to support c++17, which is…

… required for C++/CLI support. (#5465)

I think this is okay, but we're using designated initializer in a lot of places and we don't want to change that.

authors: BStringhamVRSK pixelflinger

repo: google/filament


text:
add watch and unwatch

https://developer.github.com/v3/activity/watching/#watch-a-repository-legacy
Watch a repository (LEGACY)
Stop watching a repository (LEGACY)

I signed it!

the git commit email is the other one of mine, What should I do？

Are there newer replacements available for those legacy endpoints?

does func  SetRepositorySubscription can replace it? But I think it is not intuitive.

I think so, yes.
From https://developer.github.com/v3/activity/watching/#set-a-repository-subscription:

If you would like to watch a repository, set subscribed to true. If you would like to ignore notifications made within a repository, set ignored to true. If you would like to stop watching a repository, delete the repository's subscription completely.

That seems very reasonable to me. What about it do you find unintuitive?
Or are you referring to the documentation of SetRepositorySubscription in go-github? If so, perhaps we should improve its documentation to be as clear as the GitHub API docs are.
I think we should avoid adding legacy/deprecated endpoints to go-github, if they're not neccessary (because a better replacement exists) and if they didn't already exist.

yeah, you are right. Before, I don't know how to set the subscription.  So I wrote watch and unwatch according to API.
thanks!

I think it'd be useful to include the text inside blue boxes in go-github documentation. Would you like to make a PR that adds these short paragraphs?

I'll close this PR because we've come to conclusion that these legacy GitHub API endpoints are not needed, but instead we should improve go-github documentation of SetRepositorySubscription to mention they can be used to watch/unwatch repos.
I've opened issue #477 to track that. Closing this. Thanks @qianlnk.

authors: qianlnk shurcooL

repo: google/go-github


text:
log4net dependency

Move Log4NetLogger.cs from GoogleApis.DotNet4 to GoogleApis.Tests.
Remove log4net dependency from GoogleApis.DotNet4

I signed it!

Thanks for this PR :)

repo: google/google-api-dotnet-client


text:
question printed twice

During initial setup, the following question is printed twice:
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) n

Thanks

authors: ThomasHabets lifanov

repo: google/google-authenticator


text:
Migrate shared classes to kotlin

Towards #532

Migrates common classes to Kotlin.

/gcbrun

Codecov Report

Merging #1134 (ccfcf93) into master (cfa8485) will decrease coverage by 0.05%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##             master    #1134      +/-   ##
============================================
- Coverage     27.81%   27.75%   -0.06%
+ Complexity      802      801       -1
============================================
  Files           298      297       -1
  Lines          8164     8156       -8
  Branches        348      349       +1
============================================
- Hits           2271     2264       -7
+ Misses         5776     5774       -2
- Partials        117      118       +1

Impacted Files
Coverage Δ

...aggerGndApplication_HiltComponents_SingletonC.java
0.00% <0.00%> (ø)

...mapcontainer/PolygonDrawingInfoDialogFragment.java
0.00% <0.00%> (ø)

...ntainer/FeatureDataTypeSelectorDialogFragment.java
0.00% <0.00%> (ø)

.../android/gnd/ui/common/AbstractDialogFragment.java

gnd/com/google/android/gnd/AbstractActivity.java

gnd/com/google/android/gnd/Config.java

gnd/com/google/android/gnd/GndApplication.java

...com/google/android/gnd/ui/common/AbstractView.java

...m/google/android/gnd/ui/common/TwoLineToolbar.java

...droid/gnd/ui/common/AbstractMapViewerFragment.java

... and 12 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update cfa8485...ccfcf93. Read the comment docs.

/gcbrun

repo: google/ground-android


text:
Updates to Photo task

Fixes #1543
-Removes bottom sheet in favor of single "Take a picture" button
-Requests permission onResume so that the permission is requested when the task is navigated to by the ViewPager
-Unrelated change to revert colorAccent that I erroneously updated a while back
@gino-m PTAL

/gcbrun

/gcbrun


text:
【Fuzzing apache】have problems with fuzzing apache when patch configure.in

Hello, I followed the steps in examples/apache-httpd/README.md and want to fuzz httpd. However, when I patch configure.in, it FAILED. Is there anyone could help me ?
environment

docker  Ubuntu 16.04.5 LTS
kernel version Linux 4beef4d54b1c 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

depencies  versions

apr-util-1.6.1
apr-1.6.5
nghttp2-1.35.1

steps
cd /root/Hackit/apache
wget http://archive.apache.org/dist/httpd/httpd-2.4.29.tar.gz
tar zxvf httpd-2.4.29.tar.gz
cd httpd-2.4.29

patch -p1 < /root/Fuzz/honggfuzz.git/examples/apache-httpd/httpd-master.honggfuzz.patch

However, when I run patch script in it patch -p1 < /root/Fuzz/honggfuzz.git/examples/apache-httpd/httpd-master.honggfuzz.patch. It fails to patch configure.in.
output:

and the file configure.in.rej content is :
--- configure.in
+++ configure.in
@@ -725,7 +725,7 @@ AC_MSG_CHECKING([for Check to enable unit tests])
 if test "x$PKGCONFIG" != "x" && `$PKGCONFIG --atleast-version='0.9.12' check`; then
   UNITTEST_CFLAGS=`$PKGCONFIG --cflags check`
   UNITTEST_LIBS=`$PKGCONFIG --libs check`
-  other_targets="$other_targets test/httpdunit"
+  other_targets="$other_targets"

   AC_MSG_RESULT([yes])
 else

And my configure.in file's content is here:
dnl
dnl Autoconf configuration for Apache httpd
dnl
dnl     Use ./buildconf to produce a configure script
dnl

AC_PREREQ(2.50)
AC_INIT(ABOUT_APACHE)

AC_CONFIG_HEADER(include/ap_config_auto.h)
AC_CONFIG_AUX_DIR(build)

dnl Absolute source/build directory
abs_srcdir=`(cd $srcdir && pwd)`
abs_builddir=`pwd`

dnl Ensure that the httpd version is included
HTTPD_VERSION=`$abs_srcdir/build/get-version.sh all $abs_srcdir/include/ap_release.h AP_SERVER`
HTTPD_MMN=`$abs_srcdir/build/get-version.sh mmn $abs_srcdir/include/ap_mmn.h MODULE_MAGIC_NUMBER`

dnl #
dnl # Include our own M4 macros along with those for APR and libtool
dnl #
sinclude(build/apr_common.m4)
sinclude(build/find_apr.m4)
sinclude(build/find_apu.m4)
sinclude(acinclude.m4)

dnl Later versions of autoconf (>= 2.62) by default cause the produced
dnl configure script to emit at least warnings when it comes across unknown
dnl command line options. These versions also have the macro
dnl AC_DISABLE_OPTION_CHECKING defined which turns this off by default.
dnl We want to have this turned off here since our configure calls can
dnl contain options for APR / APR-UTIL configure that are unknown to us.
dnl So avoid confusing the user by turning this off. See also PR 45221.
ifdef([AC_DISABLE_OPTION_CHECKING], [AC_DISABLE_OPTION_CHECKING])

dnl XXX we can't just use AC_PREFIX_DEFAULT because that isn't subbed in
dnl by configure until it is too late.  Is that how it should be or not?
dnl Something seems broken here.
AC_PREFIX_DEFAULT(/usr/local/apache2)

dnl Get the layout here, so we can pass the required variables to apr
APR_ENABLE_LAYOUT(Apache, [errordir iconsdir htdocsdir cgidir])

dnl reparse the configure arguments.
APR_PARSE_ARGUMENTS

dnl export expanded and relative configure argument variables
APACHE_EXPORT_ARGUMENTS

dnl Save user-defined environment settings for later restoration
dnl
APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
APR_SAVE_THE_ENVIRONMENT(CFLAGS)
APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
APR_SAVE_THE_ENVIRONMENT(LIBS)
APR_SAVE_THE_ENVIRONMENT(INCLUDES)

dnl Generate ./config.nice for reproducing runs of configure
dnl
APR_CONFIG_NICE(config.nice)

nl='
'
dnl Check that mkdir -p works
APR_MKDIR_P_CHECK($top_srcdir/build/mkdir.sh)

dnl get an EGREP to use in the Makefiles
AC_PROG_EGREP
APACHE_SUBST(EGREP)

dnl ## Run configure for packages Apache uses

dnl shared library support for these packages doesn't currently
dnl work on some platforms

AC_CANONICAL_SYSTEM

orig_prefix="$prefix"

AC_MSG_NOTICE([])
AC_MSG_NOTICE([Configuring Apache Portable Runtime library...])
AC_MSG_NOTICE([])

AC_ARG_WITH(included-apr,
APACHE_HELP_STRING(--with-included-apr,Use bundled copies of APR/APR-Util))

if test "x$with_included_apr" = "xyes"; then
  apr_found=reconfig
  if test ! -d srclib/apr && test ! -d $srcdir/srclib/apr; then
    AC_MSG_ERROR([Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.])
  fi
else
  APR_FIND_APR("$srcdir/srclib/apr", "./srclib/apr", 1, 1 2, [
    version=`$apr_config --version`
    case x${version} in
    x1.[[0-3]].*)
      AC_MSG_WARN([APR version 1.4.0 or later is required, found $version])
      apr_acceptable=no
      ;;
    esac
    unset version
   ])
fi

if test "$apr_found" = "no"; then
  AC_MSG_ERROR([APR not found.  Please read the documentation.])
fi

if test "$apr_found" = "reconfig"; then
  APR_SUBDIR_CONFIG(srclib/apr,
                    [$apache_apr_flags --prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir --datadir=$datadir --with-installbuilddir=$installbuilddir],
                    [--enable-layout=*|\'--enable-layout=*])
  dnl We must be the first to build and the last to be cleaned
  AP_BUILD_SRCLIB_DIRS="apr $AP_BUILD_SRCLIB_DIRS"
  AP_CLEAN_SRCLIB_DIRS="$AP_CLEAN_SRCLIB_DIRS apr"

  dnl We have to find apr-N-config when we reconfigure APR.
  for majorver in 1 2; do
    test_apr_config="./srclib/apr/apr-${majorver}-config"
    if test -f "$test_apr_config"; then
      apr_config="$test_apr_config"
    fi
  done
fi

APR_SETIFNULL(CC, `$apr_config --cc`)
APR_SETIFNULL(CPP, `$apr_config --cpp`)
APR_ADDTO(CFLAGS, `$apr_config --cflags`)
APR_ADDTO(CPPFLAGS, `$apr_config --cppflags`)
dnl internal-only CPPFLAGS (shouldn't affect third-party module builds)
INTERNAL_CPPFLAGS=""
APR_ADDTO(LDFLAGS, `$apr_config --ldflags`)
SHLIBPATH_VAR=`$apr_config --shlib-path-var`
APR_BINDIR=`$apr_config --bindir`
APR_INCLUDEDIR=`$apr_config --includedir`
APR_INCLUDES=`$apr_config --includes`
APR_VERSION=`$apr_config --version`
apr_major_version=`echo ${APR_VERSION} | sed 's,\..*,,'`
APR_CONFIG="$APR_BINDIR/apr-${apr_major_version}-config"

AC_MSG_NOTICE([])
AC_MSG_NOTICE([Configuring Apache Portable Runtime Utility library...])
AC_MSG_NOTICE([])

if test "x${apr_major_version}" = "x2"; then
  apu_found=obsolete
elif test "x$with_included_apr" = "xyes"; then
  apu_found=reconfig
  if test ! -d srclib/apr-util && test ! -d $srcdir/srclib/apr-util; then
    AC_MSG_ERROR([Bundled APR-Util requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.])
  fi
else
   dnl If httpd is buildconf'ed against an apr 2.x tree, then 1.x
   dnl isn't supported.
   ifdef([APR_FIND_APU], [
     APR_FIND_APU("$srcdir/srclib/apr-util", "./srclib/apr-util",
                  1, ${apr_major_version})
   ], [apu_found=no])
fi

if test "$apu_found" = "no"; then
  AC_MSG_ERROR([APR-util not found.  Please read the documentation.])
fi

# Catch some misconfigurations:
case ${apr_found}.${apu_found} in
reconfig.yes)
  AC_MSG_ERROR([Cannot use an external APR-util with the bundled APR])
  ;;
yes.reconfig)
  AC_MSG_ERROR([Cannot use an external APR with the bundled APR-util])
  ;;
esac

if test "$apu_found" = "reconfig"; then
  APR_SUBDIR_CONFIG(srclib/apr-util,
                    [--with-apr=../apr --prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir],
                    [--enable-layout=*|\'--enable-layout=*])
  dnl We must be the last to build and the first to be cleaned
  AP_BUILD_SRCLIB_DIRS="$AP_BUILD_SRCLIB_DIRS apr-util"
  AP_CLEAN_SRCLIB_DIRS="apr-util $AP_CLEAN_SRCLIB_DIRS"
  dnl APR and APR-Util major versions must match
  apu_config="./srclib/apr-util/apu-${apr_major_version}-config"
fi

if test "$apu_found" = "obsolete"; then
  AC_MSG_NOTICE([APR-util obsoleted, woohoo])
else
  APR_ADDTO(LDFLAGS, `$apu_config --ldflags`)
  APU_BINDIR=`$apu_config --bindir`
  APU_INCLUDEDIR=`$apu_config --includedir`
  APU_INCLUDES=`$apu_config --includes`
  APU_VERSION=`$apu_config --version`
  APU_CONFIG="$APU_BINDIR/apu-`echo ${APU_VERSION} | sed 's,\..*,,'`-config"
fi

dnl In case we picked up CC and CPP from APR, get that info into the
dnl config cache so that PCRE uses it.  Otherwise, CC and CPP used for
dnl PCRE and for our config tests will be whatever PCRE determines.
AC_PROG_CC
AC_PROG_CPP

dnl Try to get c99 support for variadic macros
ifdef([AC_PROG_CC_C99], [AC_PROG_CC_C99])

if test "x${cache_file}" = "x/dev/null"; then
  # Likewise, ensure that CC and CPP are passed through to the pcre
  # configure script iff caching is disabled (the autoconf 2.5x default).
  export CC; export CPP
fi

AC_ARG_WITH(pcre,
APACHE_HELP_STRING(--with-pcre=PATH,Use external PCRE library))

AC_PATH_PROG(PCRE_CONFIG, pcre-config, false)
if test -d "$with_pcre" && test -x "$with_pcre/bin/pcre-config"; then
   PCRE_CONFIG=$with_pcre/bin/pcre-config
elif test -x "$with_pcre"; then
   PCRE_CONFIG=$with_pcre
fi

if test "$PCRE_CONFIG" != "false"; then
  if $PCRE_CONFIG --version >/dev/null 2>&1; then :; else
    AC_MSG_ERROR([Did not find pcre-config script at $PCRE_CONFIG])
  fi
  case `$PCRE_CONFIG --version` in
  [[1-5].*])
    AC_MSG_ERROR([Need at least pcre version 6.0])
    ;;
  esac
  AC_MSG_NOTICE([Using external PCRE library from $PCRE_CONFIG])
  APR_ADDTO(PCRE_INCLUDES, [`$PCRE_CONFIG --cflags`])
  APR_ADDTO(PCRE_LIBS, [`$PCRE_CONFIG --libs`])
else
  AC_MSG_ERROR([pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/])
fi
APACHE_SUBST(PCRE_LIBS)

AC_MSG_NOTICE([])
AC_MSG_NOTICE([Configuring Apache httpd...])
AC_MSG_NOTICE([])

dnl If the source dir is not equal to the build dir,
dnl then we are running in VPATH mode.

APR_ADDTO(INCLUDES, [-I.])

if test "$abs_builddir" != "$abs_srcdir"; then
  APR_ADDTO(INCLUDES, [-I\$(top_builddir)/include])
fi

APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/os/\$(OS_DIR) -I\$(top_srcdir)/include])

# apr/apr-util --includes may pick up system paths for dependent
# libraries, so ensure these are later in INCLUDES than local source
# directories.
APR_ADDTO(INCLUDES, $APR_INCLUDES)
APR_ADDTO(INCLUDES, $APU_INCLUDES)

dnl Add in path to PCRE includes
APR_ADDTO(INCLUDES, $PCRE_INCLUDES)

AC_MSG_NOTICE([])
AC_MSG_NOTICE([Applying OS-specific hints for httpd...])
AC_MSG_NOTICE([])

case $host in
  *os2*)
      # Use a custom made libtool replacement
      echo "using aplibtool"
      LIBTOOL="$abs_srcdir/srclib/apr/build/aplibtool"
      SH_LIBTOOL="$LIBTOOL --shared --export-all"
      SH_LIBS="\$(ALL_LIBS)"
      CORE_IMPLIB_FILE="ApacheCoreOS2.la"
      CORE_IMPLIB="$abs_srcdir/server/$CORE_IMPLIB_FILE"
      MK_IMPLIB="emximp"
      other_targets="$other_targets os2core"
      INSTALL_PROG_FLAGS="-e .exe"
      SHLTCFLAGS=""
      LTCFLAGS=""
      ;;
  *)
      if test "x$LTFLAGS" = "x"; then
          LTFLAGS='--silent'
      fi
      my_libtool=`$apr_config --apr-libtool`
      LIBTOOL="$my_libtool \$(LTFLAGS)"
      libtoolversion=`$my_libtool --version`
      case $libtoolversion in
          *1.[[45]]* | *[[2-9]].[[0-9]]*)
              SH_LIBTOOL='$(LIBTOOL)'
              SHLTCFLAGS="-prefer-pic"
              LTCFLAGS="-prefer-non-pic -static"
              ;;
          *)
              SH_LIBTOOL='$(SHELL) $(top_builddir)/shlibtool $(LTFLAGS)'
              SHLTCFLAGS=""
              LTCFLAGS=""
              ;;
      esac
      ;;
esac
APACHE_SUBST(SHLTCFLAGS)
APACHE_SUBST(LTCFLAGS)

case $host in
  *-apple-aux3*)
      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      ;;
  *os2-emx*)
      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      ;;
  *-linux-*)
      case `uname -r` in
        # Unserialized accept() was not recommended until Linux 2.2.
        [[01]].* | 2.[[01]]* )
            ;;
        * )
            APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
            ;;
      esac
      ;;
  *486-*-bsdi* | *-netbsd* | *-freebsd* | *-apple-darwin* | *-dec-osf* | *-qnx)
      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      ;;
  *-solaris2*)
      dnl This is a hack -- we should be using AC_TRY_RUN instead
      ap_platform_runtime_link_flag="-R"
      dnl solaris 8 and above don't have a thundering herd
      dnl not sure about rev's before this one.
      case `uname -r` in
        5.[[567]]*)
            ;;
        * )
            APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
            ;;
      esac
      ;;
  *cygwin*)
      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      ;;
  *mingw32*)
      APR_ADDTO(INTERNAL_CPPFLAGS, [-DAP_DECLARE_EXPORT])
      APR_SETIFNULL(ac_cv_func_times, [no])
      APR_SETIFNULL(ac_cv_func_getpwnam, [no])
      APR_SETIFNULL(ac_cv_func_getgrnam, [no])
      ;;
  *aix*)
      aixver=`echo $host | sed 's/^[[^0-9]]*//' | sed 's/\.//g'`
      if test $aixver -ge 4320; then
        APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      fi
      ;;
  *os390*)
      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      ;;
esac

APR_SETVAR(AP_NONBLOCK_WHEN_MULTI_LISTEN, [1])

dnl
dnl Process command line arguments. This is done early in the process so the
dnl user can get feedback quickly in case of an error.
dnl
dnl ### need to move some of the arguments "up here"

dnl ## Check for programs

AC_PATH_PROG(RM, rm)
AC_PATH_PROG(PKGCONFIG, pkg-config)
AC_PATH_PROG(RSYNC, rsync)
AC_PROG_AWK
AC_PROG_LN_S
AC_CHECK_TOOL(RANLIB, ranlib, true)
dnl AC_PATH_PROG(PERL_PATH, perl)
AC_CHECK_PROGS(LYNX_PATH,[lynx links elinks], [lynx])

# Hard-coded install programs
MKINSTALLDIRS="\$(abs_srcdir)/build/mkdir.sh"
INSTALL="\$(LIBTOOL) --mode=install \$(abs_srcdir)/build/install.sh -c"
APACHE_SUBST(MKINSTALLDIRS)
APACHE_SUBST(INSTALL)

dnl Various OS checks that apparently set required flags
ifdef([AC_USE_SYSTEM_EXTENSIONS], [
AC_USE_SYSTEM_EXTENSIONS
], [
AC_AIX
AC_MINIX
])

AC_ISC_POSIX

# Ensure that satisfactory versions of apr and apr-util are
# found if external copies are configured.
if test "${apr_found}" = "yes"; then
  # Require at least APR 1.3.x otherwise fail
  APACHE_CHECK_APxVER([apr], 1, 3)
fi

if test "${apu_found}" = "yes"; then
  # Require at least APR-util 1.3.x otherwise fail
  if test "${apr_found}" = "yes"; then
    # we need to add the APR includes to CPPFLAGS
    apu_ckver_CPPFLAGS="$CPPFLAGS"
    CPPFLAGS="$CPPFLAGS `$apr_config --includes`"
    APACHE_CHECK_APxVER([apu], 1, 3)
    CPPFLAGS="$apu_ckver_CPPFLAGS"
  else
    APACHE_CHECK_APxVER([apu], 1, 3)
  fi
fi

dnl Check for what we can generate dependency files with
APR_CHECK_DEPEND

dnl ## Check for libraries

dnl ## Check for header files

dnl I think these are just used all over the place, so just check for
dnl them at the base of the tree. If some are specific to a single
dnl directory, they should be moved (Comment #Spoon)

dnl Regarding standard header files: AC_HEADER_STDC doesn't set symbols
dnl HAVE_STRING_H, HAVE_STDLIB_H, etc., so those are checked for
dnl explicitly so that the normal HAVE_xxx_H symbol is defined.

AC_HEADER_STDC
AC_CHECK_HEADERS( \
string.h \
limits.h \
unistd.h \
sys/socket.h \
pwd.h \
grp.h \
strings.h \
sys/prctl.h \
sys/processor.h \
sys/sem.h \
sys/sdt.h \
sys/loadavg.h
)
AC_HEADER_SYS_WAIT

dnl ## Check for typedefs, structures, and compiler characteristics.

AC_C_CONST

dnl ## Check for library functions
dnl ## sqrt() only needed in support/ab.c
saved_LIBS="$LIBS"
LIBS=""
AC_SEARCH_LIBS(sqrt, m)
MATH_LIBS="$LIBS"
APACHE_SUBST(MATH_LIBS)
LIBS="$saved_LIBS"

saved_LIBS="$LIBS"
LIBS=""
AC_SEARCH_LIBS(crypt, crypt)
CRYPT_LIBS="$LIBS"
APACHE_SUBST(CRYPT_LIBS)
LIBS="$saved_LIBS"

dnl See Comment #Spoon

AC_CHECK_FUNCS( \
getpwnam \
getgrnam \
initgroups \
bindprocessor \
prctl \
timegm \
getpgid \
fopen64 \
getloadavg
)

dnl confirm that a void pointer is large enough to store a long integer
APACHE_CHECK_VOID_PTR_LEN

AC_CACHE_CHECK([for gettid()], ac_cv_gettid,
[AC_TRY_RUN(#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
int main(int argc, char **argv) {
pid_t t = syscall(SYS_gettid); return t == -1 ? 1 : 0; },
[ac_cv_gettid=yes], [ac_cv_gettid=no], [ac_cv_gettid=no])])
if test "$ac_cv_gettid" = "yes"; then
    AC_DEFINE(HAVE_GETTID, 1, [Define if you have gettid()])
fi

dnl ## Check for the tm_gmtoff field in struct tm to get the timezone diffs
AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff,
[AC_TRY_COMPILE([#include <sys/types.h>
#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
  ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)])
if test "$ac_cv_struct_tm_gmtoff" = "yes"; then
    AC_DEFINE(HAVE_GMTOFF, 1, [Define if struct tm has a tm_gmtoff field])
fi

dnl ## Set up any appropriate OS-specific environment variables for apachectl

case $host in
    *aix*)
        # for 32-bit builds, increase MAXDATA to allow lots of threads
        if test x$OBJECT_MODE != x64; then
            OS_SPECIFIC_VARS="LDR_CNTRL=\"MAXDATA=0x80000000\" ; export LDR_CNTRL ;"
        fi
        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS AIXTHREAD_SCOPE=S ; export AIXTHREAD_SCOPE"
        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; AIXTHREAD_MUTEX_DEBUG=OFF ; export AIXTHREAD_MUTEX_DEBUG"
        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; AIXTHREAD_RWLOCK_DEBUG=OFF ; export AIXTHREAD_RWLOCK_DEBUG"
        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; AIXTHREAD_COND_DEBUG=OFF ; export AIXTHREAD_COND_DEBUG"
        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; SPINLOOPTIME=1000 ; export SPINLOOPTIME"
        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; YIELDLOOPTIME=8 ; export YIELDLOOPTIME"
        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; MALLOCMULTIHEAP=considersize,heaps:8 ; export MALLOCMULTIHEAP"
        ;;
    *os390*)
        OS_SPECIFIC_VARS="export _CEE_RUNOPTS=\"STACK(,,ANY)\" ; export _EDC_ADD_ERRNO2=1"
        ;;
    *)
        OS_SPECIFIC_VARS=""
esac

AC_ARG_WITH(port,APACHE_HELP_STRING(--with-port=PORT,Port on which to listen (default is 80)),
        [if test "$withval" = "yes"; then AC_MSG_ERROR('option --with-port requires a value (the TCP port number)'); else PORT="$withval"; fi],
	[PORT=80])

AC_ARG_WITH(sslport,APACHE_HELP_STRING(--with-sslport=SSLPORT,Port on which to securelisten (default is 443)),
        [if test "$withval" = "yes"; then AC_MSG_ERROR('option --with-sslport requires a value (the SSL TCP port number)'); else SSLPORT="$withval"; fi],
	[SSLPORT=443])

DTRACE=true
AC_ARG_ENABLE(dtrace,APACHE_HELP_STRING(--enable-dtrace,Enable DTrace probes),
[
  enable_dtrace=$enableval
  if test "$enableval" = "yes"; then
    APR_ADDTO(CPPFLAGS, -DAPR_DTRACE_PROVIDER)
    AC_MSG_ERROR('DTrace Support in the build system is not complete. Patches Welcome!')
  fi
],
[
  enable_dtrace=no
])

dnl Disabled dtrace build for now.
enable_dtrace=no

case $host in
  *-solaris2*)
    if test $enable_dtrace = "yes" -a "$ac_cv_header_sys_sdt_h" = "yes"; then
        AC_DEFINE(AP_ENABLE_DTRACE, 1,
                  [Enable DTrace probes])
        DTRACE="/usr/sbin/dtrace $DTRACEFLAGS"
        test -f include/apache_probes.h || $DTRACE -h -s apache_probes.d -o include/apache_probes.h
    fi
    ;;
esac

APACHE_SUBST(DTRACE)

AC_ARG_ENABLE(hook-probes,APACHE_HELP_STRING(--enable-hook-probes,Enable APR hook probes),
[
    if test "$enableval" = "yes"; then
        AC_DEFINE(AP_HOOK_PROBES_ENABLED, 1,
                  [Enable the APR hook probes capability, reading from ap_hook_probes.h])
        APR_ADDTO(INTERNAL_CPPFLAGS, -DAP_HOOK_PROBES_ENABLED)
    fi
])dnl

AC_ARG_ENABLE(exception-hook,APACHE_HELP_STRING(--enable-exception-hook,Enable fatal exception hook),
[
    if test "$enableval" = "yes"; then
        AC_DEFINE(AP_ENABLE_EXCEPTION_HOOK, 1,
                  [Allow modules to run hook after a fatal exception])
    fi
])dnl

AC_ARG_ENABLE(load-all-modules,APACHE_HELP_STRING(--enable-load-all-modules,Load all modules),
[
  LOAD_ALL_MODULES=$enableval
  AC_MSG_NOTICE([Setting "LOAD_ALL_MODULES" to $LOAD_ALL_MODULES])
],
[
  LOAD_ALL_MODULES="no"
])

AC_ARG_ENABLE(maintainer-mode,APACHE_HELP_STRING(--enable-maintainer-mode,Turn on debugging and compile time warnings and load all compiled modules),
[
  if test "$enableval" = "yes"; then
    APR_ADDTO(NOTEST_CPPFLAGS, -DAP_DEBUG)
    if test "$GCC" = "yes"; then
      APACHE_ADD_GCC_CFLAG([-std=c89])
      APACHE_ADD_GCC_CFLAG([-Werror])
      APACHE_ADD_GCC_CFLAG([-Wall])
      APACHE_ADD_GCC_CFLAG([-Wstrict-prototypes])
      APACHE_ADD_GCC_CFLAG([-Wmissing-prototypes])
      APACHE_ADD_GCC_CFLAG([-Wmissing-declarations])
      APACHE_ADD_GCC_CFLAG([-Wdeclaration-after-statement])
      APACHE_ADD_GCC_CFLAG([-Wpointer-arith])
      APACHE_ADD_GCC_CFLAG([-Wformat])
      APACHE_ADD_GCC_CFLAG([-Wformat-security])
      APACHE_ADD_GCC_CFLAG([-Wunused])
    elif test "$AIX_XLC" = "yes"; then
      APR_ADDTO(NOTEST_CFLAGS,-qfullpath -qinitauto=FE -qcheck=all -qinfo=pro)
    fi
    if test "x$enable_load_all_modules" = "x"; then
      LOAD_ALL_MODULES=yes
      AC_MSG_NOTICE([Maintainer mode setting "LOAD_ALL_MODULES" to $LOAD_ALL_MODULES])
    fi
    if test "x$enable_bucketeer" = "x"; then
      enable_bucketeer=yes
      AC_MSG_NOTICE([Maintainer mode setting "enable_bucketeer" to yes])
    fi
  fi
])dnl

AC_ARG_ENABLE(debugger-mode,APACHE_HELP_STRING(--enable-debugger-mode,Turn on debugging and compile time warnings and turn off optimization),
[
  if test "$enableval" = "yes"; then
    APR_ADDTO(NOTEST_CPPFLAGS, -DAP_DEBUG)
    if test "$GCC" = "yes"; then
      APACHE_ADD_GCC_CFLAG([-O0])
      APACHE_ADD_GCC_CFLAG([-Wall])
      APACHE_ADD_GCC_CFLAG([-Wstrict-prototypes])
      APACHE_ADD_GCC_CFLAG([-Wmissing-prototypes])
      APACHE_ADD_GCC_CFLAG([-Wmissing-declarations])
      APACHE_ADD_GCC_CFLAG([-Wdeclaration-after-statement])
      APACHE_ADD_GCC_CFLAG([-Werror=declaration-after-statement])
      APACHE_ADD_GCC_CFLAG([-Wpointer-arith])
      APACHE_ADD_GCC_CFLAG([-Wformat])
      APACHE_ADD_GCC_CFLAG([-Wformat-security])
      APACHE_ADD_GCC_CFLAG([-Werror=format-security])
    elif test "$AIX_XLC" = "yes"; then
      APR_ADDTO(NOTEST_CFLAGS,-qfullpath -qinitauto=FE -qcheck=all -qinfo=pro)
    fi
  fi
])dnl

dnl Conditionally enable PIE support for GNU toolchains.
AC_ARG_ENABLE(pie,APACHE_HELP_STRING(--enable-pie,Build httpd as a Position Independent Executable))
if test "$enable_pie" = "yes"; then
   AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
     save_CFLAGS=$CFLAGS
     save_LDFLAGS=$LDFLAGS
     CFLAGS="$CFLAGS -fPIE"
     LDFLAGS="$LDFLAGS -pie"
     AC_TRY_RUN([static int foo[30000]; int main () { return 0; }],
      [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no], [ap_cv_cc_pie=yes])
     CFLAGS=$save_CFLAGS
     LDFLAGS=$save_LDFLAGS
   ])
   if test "$ap_cv_cc_pie" = "yes"; then
     PICFLAGS="-fPIE"
     PILDFLAGS="-pie"
   else
     AC_ERROR([--enable-pie requested but $CC failed using PIE flags])
   fi
fi
APACHE_SUBST(PICFLAGS)
APACHE_SUBST(PILDFLAGS)

prefix="$orig_prefix"
APACHE_ENABLE_MODULES

dnl reading config stubs
esyscmd(./build/config-stubs .)

APACHE_SUBST(progname)
APACHE_SUBST(OS)
APACHE_SUBST(OS_DIR)
APACHE_SUBST(BUILTIN_LIBS)
APACHE_SUBST(SHLIBPATH_VAR)
APACHE_SUBST(OS_SPECIFIC_VARS)

PRE_SHARED_CMDS='echo ""'
POST_SHARED_CMDS='echo ""'

dnl apache_need_shared tells us if Apache modules are being built as DSOs

if test "$apache_need_shared" = "yes"; then
  if test -f $ac_aux_dir/ltconfig; then
    $SHELL $ac_aux_dir/ltconfig --output=shlibtool --disable-static --srcdir=$ac_aux_dir --cache-file=./config.cache $ac_aux_dir/ltmain.sh
  fi
  shared_build="shared-build"
fi

dnl enable_so tells us if *any* modules can be built as DSOs

if test "$enable_so" = "yes" -o "$enable_so" = "static"; then
  case $host in
    *-ibm-aix*)
      APR_ADDTO(HTTPD_LDFLAGS, [-Wl,-uXML_Parse -Wl,-bE:$abs_builddir/server/httpd.exp])
      APR_ADDTO(SH_LDFLAGS, [\$(EXTRA_LDFLAGS) \$(EXTRA_LIBS)])
      APR_ADDTO(UTIL_LDFLAGS, [-Wl,-uXML_Parse])
      ;;
    *os390)
      APR_ADDTO(HTTPD_LDFLAGS, [--main=$abs_srcdir/server/main.o --core-dll=$abs_srcdir/apachecore.dll])
      APR_ADDTO(SH_LDFLAGS, [--core-dll=$abs_srcdir/apachecore.dll])
  esac
  MOD_SO_ENABLED=yes
fi
AC_SUBST(MOD_SO_ENABLED)

APACHE_SUBST(PRE_SHARED_CMDS)
APACHE_SUBST(POST_SHARED_CMDS)
APACHE_SUBST(shared_build)

AC_ARG_WITH(program-name,
APACHE_HELP_STRING(--with-program-name,alternate executable name),[
  progname="$withval" ], [
  progname="httpd"] )

# SuExec parameters
AC_ARG_WITH(suexec-bin,
APACHE_HELP_STRING(--with-suexec-bin,Path to suexec binary),[
  AC_DEFINE_UNQUOTED(SUEXEC_BIN, "$withval", [Path to suexec binary] )
] )

AC_ARG_WITH(suexec-caller,
APACHE_HELP_STRING(--with-suexec-caller,User allowed to call SuExec),[
  AC_DEFINE_UNQUOTED(AP_HTTPD_USER, "$withval", [User allowed to call SuExec] ) ] )

AC_ARG_WITH(suexec-userdir,
APACHE_HELP_STRING(--with-suexec-userdir,User subdirectory),[
  AC_DEFINE_UNQUOTED(AP_USERDIR_SUFFIX, "$withval", [User subdirectory] ) ] )

AC_ARG_WITH(suexec-docroot,
APACHE_HELP_STRING(--with-suexec-docroot,SuExec root directory),[
  AC_DEFINE_UNQUOTED(AP_DOC_ROOT, "$withval", [SuExec root directory] ) ] )

AC_ARG_WITH(suexec-uidmin,
APACHE_HELP_STRING(--with-suexec-uidmin,Minimal allowed UID),[
  AC_DEFINE_UNQUOTED(AP_UID_MIN, $withval, [Minimum allowed UID] ) ] )

AC_ARG_WITH(suexec-gidmin,
APACHE_HELP_STRING(--with-suexec-gidmin,Minimal allowed GID),[
  AC_DEFINE_UNQUOTED(AP_GID_MIN, $withval, [Minimum allowed GID] ) ] )

AC_ARG_WITH(suexec-logfile,
APACHE_HELP_STRING(--with-suexec-logfile,Set the logfile),[
  AC_DEFINE_UNQUOTED(AP_LOG_EXEC, "$withval", [SuExec log file] ) ] )

AC_ARG_WITH(suexec-safepath,
APACHE_HELP_STRING(--with-suexec-safepath,Set the safepath),[
  AC_DEFINE_UNQUOTED(AP_SAFE_PATH, "$withval", [safe shell path for SuExec] ) ] )

AC_ARG_WITH(suexec-umask,
APACHE_HELP_STRING(--with-suexec-umask,umask for suexec'd process),[
  AC_DEFINE_UNQUOTED(AP_SUEXEC_UMASK, 0$withval, [umask for suexec'd process] ) ] )

dnl APR should go after the other libs, so the right symbols can be picked up
if test x${apu_found} != xobsolete; then
  AP_LIBS="$AP_LIBS `$apu_config --avoid-ldap --link-libtool --libs`"
fi
AP_LIBS="$AP_LIBS `$apr_config --link-libtool --libs`"
APACHE_SUBST(AP_LIBS)
APACHE_SUBST(AP_BUILD_SRCLIB_DIRS)
APACHE_SUBST(AP_CLEAN_SRCLIB_DIRS)

AC_DEFINE(AP_USING_AUTOCONF, 1,
		[Using autoconf to configure Apache])

if test "$SINGLE_LISTEN_UNSERIALIZED_ACCEPT" = "1"; then
    AC_DEFINE(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, 1,
              [This platform doesn't suffer from the thundering herd problem])
fi

if test "$AP_NONBLOCK_WHEN_MULTI_LISTEN" = "1"; then
    AC_DEFINE(AP_NONBLOCK_WHEN_MULTI_LISTEN, 1,
              [Listening sockets are non-blocking when there are more than 1])
fi

APR_CHECK_APR_DEFINE(APR_HAVE_IPV6)

AC_ARG_ENABLE(v4-mapped,APACHE_HELP_STRING(--enable-v4-mapped,Allow IPv6 sockets to handle IPv4 connections),
[
  v4mapped=$enableval
],
[
    case $host in
    *freebsd[[1234]].*)
        v4mapped=yes
        ;;
    *freebsd*|*netbsd*|*openbsd*)
        v4mapped=no
        ;;
    *)
        v4mapped=yes
        ;;
    esac
    if ap_mpm_is_enabled winnt; then
        dnl WinNT MPM doesn't support this.
        v4mapped=no
    fi
])

if test $v4mapped = "yes" -a $ac_cv_define_APR_HAVE_IPV6 = "yes"; then
    AC_DEFINE(AP_ENABLE_V4_MAPPED, 1,
              [Allow IPv4 connections on IPv6 listening sockets])
fi

APACHE_FAST_OUTPUT(Makefile modules/Makefile srclib/Makefile)
APACHE_FAST_OUTPUT(os/Makefile server/Makefile)
APACHE_FAST_OUTPUT(support/Makefile)

if test -d ./test; then
    APACHE_FAST_OUTPUT(test/Makefile)
fi

dnl ## Finalize the variables
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Restore user-defined environment settings...])
AC_MSG_NOTICE([])

APACHE_CONF_SEL_CC=${CC}
APACHE_CONF_SEL_CFLAGS="${CFLAGS} ${EXTRA_CFLAGS} ${NOTEST_CFLAGS}"
APACHE_CONF_SEL_CPPFLAGS="${CPPFLAGS} ${EXTRA_CPPFLAGS} ${NOTEST_CPPFLAGS}"
APACHE_CONF_SEL_LDFLAGS="${LDFLAGS} ${EXTRA_LDFLAGS} ${NOTEST_LDFLAGS}"
APACHE_CONF_SEL_LIBS="${LIBS} ${EXTRA_LIBS} ${NOTEST_LIBS}"
APACHE_CONF_SEL_CPP=${CPP}

APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(CFLAGS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(LIBS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(INCLUDES, EXTRA_)

AC_MSG_NOTICE([])
AC_MSG_NOTICE([Construct makefiles and header files...])
AC_MSG_NOTICE([])

APACHE_GEN_CONFIG_VARS

dnl ## Build modules.c
rm -f modules.c
echo $MODLIST | $AWK -f $srcdir/build/build-modules-c.awk > modules.c

APR_EXPAND_VAR(ap_prefix, $prefix)
AC_DEFINE_UNQUOTED(HTTPD_ROOT, "${ap_prefix}",
	[Root directory of the Apache install area])
AC_DEFINE_UNQUOTED(SERVER_CONFIG_FILE, "${rel_sysconfdir}/${progname}.conf",
	[Location of the config file, relative to the Apache root directory])
AC_DEFINE_UNQUOTED(AP_TYPES_CONFIG_FILE, "${rel_sysconfdir}/mime.types",
	[Location of the MIME types config file, relative to the Apache root directory])

perlbin=`$ac_aux_dir/PrintPath perl`
if test "x$perlbin" = "x"; then
    perlbin="/replace/with/path/to/perl/interpreter"
fi
AC_SUBST(perlbin)

dnl If we are running on BSD/OS, we need to use the BSD .include syntax.

BSD_MAKEFILE=no
ap_make_include=include
ap_make_delimiter=' '
case $host in
*bsdi*)
    # Check whether they've installed GNU make
    if make --version > /dev/null 2>&1; then
        true
    else
        BSD_MAKEFILE=yes
        ap_make_include=.include
        ap_make_delimiter='"'
    fi
    ;;
esac
AC_SUBST(ap_make_include)
AC_SUBST(ap_make_delimiter)

dnl Ensure that docs/conf is created.
test -d docs/conf||$mkdir_p docs/conf

AC_CONFIG_FILES(docs/conf/httpd.conf docs/conf/extra/httpd-autoindex.conf docs/conf/extra/httpd-dav.conf docs/conf/extra/httpd-default.conf docs/conf/extra/httpd-info.conf docs/conf/extra/httpd-languages.conf docs/conf/extra/httpd-manual.conf docs/conf/extra/httpd-mpm.conf docs/conf/extra/httpd-multilang-errordoc.conf docs/conf/extra/httpd-ssl.conf docs/conf/extra/httpd-userdir.conf docs/conf/extra/httpd-vhosts.conf docs/conf/extra/proxy-html.conf include/ap_config_layout.h support/apxs support/apachectl support/dbmmanage support/envvars-std support/log_server_status support/logresolve.pl support/phf_abuse_log.cgi support/split-logfile build/rules.mk build/pkg/pkginfo build/config_vars.sh)
AC_CONFIG_COMMANDS([default], [true], [APACHE_GEN_MAKEFILES])
AC_OUTPUT
AC_MSG_NOTICE([summary of build options:

    Server Version: ${HTTPD_VERSION}
    Install prefix: ${prefix}
    C compiler:     ${APACHE_CONF_SEL_CC}
    CFLAGS:         ${APACHE_CONF_SEL_CFLAGS}
    CPPFLAGS:       ${APACHE_CONF_SEL_CPPFLAGS}
    LDFLAGS:        ${APACHE_CONF_SEL_LDFLAGS}
    LIBS:           ${APACHE_CONF_SEL_LIBS}
    C preprocessor: ${APACHE_CONF_SEL_CPP}
])

Have you confused with this problem? Thank you.@moqingyan@liyishuai

You seem to be aware of our Quick700 project. Have you looked into honggfuzz subdirectory?

You seem to be aware of our Quick700 project. Have you looked into honggfuzz subdirectory?

Yes. I have looked it. However, I notice  the setup-honggfuzz.sh in your project.
# Apply the honggfuzz patch
patch -p1 < ../hong-apache/httpd-master.honggfuzz.patch

Can you patch the configure.in successfully?
By the way, I can fuzz the apache now by ignoring the failed output even though the result doesn't seems well.

Please forward this issue to Quick700 and we'll look into it.

Please forward this issue to Quick700 and we'll look into it.

OK. I will test the Quick700 later.

Please forward this issue to Quick700 and we'll look into it.

Hello, I have test you docker.It patches well and I have found the reasons of my patching failure.
I download the apache httpd from the official website and the configure.in is different from the git repo.  The configure.in in the git repo matches well with the patch file.

Command I used:
wget http://archive.apache.org/dist/httpd/httpd-2.4.29.tar.gz
tar zxvf httpd-2.4.29.tar.gz
cd httpd-2.4.29

And the configure.in in it doesn't match well with the patch file

I think that is the point. It is very strange.

authors: liyishuai thinkycx

repo: google/honggfuzz


text:
Partially break dependency on android.icu

We want to allow this code to run on the JVM as well as in Android. This means
we need to avoid dependencies on Android-only classes like the android.icu.*
namespace.
The main use of android.icu is the Calendar class. Replace all internal uses with
a new Timestamp class. Public APIs still use Calendar for now, as we don't want
to break API compatibility just yet.

No need to construct a temporary Long object. Just call the static helper method:

done

repo: google/identity-credential