/srv/irclogs.ubuntu.com/2012/06/21/#ubuntu-testing.txt

=== salem_ is now known as _salem
=== jalcine is now known as Jacky
=== sivatharman_ is now known as psivaa
=== zyga-afk is now known as zyga
=== yofel_ is now known as yofel
astraljavaballoons: Hi, sadly I cannot participate to the roundtable today. I asked knome if could instead, but he wasn't sure either.12:13
=== _salem is now known as salem_
=== zyga is now known as zyga-food
=== zyga-food is now known as zyga
balloonsastraljava,  I missed your message earlier :-( Well it's happening now16:01
balloonsphillw, jriddell, hggdh, jibel, Effenberg0x0, superrm1 you guys about?16:05
Effenberg0x0o/ here16:05
hggdh~ô~16:05
balloonsI don't know some of the IRC names of folks16:05
* balloons goes off to look16:05
superm1howdy balloons16:06
balloonshowdy!16:06
balloonsok, so we have Effenberg0x0 hggdh and superm116:06
balloonslet's see who else we can get trickling in here16:06
superm1tgm4883 should be here too from mythbuntu16:07
tgm4883I am now16:07
tgm4883I forgot and walked away to the server room :/16:07
balloonshello Thomas ;-)16:07
tgm4883o/16:07
balloonsok, looks like astraljava and knome can't make it so, I don't think we'll get anyone from xubuntu16:08
balloonsany lubuntu folks here?16:08
balloonsor kubuntu folks?16:09
balloonsok, well I will record this so I'll launch a meeting16:10
balloons#startmeeting QA Community Roundtable16:10
meetingologyMeeting started Thu Jun 21 16:10:27 2012 UTC.  The chair is balloons. Information about MeetBot at http://wiki.ubuntu.com/meetingology.16:10
meetingologyAvailable commands: #accept #accepted #action #agree #agreed #chair #commands #endmeeting #endvote #halp #help #idea #info #link #lurk #meetingname #meetingtopic #nick #progress #rejected #replay #restrictlogs #save #startmeeting #subtopic #topic #unchair #undo #unlurk #vote #voters #votesrequired16:10
patdk-wkhm?16:11
balloonsJulien and Phil from ubuntu both don't seem to be around ;-(16:11
balloonschecking on kubuntu folks then we'll get started16:11
Effenberg0x0balloons: you had scheduled 2 hours. Maybe they will still make it16:12
balloonsok, pm's sent to everyone ;-)16:13
balloonsso, let's start16:14
balloons[TOPIC] UTAH Demo16:14
balloonshuh, bot doesn't like topics16:14
balloonswell, anyways, first item on the agenda was to demo UTAH16:15
tgm4883balloons, perhaps #topic16:15
balloonsdon't think we can get a demo together, but hggdh can explain a little bit about what it is16:15
balloons#topic UTAH Demo16:15
superm1i thought there was going to be a google hangout or somethign to show it off?16:15
tgm4883hmm, meetingology apparently is a liar when it comes to available commands16:15
hggdhno, no demo right now, unfortunately16:15
balloonssuperm1, hggdh should be able to demonstrate how vm's are used in automated testing. but sadly, not a UTAH demo atm16:16
superm1so for now everyone stare at http://www.enchantedlearning.com/usa/states/utah/map.GIF and imagine as hggdh describes :)16:16
balloons:-)16:16
Effenberg0x0I like the green. Very vivid.16:17
hggdhUTAH (Ubuntu Testing Automation Harness) is the new baseset we are moving to for automated testing on Ubuntu16:17
hggdhit will be (when fully implemented) flavour-agnostic, so it can be used for all *ubuntu16:18
hggdhright now, beginning of development, it only supports VMs (via libvirt)16:18
superm1is the input it takes an ISO image?16:18
hggdhyes, it uses ISO images to build the target test environment16:19
superm1specifically, "desktop" ISO images, not alternate16:19
hggdhthe installation is preseeded, so there is no input required.16:19
hggdhnot only desktop, but also alternate and server16:19
superm1okay i see16:19
superm1sorry, i can hold off questions until the end if you would like, i just realized this might be a bit rude to interject16:20
hggdh(which is to say, ubiquity and debian-installer based installs)16:20
hggdhsuperm1: no, please shoot the questions as we go16:20
hggdhI do not mind :-)16:20
superm1Ok. will you have a place to put preseeds in this tool for the different flavours?16:21
hggdhthis, on the other hand, means that you might have to adjust the preseeds to your specific needs16:21
hggdhyes, we will16:21
superm1i know at least mythbuntu and ubuntu studio do have custom preseeds16:21
superm1Ok16:21
hggdhbeing able to adjust preseeds is pretty much a requirement if you want to automate tests16:22
superm1so the unfortunate flaw in doing it this way that comes to mind is that sometimes you will have bugs that are exposed only when the installation is ran in an interactive mode or only in an automatic mode etc16:22
superm1so it can't be a complete replacement to lots of user testing, but instead a valuable supplement16:23
hggdhUTAH was originally called 'uath'. But we found that (1) nobody could pronouce it, and (2) it means 'fear, horror´ in ancient Gaelic16:23
hggdhgenerically speaking, automated testing *cannot* replace actual hands-on16:23
hggdhit is just a way of getting the bits that do not directly depend on user input tested, and out of the way16:24
hggdhbut we still need to have manual installs, and testing16:24
Effenberg0x0hggdh: Just to be clear, can you mention some cases in which UTAH will raise a flag?16:25
hggdhyes16:26
hggdhlet's say you are testing upgrades from desktop -- it is easily automated: having an existing (say) Precise install, you run 'sudo do-release-upgrade -d', and use pexpect to drive the answers16:27
hggdhin this case, we are looking for failures to upgrade -- missing pre-reqs, new package version fails to install, etc16:28
hggdhof course, we cannot check for positioning of windows, and text visibility in windows, etc. But we will get the "backoffice" errors16:28
hggdhor you are testing a specific package with the testset provided by it (say, mysql, or even coreutils). So you install the image at the version of Ubuntu you want, and run these tests16:29
hggdh(for coreutils, you need to _build_ the package again, coreutils tests are intermixed with the build process)16:30
hggdhbut you will get errors because of a change on libraries16:30
superm1what kind of failures get raised in the upgrade testing?  will bugs get filed?16:31
hggdhor you want to check on ecryptfs -- we have a set of tests for it, and they are fully automated16:31
hggdhno bugs are opened automagically. We still need to look at the failures and identify the cause16:32
Effenberg0x0hggdh: got it. Some debugging skills are needed by a human tester.16:32
hggdhthe point here is to weed out false positives -- errors caused by test code, not by what is actually being tested16:33
hggdhEffenberg0x0: always16:33
hggdhwhen you are testing you have to look for real and false positives and negatives16:33
hggdhusually, we assume the negatives (which is to say, the expected results) are correct16:34
hggdhbut, every so often, you should look at your "correct" results, and verify they are indeed correct16:35
superm1there will be some sort of notification mechanism for those flavors interested when things fail and need some further intervention?16:35
hggdhUTAH has a provision to alert users. YOu can set it and use it. In our case, most of the UTAH tests will be run via Jenkins (http://jenkins-ci.org/), so we use Jenkins to do the alerting16:36
hggdhanother point we all should be careful on is on destructive/non-destructive tests16:37
hggdhI personally define a destructive test as a test that unilaterally changes your system configuration16:37
hggdhlook at 'change your system configuration' as 'can destroy your system'16:38
hggdhit does not matter if it actually completely borks, but it might -- for example -- change the DNS resolution16:38
superm1will flavours be able to run utah in the canonical jenkins instance, or need to set up their own?16:39
hggdhon the other hand, this Monday we had a ecryptfs test that actually forces a reboot of the system: a piece of the kernel goes haywire, and I/O to ecryptfs cannot be guaranteed to work until the reboot16:39
hggdhsuperm1: I cannot really answer that, sorry. But... we -- right now -- do not have the resources to guarantee test space for the flavours16:40
superm1OK16:41
superm1Daviey warned that jenkins is a PIA to get setup16:41
hggdhso, at least right now, please do not expect we will be able to run tests for other than Ubuntu16:41
Effenberg0x0hggdh: The typical ISO-Test (Install/Partitioning, writing MBR/Grub, installing/removing drivers/kernel modules like VGA) is handled by UTAH?16:42
hggdhEffenberg0x0: yes indeed16:42
hggdhsuperm1: not really a pita, but it does have a learning curve16:42
hggdhthe easiest way of using UTAH would be to deploy VMs16:43
superm1can UTAH be ran without jenkins then on its own via VM deployments?16:43
hggdhdeploying bare-metal will, of course, require bare-metal and additional packages/networks (so that MAAS, for example, can be deployed)16:43
hggdhsuperm1: yes, it can, and this is how I was starting to test it16:44
superm1ah great16:44
balloonsif I can interject, it would also be good to throw some links at you for this : https://launchpad.net/utah16:44
hggdhall you need is libvirt and friends16:44
hggdhballoons: thank you, did not really have time to prepare16:44
superm1so really need to just check it out and start playing to see where questions crop up16:44
balloonsthere's a wiki off that page with more info and a picture16:44
hggdh(and I am, right now, testing a new set of kernel SRU tests, and the KVM I am using is driving me nuts, popping up on my monitor every time the machine thinks about doing something16:45
balloonsadditionally, if you have further specific questions once your playing with it, there's a mailing list setup for it now ubuntu-utah-dev@lists.ubuntu.com16:45
hggdhsuperm1: yes. Not only to learn, but to tell us where we, ah, did something wrong16:46
superm1great, thanks!  just need to find some time to actually use it and experiment now :)16:46
hggdhthe code resides at...16:47
balloonsit's linked above hggdh https://launchpad.net/utah, lp:utah16:47
hggdhheh16:48
Effenberg0x0hggdh: How do we prioritize/filter UTAH-Testing bug reports, amidst the constant flow of new bug reports on LP (correct/incorrect ones) everyday?16:48
hggdhso please brz branch, and play -- or install the daily utah package from the PPA16:48
hggdhEffenberg0x0: what we are doing internally, is to tag all bugs we find (via whatever test process, including manual testing) as a qa finding16:49
balloonsfyi, there's a daily and stable ppa.. you can find them here: https://launchpad.net/~utah16:49
balloonslink to stable: https://launchpad.net/~utah/+archive/stable16:50
Effenberg0x0hggdh, OK16:50
balloonsok anymore questions on utah for hggdh ?16:51
balloonsalright if not, next up is testcase management16:53
balloonswhich you get to listen to me for ;-)16:53
balloonsI'll include visuals..16:53
balloonsI'm wondering if it makes sense for me to type it or speak it16:53
balloonsI'm concerned if I only have the video it won't make the log16:54
balloonsI can screenshare and type to you all, or you can view a live feed of me speaking with my desktop :-)16:54
balloonslet's try the type and view16:55
balloonshttp://www.screenleap.com/ubuntuqa16:55
balloonshopefully everyone can see my screen now?16:56
Effenberg0x0OK here balloons16:56
superm1yup16:56
cariboo907OK here too16:56
balloonsAs you know the qatracker just went through an update to bring testcase management16:56
balloonsI'm going to show you how it works from a behind the scenes admin perspective16:57
balloonswe'll use the staging site on dev.stgraber.org16:57
balloonsso I have a couple products laid out here, mimicking the iso.qa.ubuntu.com tracker16:58
balloonstestcases and pages look pretty similar, except for the addition of the extra links16:58
balloonsclicking on a test (http://packages.qa.dev.stgraber.org/qatracker/milestones/224/builds/16281/testcases/1305/results) you can see there are some new links, and the testcase is now included inline16:59
balloonshi highvoltage!16:59
highvoltagehi balloons :)16:59
balloonshttp://www.screenleap.com/ubuntuqa16:59
balloonsyou can watch and follow along16:59
balloonsok, so that's nice having the testcase in there16:59
balloonsyou'll also notice the boilerplate text on the bottom for submitting your result and filing a bug17:00
balloonsthe bug reporting instructions are currently set at a product level17:00
balloonsthe testcases are defined and then grouped into testsuites which can then be used by any product17:01
superm1product meaning "ubuntu" "mythbuntu" etc?17:01
balloonssuperm1, yes17:01
balloonsor, a package17:01
balloonslike the calls for testing of the kernel17:01
balloonsI'll show that quickly17:01
balloonsyou can see we've had a call for testing for the kernel, and it's had 2 versions17:02
balloonssilly me called the 3.4 version precise1, because I was still learning the tool17:02
balloonsso, there's one testcase in here, smoke test17:02
balloonssimilar boilerplate text17:03
balloonswe're looking at (http://packages.qa.dev.stgraber.org/qatracker/milestones/223/builds/16283/testcases/1301/results)17:03
balloonsfiling a bug on this package has some further instructions than normal, and includes a link17:03
balloonsthat link is tagging the bug as well17:03
balloonsif we look at installation instructions for the package, we get a howto install and howto uninstall17:04
balloonsfinally the detailed infromation on the testcase has the history of what the testcase looked like17:05
balloonsthis is useful for when we update a case, but have old results17:05
balloonsthe results and case will match up17:05
balloonsSo you can see some of my earlier attempts and playing with formatting, etc17:05
balloonsok, so let's take a look at the admin side of things17:06
balloonsAs you can see, we allow you to define a template for new testcases17:07
balloonsheh, I changed it a bit17:07
superm1does that mean we need to work through an admin like you to make our own test cases?17:07
balloonserr, actually.. there17:07
balloonsthe template has gone thru a couple revisions before going live17:08
balloonssuperm1, no it doesn't mean you'll need me to help you make testcases17:08
balloonswe'll get to that in a min ;-)17:08
balloonsok, so anyways, that's the example template for a testcase as decided upon last dec by the qa community17:09
balloonsit could change of course if we decided to change it.. and if so, we could update the template at that time17:09
balloons:-017:09
balloonsok, so let's look at the testcases quickly17:09
balloonsyou can see my smoke test mostly follows the template -- barring it has no expected results.17:10
balloonsbut the admin side, you simply title it, and add the testcase17:10
balloonsnotice we do use some html / drupal markup17:10
balloonssome is allowed and we use it to help display as well as for machine parsing17:10
balloonshere's an example of an isotest testcase17:11
balloonsthis wiki page http://testcases.qa.ubuntu.com/Install/DesktopFree has been converted into the testcase you see17:12
balloonshttp://packages.qa.dev.stgraber.org/qatracker/milestones/224/builds/16281/testcases/1306/results17:12
balloonsok, so that's testcases more or less17:12
balloonsnow, we can organize testcases into testsuites17:12
balloonsyou see the 'free software only' testcase is part of the ubuntu desktop suite17:13
balloonswell.. 'ubuntu desktop extras' actually :-)17:13
balloonsthere are 3 tests defined in here you can see17:13
balloonsI can set the order, weight and status as expected17:13
balloonsnow, let's go assign our testcases/testsuites to a product17:14
balloonsyou can see I've linked both the 'ubuntu desktop' and 'ubuntu desktop extras' testsuites to the ubuntu desktop amd64 product17:15
balloonsfor precise17:15
balloonsnow, some of this may be rather foreign to all of you, but there is a guide to this interface which I'll link to at the end17:15
balloonsthe new stuff I am showing you is not yet in that guide. since, it's new (as in this week new :-) )17:16
balloonsnow to answer superm1's question a little bit, there is a new role to the admin interface17:16
balloonswe will have a testcase admin role which will allow you to define and manage the testcases17:17
balloonsI've setup a team on lp to do this17:17
balloonsanyone who is on the team will have access to manage testcases17:17
balloonshttps://launchpad.net/~ubuntu-testcase is the team17:17
balloonsPhil graciously agreed to help trial out this new interface17:18
balloonsyou'll notice the team is restricted17:18
balloonsmy goal is not to prevent anyone from contributing, but some control is needed17:18
balloonsfor anyone running the tests, I would like them to be able to suggest new tests or improvements by filing a bug against ubuntu-qa17:19
balloonslike any other community, make a few contributions and it will make sense to make you an admin should you wish to be17:19
balloonsthis is all VERY new, so I'd love input from all of you on how to shape this17:20
balloonssuffice to say, the flavors should all have at least one person who has this access17:20
superm1that's what i was just going to say17:20
superm1i'm glad tgm4883 volunteered for mythbuntu17:20
balloons:-)17:20
mrandhahaha17:20
balloonsI'd like everyone on the team to also make sure the tests stay maintained and not fall into dis-use or out of date17:21
balloonsso it's a bit of responsibility, but not too much I don't think17:22
balloonsmore or less if your active in testing, you would be doing / have done this anyway17:22
balloonsso questions?17:22
Effenberg0x0Balloons: Doesn't it sort of overlap with UTAH?17:23
balloonsbesides the testcase management piece, the new qatracker should be able to support all of our testing needs (insomuch as we want to have a test and record results)17:23
balloonsit's my hope we can consolidate what we're doing by using it17:23
balloonsEffenberg0x0, how so?17:23
balloonsThis is intended for manual testing, UTAH is intended for automated testing17:23
balloonsof course, over time we will continue to close the gap on that.. how/where the results get recorded, etc17:24
Effenberg0x0I know, I mean some automated tests might kill the need for some manual test-cases17:24
Effenberg0x0How to keep things paired up17:24
balloonsEffenberg0x0, my longer term view is to automate away everything that makes sense17:25
balloonsthe pairing up if you will of what is automated vs manual happens via our communication17:25
Effenberg0x0Ok, so the community looks at test-cases and define what's still valid or not, got it17:26
balloonsthis cycle once we have migrated all of our pre-existing tests over I would like to see us take a review of them17:26
balloonsI took a work item personally to review the testcases for iso testing to ensure they make sense, are needed, etc17:26
balloonsbut yes, as a community, on an on-going basis, we should help frame what is needed for manual testing and where it makes sense for us to help17:26
balloonsexample of this is the kernel tests. you notice the "smoke tests" are rather simple and light17:27
balloonsthe intense tests are being automated by hggdh and the canonical and kernel teams17:27
balloonsthe manual testing piece of that is getting it out to many more different workloads and bits of hardware17:27
Effenberg0x0Ok17:28
balloonsanything else?17:28
balloonsIf not we'll migrate onto the next piece and i'll shut down the screenshare for the time being17:29
balloonsok, so we talked about the new tracker and testcases17:30
balloonsbriefly I wanted to mention milestones.. Kate asked me to remind the flavors that you can skip milestones17:30
balloonsbut if you do commit to doing a milestone she asks you do it with full force.. aka, you see it through to the end ;-)17:30
balloonsfeel free to interrupt me at any time btw17:31
balloonsnext up we wanted to discuss collaboration17:31
superm1i haven't kept up with the thread about abolishing milestones, but what if that happens?17:31
superm1have you thought about how the tracker would scale for that?17:32
balloonssuperm1, yes, that thread has grown and been quite a discussion17:32
balloonsfrom a tools point of view, our "milestones" can remain the same.. We can nothing but dailies for iso testing if needed, and calls for testing are already of variable length17:32
balloonsas far as what's going to happen, I am not completely sure as it's still be discussed17:33
balloonshowever, from a ubuntu perspective we're being asked (again, we were asked at UDS / before UDS) to test more regularly; meaning not just at milestones17:34
balloonsfrom that perspective nothing in theory has changed.. but the cadence of exactly when we do this "regular" testing is being suggested to be 2 weeks17:35
superm1i see, okay17:35
balloonsthe schedule we adopted after UDS was pretty much the same.. about every 2 weeks17:35
superm1and i understand that flavours can follow the cadence they would like in this regime too17:35
balloonsyes, of course flavors can choose to follow the cadence or not17:36
balloonsI recommend adopting a cadence that works for the flavor17:36
balloonsconsidering the devs, testers, etc17:36
balloonshence, adopting every ubuntu milestone doesn't always make sense..17:36
GridCube(i could speak very very unoficially for xubuntu)17:36
balloonsI liked the LTS only approach some flavors have thought about as well17:36
balloonsGridCube, hello :-)17:37
GridCube:)17:37
balloonson colloborating, part of us all getting together is to talk about needs we might have and how we can work together to benefit each other17:38
balloonsmaintaining testcases in mutual fashion and sharing them across flavors as it makes sense, is one such example17:38
balloonsbut I also think we can do things like collaborated calls for testing (like we have done with the kernel testing), or on specific packages that mutliple flavors use like firefox17:39
balloonswhatever it is.. floor is open to whomever has a need or idea for colloberation17:39
GridCubeo/17:40
balloonsyes GridCube17:40
balloonsbrb, type away :-)17:40
GridCubehello, i present myself, im a bug tester and support collaborator for xubuntu, i've been so for over a year now, never participated here tho.17:41
GridCubei have proposed a small change on the qa tracker a while ago, it was that the tests cases should have some sort of area, where all the reported bugs for that particular case on previous days could be seen17:42
tgm4883wait, what17:42
* tgm4883 scowls at superm1 17:43
superm1;)17:43
balloonsthat delay!17:43
balloonsepic17:43
balloonsGridCube, this exists: http://iso.qa.ubuntu.com/qatracker/reports/defects17:43
balloonsadditionally when you look at a testcase, it has a list of previously reported bugs17:44
balloonsbut only for that build I believe17:44
GridCubeonly for that build17:45
balloonsregardless, it's worth filing a bug to discuss how it might look17:45
balloonsI like the idea17:45
GridCubethe wishlist bug is already there17:45
GridCubeim trying to find it17:45
balloonsGridCube, ahh, ok, point it out to me.. I'll subscribe17:45
GridCubeok17:46
GridCubegive me a sec17:47
balloonsok, so anything else.. This last piece is general Q & A time. hggdh is still around (though dealing with his flailing computer) feel free to ask any more questions17:47
GridCubehttps://bugs.launchpad.net/ubuntu-qa-website/+bug/99481617:47
GridCube:)17:48
balloonsit appears like that was implemented?17:48
balloonsahh I think you mean https://bugs.launchpad.net/ubuntu-qa-website/+bug/99481217:48
GridCubeahm, it was like "granted" but no one actually implemented it17:49
balloonsI subbed.. I'll look into it.17:49
GridCubeballoons, yes those two go thogether :)17:49
balloonsthanks for the suggestion17:49
GridCubeno problem, i just though it would make reporting and testing easier, because people would know what to look at17:50
hggdhI am here17:50
balloonsok, so if there's no more questions we can discuss the testcase management stuff quickly.17:51
balloonsThe old wiki needs converted, of which I have done a couple.. In addition to converting I placed them into the new templated format17:51
balloonsyou can see everything in powerpc and amd64+mac has the new testcase format17:52
balloonshttp://iso.qa.ubuntu.com/qatracker/milestones/219/builds/17586/testcases17:52
balloonsI take that back, heh, 'Live Session' doesn't17:52
balloonsSo I will be going through and doing the same with the other testcases used by the ubuntu iso's17:53
balloonshowever, many of those testcases are used by the flavors as well17:53
balloonsfor instance, the xubuntu desktop i386 testcases17:53
balloonsthey use those same 4 tests17:54
balloonsthe only one not converted is the wubi (windows installer) testcase17:54
balloonsconvert that and you can convert that iso over17:55
balloonsof course, the flavors can then pick and choose which tests to keep in common and which to write for themselves17:55
balloonsyou can pull any testcase you wish and include it with any other combination of testcases to go into a testsuite17:55
balloonsthe examples I gave that are live actually are 2 testsuites, so that even the testsuites can be shared across multiple isos17:56
balloonsso for example, the xubuntu desktop i386 iso can use the 'ubuntu desktop' testsuite which contains all 4 testcases it's using, barring the wubi testcase17:57
balloonswrite the wubi testcase and then add it to a testsuite and include it on the iso17:57
balloonsI trust that all makes sense :-)17:57
balloonsSo, please ping me to get access to help out in this area. Your iso's and testcases will remain usable as-is, (you can see the legacy mode on the tracker), but can be converted now at any time17:58
balloonslet me know who is interested in joining this new team and I'll help get them going on how to use the tool, etc17:59
balloonsand with that I think we're done. ;-) Thanks to you all for coming out. I appreciate your time. And thanks for suggesting we meet during the cycle. I think it was helpful18:00
balloons#endmeeting18:00
meetingologyMeeting ended Thu Jun 21 18:00:10 2012 UTC.18:00
meetingologyMinutes (wiki):        http://ubottu.com/meetingology/logs/ubuntu-testing/2012/ubuntu-testing.2012-06-21-16.10.moin.txt18:00
meetingologyMinutes (html):        http://ubottu.com/meetingology/logs/ubuntu-testing/2012/ubuntu-testing.2012-06-21-16.10.html18:00
Effenberg0x0Thanks balloons18:00
balloonsI'll post the log on the qa mailing list for reference.. Thanks everyone18:00
hggdhthank you balloons18:03
=== zyga is now known as zyga-afk
=== salem_ is now known as _salem

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!