teleren/devto huggingface dataset:
A better way to work with URLs using vueUse useFetch() + useUrl()
Tags: vue, typescript, javascript, vuehook
Published: 2022-04-29 05:42:08

## Problem when dealing with URLs:
consider the following URL: 

```
"https://somedomain.com/api/v1/entity/:id/subentity?search=query&sort=property&limit=100&page=1&filters=filter1,filter2,filter3#someHash"
```
there's alot of parts this url is composed of:
1. Base URL: 
`https://somedomain.com`
2. Path: 
`/api/v1/entity/:id/subentity?search=query&sort=property&limit=100&page=1&someFilters=filter1,filter2,filter3#someHash`
3. Path Variables: 
`/:id/'`
4. Query Parameters: 
`search` `sort` `limit` `page` `filters`
5. Hash suffix: 
`#someHash`

working with REST APIs / Links using only string interpolation or custom code to change query parameters or path variables this can get very cumbersome and quite tedious
specially when using the **useFetch()** hook from [VueUse](https://vueuse.org/core/useFetch/), since it have no built-in way to deal with (params, path variables..etc) similar to a library like **axios** have

## Solution:
I made a Vue.js Composition API hook [vue-useUrl](https://github.com/rainxh11/vue-useurl) that solve this problem in a convenient way

let's redo the previous example using `useUrl()`
```ts
const { url, queryParams, pathVariables, hash, path, disableCSV } = useUrl({ 
    path: '/api/v1/entity/:id/subentity',
    pathVariables: {
      id: 1001
    },
    queryParams: {
      search: 'query',
      sort: 'propery',
      limit: 100,
      page: 1,
      filters: [ 'filter1', 'filter2', 'filter3' ]
    },
    hash: 'someHash'
}, 
'https://somedomain.com')

console.log(url.value) // return https:/somedomain.com/api/v1/entity/0/subentity?search=query&sort=propery&limit=100&page=1&filters=filter1,filter2,filter3#someHash
```
you can work with query parameters, path variables, hash, path as a javascript variables, and the cool thing is changing any value from this variables will trigger an URL rebuild, `url` will always reflect query changes

## Integration with useFetch():

```ts
import { useFetch } from "@vueuse/core"
import { useUrl } from "vue-useurl"

export function useApi() {
  const { url, queryParams, pathVariables, path } = useUrl({ 
      path: '/users/random_user',
      queryParams: {
        size: 10
      },
      pathVariables: {},
      hash: ''
  }, 
  'https://random-data-api.com/api')

  const { isFetching, error, data } = useFetch<any[]>(
    url,
      { initialData: { results: [] }, refetch: true }
    )
    .get()
    .json()
  return {
    isFetching,
    error,
    data,
    url,
    queryParams,
    pathVariables,
    path
  }
}
```
[NPM Package](https://www.npmjs.com/package/vue-useurl)
[Github repo](https://github.com/rainxh11/vue-useurl)
Ubuntu 22.04 LTS
Tags: ubuntu, jammyjellyfish, beginners
Published: 2022-04-29 05:25:17

Jammy jellyfish has a wide range of customization options. The desktop comes with both a dark and a light theme. The Appearance tab includes options for changing the colour style. A bright red dot no longer represents the window close button. Instead, Yaru uses subtle grey "backdots" behind all three window controls to mimic the look of libadwaita in vanilla GNOME 42.
![ubuntu22.04](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3onygoc9gg6t592ejc2f.png)
Jammy Jellyfish uses GNOME 42 for shell and other libraries.This has a number of advantages, including a more streamlined user interface with smaller on-screen display notifications, snappy horizontal workspace transitions (and corresponding touchpad gestures), and improved multi-monitor support.
![ubuntu22.04](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kd01tl37io0iblalrxm6.png)
Ubuntu has improved to a better icons extension which make the icons look stunning.
![ubuntu22.04](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9pmxjaobl5sf18nf6bpn.png)
Jammy Jellyfish manages workspaces horizontally rather than vertically. The workspace switcher can be accessed by pressing the super key once or by clicking the 'activities' label in the top left-hand corner.
![ubuntu22.04](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jdfu54guin39p4tyisct.png)
App Launcher has a few other quality enhancements that make it look nice, such as the ability to rearrange the apps. Dock settings can be found in Settings > Appearance, where you can customise the dock to your liking.
![ubuntu](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jwfoxaferxh7labz9ifk.png)
 
Jammy Jelly comes with new power management features which includes three modes : `power saver` , `performance` and `balanced`
![ubuntu22.04](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hw0j105dcirpd53h5ec8.png)
The screenshot tool has been improved with lots of options which makes us easy to capture screens and save it.  
![ubuntu22.04](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zs6yyfabvgl5pj63byj3.png)
Hope you found this useful !
Named Layouts - A new feature available in SvelteKit
Tags: namedlayoutsinsveltekit, sveltekitnewfeatures, sveltekit
Published: 2022-04-29 04:37:23

There so many new features getting ready for SvelteKit production release. Named layouts are one of them. It's available in latest beta release. 

These videos explain how named layouts works in sveltekit.

{% youtube 6lNQWtaNzuE %}

{% youtube hKg_V3jouLk %}

references :<a href="https://dev.to/mpaternostro/new-and-upcoming-features-coming-to-sveltekit-122e">New and upcoming features coming to SvelteKit</a>

<a href="https://www.youtube.com/watch?v=s6a1pbTVcUs&amp;list=LL&amp;index=14&amp;t=623s">Rich Harris's talk with Svelte Society video</a>
Interview tips from a Google Engineer
Tags: programming, beginners, career
Published: 2022-04-29 04:24:37

One of our Hackpack Alumni shares how he broke into Google starting with 0 Data structures and Algorithms experience.

Watch the full video [here](https://www.youtube.com/watch?v=FtfLWQExKGk)! 

## Join the Community! 

If you are studying for programming interviews, join the most active community of engineers doing the same thing.[ Apply here. ](https://www.hackpack.io/)

Or sign up for our [newsletter](https://fangprep.substack.com/) for more tips
PolarDB Always Free Program: More Regions, More Options
Published: 2022-04-29 04:05:27

Good news for all!!!

More regions are available for PolarDB Always Free Program, you can claim PolarDB on any of the followings, free of charge.

「
Australia(Sydney), China(Hong Kong), Germany(Frankfurt), Japan(Tokyo), Singapore, UK(London)
」

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jc9qfhhfuj243wkczuis.png)
 
Wanna know how cloud native database services can help you? Apply now on our website👇
https://www.alibabacloud.com/product/polardb?#J_5764451150
My blog site
Published: 2022-04-29 03:50:53

My blog site: https://riblog.live

I will post something about opensource, tech skill, and anything about life.

In my imagination, this blog site should keep the feature with 2 post type at least, one type to article while the other to 'micro article'(like twitter post).

我的博客网站：https://riblog.live

我将发布一些关于开源、技术技能以及关于生活的任何内容。

在我的想象中，这个博客网站应该至少保留 2 种帖子类型的功能，一种类型为文章，另一种类型为“微文章”（如 twitter 帖子）。
【剑指 Offer.07 重建二叉树】
Published: 2022-04-29 03:31:54

题目地址：https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/

题目描述：输入某二叉树的前序遍历和中序遍历的结果，请构建该二叉树并返回其根节点。

比如：该二叉树
![image-20220429111801363](https://gitee.com/li_da_ben_shi/MyPicture/raw/master/img/20220429111808.png)

Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]

Output: [3,9,20,null,null,15,7]

## 递归方法

可以知道的是：

前序遍历一棵二叉树的结果肯定是：

> [ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]

中序遍历一棵二叉树的结果是：

> [ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]

那么我们可以采取以下思路：

（设定先序遍历为preorder，中序遍历为inorder）

* 设定preorder[0] 为根节点 root
* 在 inorder 中寻找根节点所在的位置，然后计算 左子树 的结点个数
* 然后就可以递归建树了

-----

代码如下：

```c++
class Solution {
public:
    unordered_map<int, int> index;
    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
        int n = preorder.size();
        for (int i = 0; i < n; i++) {
            index[inorder[i]] = i;
        }
        return myBuildTree(preorder, inorder, 0, n - 1, 0, n - 1);
    }

    TreeNode *myBuildTree(vector<int> &preorder, vector<int> &inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {
        if (preorder_left > preorder_right) {
            return nullptr;
        }
        int root_pre_idx = preorder_left;
        TreeNode *root = new TreeNode(preorder[root_pre_idx]);
        int root_in_idx = index[preorder[root_pre_idx]];
        int left_tree_cnt = root_in_idx - inorder_left;
        root->left = myBuildTree(preorder, inorder, preorder_left + 1, preorder_left + left_tree_cnt, inorder_left, root_in_idx - 1);
        root->right = myBuildTree(preorder, inorder, preorder_left + left_tree_cnt + 1, preorder_right, root_in_idx + 1, inorder_right);
        return root;
    }
};
```
Simple typescript data validation without libraries
Tags: typescript, validation
Published: 2022-04-29 03:00:05

Check that your function arguments have correct types at run-time!

```ts
import {validate} from './validate'

const validGetUserArgs = Object.freeze({
    authToken: '',
    pubkey: new PublicKey()
    atTime:  new Date()
})

type GetUserArgs = typeof validGetUserArgs

function getUser(args: GetUserArgs) {
    validate(args, validGetUserArgs)
    checkToken(args.authToken)
    db.get({pubkey: args.pubkey, at: args.atTime})
}
```

And here's one definition of that `validate` function:

```ts
function validate<T>(obj: T, valid: T) {
    for (const k in valid) if (!(k in obj)) throw Error(`missing key ${k}`)
    for (const k in obj) if (!(k in valid)) throw Error(`unknown key ${k}`)
    for (const k in obj) {
        const got = typeof obj[k]
        const wanted = typeof valid[k]
        if (got !== wanted) {
            throw Error(`argument ${k} had type ${got} instead of ${wanted}`)
        }
    }
}
```

Demo in [typescript playground](https://www.typescriptlang.org/play?#code/MYGwhgzhAEAKCuAjEBLYBpApgT2gbwChpjpgB7AOwgBcAneYas2gCgAclVhoBrHAXgDkggJR4AvgUkFyVatABuYVABMA4pmoBVCJloBBWgHMY-aAHlEAK0yMAdADNamTAC9MLQiWhh41ABYAKmR8FABc0MIANEQkHIh82BEUmADucJxoWNgsIjHeYNSBKAC2mBHQKekAIoUeIlINBNTYbJjQGtq6Bsam0C1tZA6Kyijqmjp6hiYEBA7wFIwolNBGE90sYL0RnZM9JiL4scRKqnWbvVEjqrvd0xAN3s7U8LQUkSGCUrMA9D-QAGVqIU0P1WpgYDQUCAQNBUsweGEZJQIGQQJg7CAyEYWIIQtB4N0woIrmsunpPL4AsFQsSSfFEmEqhlkFkcLkooVimVkmloLVqPVxCImrIaNAHGA+AA5eAlRB6aBmYQ+GALHgUMipd6QSpyhW0Ah-aCBfx6doQfxkeAgFTQBU+aDOO0QACO8BQRiM6IJFBUiqpQRCmHeCqxqSRYrRGKxOMEiDAdoGEPtflWZDIdpUhTAxNJ6wpeEDNJDYUlMv1eiiDJwTL5CFZGHZeS5pXKlT5AqFIt+-wAQmnNelUu1lKjoP4wAp2vQKABaaht65jEGUSMo+TlzBA2goChGJXQACsqt9Gq1OshdD3RmRVGjmOxuKMGaT4JgiDTCazObzqwLrBFn4Qa0luO43tWSCMsyDZcNkHKtjyHY1OcIjCk0cwLEsKynCugoADyBAAfCwZDWBEgRXLhKgUYcXgkA4zDQCwYryDw0B7suKiHCgwwsAAhCw7GcWRVgiv0-i0Fq0AAKK0FJrAAAYlCgUA3rwODQAAJHgPDiIpjwMUxLEbrwHHvKJPF8YJwnvNR4kBFJ6RyQpLCKeqQ7vIk2m6fphnEIxtDMaxZkidYdHHN4pCmS+8hmMmQzQKJADaPAALqRd4IWpGAFCCna8Xgol1GpRlUUkLxzGxdA-H8GYOV5Zg3FHOV5WOdJLnMG5WxGHKIbyDpekTomYJtD5sXiOZNCYCNiU6Q1+V+ZlJCSN4kiSEAA)

Note this is limited. You'll have a headache with unions, optionals, nesting, non-class interfaces, etc.
Load data on Select2 | Jquery
Tags: jquery, javascript
Published: 2022-04-29 01:51:33

```
var data = [{ id: 0, text: 'enhancement' }, { id: 1, text: 'bug' }, { id: 2, 

    text: 'duplicate' }, { id: 3, text: 'invalid' }, { id: 4, text: 'wontfix' }];

    $("#controlID").select2({
      data: data
    })
```
Flutter - How to format DateTime and how to display it
Tags: flutter, programming, tutorial, webdev
Published: 2022-04-29 01:49:10

Hello,
Today I will show you how to format datetime in the way you wish to display wi the ``intl flutter package``.

To check the latest version o the package check this link [HERE](https://pub.dev/packages/intl/versions)

# Installation and Importing

At ``pubspec.yaml`` add ``intl: ^0.17.0`` and make sure you check for the latest version, the ^ sign before the version is for the system to auto-update within that main release. So when they release version 0.17.1 it auto-update it self. 

```
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.17.0
```

At the file you wish to use, import it like this.

```
import 'package:intl/intl.dart';
```

# How to use

Variable  - datetime

You can edit and format as you wish, with dots, comma, arrows, etc.

``DateFormat('d MMM y').format(datetime)`` = 28 Apr 2022
``DateFormat('d MM y').format(datetime)`` = 28 04 2022
``DateFormat('d-MM-y').format(datetime)`` = 28-04-2022

There are also a list o functions that we can use that gives us default formats.

``DateFormat.yQQQQ().format(datetime)`` = 2nd quarter 2022

Have a look at all formats available at the official documentation [HERE](https://pub.dev/documentation/intl/latest/intl/DateFormat-class.html)

Thank you

{% user mgpaixao %}
Apa perbedaan diantara ECMAScript dengan Javascript ?
Tags: javascript, interview, indonesia
Published: 2022-04-29 01:42:23

---
title: Apa perbedaan diantara ECMAScript dengan Javascript ?
published: true
description: 
tags: Javascript, interview, Indonesia
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rasamfqgm0z5u5aaq9wg.jpg
---

Perbedaan diantara ECMAScript dengan Javascript adalah EcmaScript merupakan Bahasa Scripting dengan tujuan umum, sedangkan JavaScript adalah implementasi utama dari ECMAScript.

Sehingga sering kali seseorang menyebutkan JavaScript dengan iimbuhan ES6, contohnya JavaScript ES6 yang artinya pada versi JavaScript tersebut sudah menerapkan fitur EcmaScript versi 6 seperti keywords const atau let dan sebagainya.
Top 10 Software testing tools
Tags: testing, automationtesting, software, programming
Published: 2022-04-29 01:20:09

Testing tools are products in the software development life cycle that are meant to support test activities in every step of software or product development. These products (software testing tools) are used to test and output the errors and also check the software performance and functionality.

There are many testing tools available in the market with free versions as well as paid versions. The following are the top 10 testing tools that are in demand nowadays.

1) Selenium
2) Katalon Studio
3) Appium
4) Eggplant
5) Tosca
6) Testsigma
7) Test Complete
8) MABL
9) QAProSoft
10) Autify

To know about each of the tool, [https://fsh.org.in/blog-details/Testing/Top+10+Software+testing+tools/10](https://fsh.org.in/blog-details/Testing/Top+10+Software+testing+tools/10)
Adding URL Search Parameters to Imports!
Tags: typescript, javascript, tutorial, node
Published: 2022-04-29 00:54:34

Here's an interesting bit of knowledge: did you know that you can create and interpret relative file URLs like... actual URLs?

> _All content covered in this post will only work with [ESM](https://nodejs.org/api/esm.html)_

Now, it might be hard to find a practical use for this, but it is undoubtedly very cool 😎. Enough talk; let's look at some code.

```ts
// In your first file:
import './example.js?abc=123';
```
```ts
// In your second file, example.js:
const url = new URL(import.meta.url);
const searchParam = url.searchParams.get('abc');

console.log(searchParam); // → '123'
```

Here, [`import.meta.url`](https://nodejs.org/api/esm.html#importmetaurl) is used to display the full URL used to import the module. In this case, for example, it might be:
```
file:///C:/Some/Folder/Path/example.js?abc=123
```

From here, we can create an instance of a [`URL`](https://nodejs.org/api/url.html#class-url), which will make it super easy to parse search parameters.

## How could this be used?

I have no idea 😂! Maybe it could be used as a shortcut for very primitive module configuration? For example, using the very popular utility package `dotenv`.

{% embed https://github.com/motdotla/dotenv %}

Instead of:
```ts
import dotenv from 'dotenv';
dotenv.config({ debug: true });
```
You could do this! 🦄
```ts
import 'dotenv/config?debug=true';
```

I'd love to know your thoughts 😆
Flutter - Difference between Container vs Column and Row
Tags: flutter, programming, webdev
Published: 2022-04-29 00:36:05

Today I will simply show the difference between Container vs Column and Row. Both sets are commonly used in interface development and it's wise to know the basic difference between them both.



# Container - [Flutter doc reference](https://api.flutter.dev/flutter/widgets/Container-class.html) 

![Imagedescription](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2fpzour5wajn0vuryj64.png) 

The container widget is the most used component in flutter apps because it provides you with various common painting, positioning, and sizing widgets, whenever you have widgets that are focus on it’s core functionality and don’t give you the option of positioning and styling, you involve it in a Container.

- Accepts only one Widgets as child
- Alignment is more flexible and the style options are more broad
- Flexible Width, it can use the child width or whatever you set as width
- Used when alignment and style is to be personalized


# [Column](https://api.flutter.dev/flutter/widgets/Column-class.html)/[Row](https://api.flutter.dev/flutter/widgets/Row-class.html) 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ce8ydba9q015a8ga6trn.png)
 

The row is the widget that can display various child widgets in a horizontal manner. 
The column displays child widgets in a vertical manner. 
By default, they do not support scrolling. It can be enabled by wrapping with other widgets. But, it is preferred to use ListView in case there are numerous child widgets to be displayed.

- Accepts a list of Widgets as children
- Limited alignment and no style options available.
- Always fills the height (Column) and the Row always fills the width
- Used when the Widgets are close to each other, follow a pattern or on top of each other


A great use of a Container and a Column/Row together, is when you want to personalize your Column and Row but you can’t. Then you involve your Widget in a Container so you can give better alignment and style it as you wish.

Thank you and let me know what you think bellow in the comments

{% user mgpaixao %}
Day 20: Sleepless Thursday
Published: 2022-04-28 23:48:23

Hi!
it's Thursday and as always there will be no sleep there is a demo tomorrow (actually it's today :) and it's going to be a complicated one 
I don't know how this week ended it was a quick one and I don't have much done compared to my usual productivity. today was a no difference it was just a usual day at the office and I'm too tired to be writing anything I'm just ranting 
I will be back soon for this week reflection tomorrow 
we will se how it goes
signing off...
Filtering Display Cards
Tags: showdev, webdev, beginners, javascript
Published: 2022-04-28 23:18:50

As I begin to add filtering functionality to my portfolio website, I remembered how proud I was when I first learned how to filter by first and last name on my last project. It took a lot of research as I was still very, VERY new to JavaScript and didn't know the beginnings of the language very well yet. But at the end of the day, I was very proud of the outcomes.

The live project is at [First Galaxy Inc.](https://firstgalaxyinc.com/agents.html) on their agents page. 

*Note: If you are interested in reaching out to their broker for a new investment or career switch, please let me know! I would be happy to refer you to the company!*

![filter code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/te38mcrgfh08riz6tlgp.png)

What are you working on these days?

Happy coding!
Programming HORROR Stories
Tags: tools, stories, discuss
Published: 2022-04-28 22:11:17

---
title: Programming HORROR Stories
published: true
description: It's scary out there...
tags: #tools, #stories, #discuss
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hpqyy7p7fp1fznlr33b5.png
---

Programming horror stories: I've got one. You've probably got _at least_ one yourself. And I know that because there is an entire sub-reddit [dedicated to the subject](https://www.reddit.com/r/programminghorror).

My horror story is a long one, but we can just summarize it with the letters "XSLT". Apologies up front because you can't unsee that.

But mine kind of pales in comparison to a few of the ones out there that I've heard. Here are two horror stories from good developers like you and me who were just in the wrong place at the wrong time.

## The monster hiding in your code

This one is truly terrifying. I couldn't even believe it when I read the [original story on reddit](https://www.reddit.com/r/programminghorror/comments/o9dm6r/i_was_getting_errors_and_couldnt_pinpoint_it/). Believe it or not, there is such thing as a "zero width" unicode character and, well, you can imagine the chaos this can cause you if it ends up in your code...

{% youtube x1kyIUZgzqo %}

SHEESH. 

Can you imagine spending hours looking for a character that you literally can't see? That is the kind of thing that would make you seriously reconsider your career choice. But more importantly, HOW DID THAT CHARACTER GET THERE?!?!

## Losing code into the abyss

This one is about the core fear that ever developer has - losing your work. We've got source control for this, but it still happens? How does it it happen? With the right series of events and some small mistakes along the way...

{% youtube 6SosuQDWaYU %}

Now yes, you should always commit your work, but the point is that **these things happen**. Nobody is perfect and it's way too easy to destroy hours of good work with a single click. I know. I've done this myself!

## I've seen some 💩

I'm...old. We don't need to get into specific numbers, but sometimes I feel like that Batman meme...

![Batman with a shocked look](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jtv4lmafe6fseciubgle.png) 

Every last name in the ERP database changed to the same thing. All credit card purchases made in the last 24 hours double charged because asynchronous processing is hard. A 6 month refactor that yields a much slower and worse UI. The nightmare goes on an on.

But what about you? What are your programming horror stories?
April 28th, 2022: What did you learn this week?
Tags: discuss, weeklyretro, weeklylearn
Published: 2022-04-28 22:06:54

It's that time of the week again. So wonderful devs, what did you learn this week? It could be programming tips, career advice etc.

<center>

![David from Schitt's Creek saying "This is a teachable moment for all of us!"](https://media.giphy.com/media/Q8rwlNTcDAU3MuUzd7/giphy-downsized-large.gif)
</center>

Feel free to comment with what you learnt and/or reference your TIL post to give it some more exposure.

{%tag todayilearned %}
Did Some Work with SvelteKit
Tags: svelte, javascript
Published: 2022-04-27 04:55:57

Not entirely sure if I'm a big fan but building out components and having layers of abstractions is definitely fun. The big problem is that to read this code afterwards. Its quite elegant and simple while I'm building things out but the real test will be coming back to this project in a few months and being able to change things.

I do like that I basically can define a schema in javascript and svelte will build it out with the components I specify. I think a big thing that will help is having a svelte cheatsheet similar to the one I made for vue.

I'm really taking the Baghdad parable to heart. A programmer would never write a DestroyBaghdad function as that is definitely wrong. Instead they would write a DestroyCity function that takes Baghdad as a parameter. This is pretty much what I've done and something that these javascript frameworks seem to allow pretty easily. Which is great but adds indirection to things that might not need it. After all maybe I should be manually writing out each Destroy...