00:11 < ddnet-commits> [ddnet] def- pushed 1 new commit to master: http://git.io/v3iDw 00:11 < ddnet-commits> ddnet/master a58ad6a def: Always check that player names are not equal 00:18 < Chairn> wut, voted a map, we were 4 , 3 people voted yes, and vote failed? 00:18 < Savander> maybe moderator 00:18 < Savander> ?^^ 00:22 < Chairn> it was vote failed, not vote enforced by 00:22 <@deen> Chairn: veto 00:23 < Chairn> ah 01:47 < Savander> meh, i don't really understand indicators 01:47 < Savander> ^^> 01:49 <@deen> ? 01:49 < Chairn> indicators? 01:49 < Savander> i mean 01:49 < Savander> *int 01:49 < Savander> xD 01:49 < Savander> or *b 01:50 < Chairn> pointers ^^ 01:50 < Savander> or something with * 01:50 < Savander> oh. maybe pointers 01:50 < Savander> sorry ^^> 01:50 < Chairn> surely :D 01:50 < Chairn> it can be pointers or array 01:56 < Savander> pointers are used in optimizing the code?? 01:57 < Chairn> it allows to have several different class member pointing to the same objects(e.g current loaded map) 11:03 < SideTrack> hi deen u there 11:06 < SideTrack> anyone here 13:04 <@deen> Sure, but not in the exact 4 minutes when you're there^^ 13:24 < Sadale> Obviously sidetrack is new in IRC 13:34 < Nimda> Verification 3.0 by Silex just released on Solo at 2015-08-14 13:27 14:31 < o_be_one> vali seems to be back in game servers 14:31 < o_be_one> (oops, hi all :D) 14:32 < o_be_one> and cheat more than before ... (autoaim everytime) 14:32 < o_be_one> on V3Royal 14:32 < o_be_one> hey solala sup', good in Baam :) ? 14:46 <@deen> o_be_one: i guess you did something against vali? because lots of ddos attacks now 14:53 < Sadale> interesting. it seems that you get ddos everyday 14:54 <@deen> yes 14:54 < o_be_one> deen: hum he cheats since 2 days, just give him a 2h ban yesterday cause he continues to cheat and flame, got some complaints from players about vali 14:54 < Sadale> how do you deal with ddos? :o 14:55 * Sadale is a noob sysadmin 14:55 < solala> hello o_be_one 14:55 < o_be_one> Sadale: our providers handle them well, but seen here that they dump network to know more about attaks 14:55 <@deen> Sadale: buying an expensive ddos protection 14:55 <@deen> , tripling your cost 14:56 < o_be_one> deen: oh theres an other provider to handle ddos ? 14:56 < Sadale> o_be_one, dump network? 14:56 < Sadale> deen, oh... 14:56 < Sadale> deen, I thought that you handle that on your own xD 14:56 < o_be_one> Sadale: yes, tcpdump like, wireshark, etc. and about ddos protection itself, for UDP, its based on algorithms 14:56 <@deen> DoS attacks sure, but a big ddos is impossible 14:56 < o_be_one> solala: whats up ? all is fine on baam ? Where you play too ? 14:57 < solala> atm? nothing 14:57 < Sadale> yep. big ddos need to be solved by, uh, subscribing a better internet line with better server hardwware 14:57 < Sadale> o_be_one, ah 14:58 <@deen> Sadale: well, you can't get a server that handles an > 100 gbit/s ddos attack 14:59 <@deen> need the provider to filter it out 14:59 < Sadale> deen, if you got google-scale hardware, maybe you can do that =P 14:59 <@deen> sure, they can 14:59 < Sadale> probably worth filtering them, tho 15:02 < o_be_one> Sadale: you work as sysadmin ? 15:02 < Sadale> no :p 15:02 < o_be_one> you study ? 15:02 < Sadale> yep. I'm still a lame student. But not on sysadmin :p 15:02 < o_be_one> ok ^^ 15:03 < Sadale> I'm interested in this topic because I got a home server. My home server probably won't encounter this sort of attack, tho =P 15:03 < Sadale> Actually, I suspect that it happened once. 15:04 < Sadale> That time my internet access was dead. And my router admin page wasn't working. rebooted the router. web interface still not working. Then I unplug the internet line and reboot the router. The router was working again. 15:04 < o_be_one> sure it won't ... And care about TW theres many kiddys ddosers :/ 15:05 < Sadale> Then I plug in the internet line, the router dead again. 15:05 < o_be_one> they just use booters on the web, they dont know what they really do ... 15:05 < Sadale> It lasted for like a few minutes. 15:05 < Sadale> o_be_one, ah. 15:05 < o_be_one> maybe yu got ddosed 15:05 < devnull> if he is running with a dyn ip 15:05 < Sadale> o_be_one, I suspect so. But I can't tell. 15:05 < devnull> its strange 15:05 < o_be_one> well you can ask your provider to change your ip if you want to stop DDoS, but useless if you continue to host and let people get your ip :p 15:06 < devnull> how long does it take for your internet to get down 15:06 < o_be_one> devnull: yes i assume he has static wan ip ^^ 15:06 < devnull> that would be sad 15:06 < devnull> monitor your traffic 15:06 < devnull> turn of your home srv and try it w/o 15:06 < devnull> go and search for the error 15:09 < o_be_one> deen: can i know names of all of our providers for DDNet EUR (host and anti-ddos) 15:09 < o_be_one> ? 15:09 <@deen> o_be_one: DDNet EUR? 15:09 <@deen> what server? 15:09 < devnull> eu 15:09 < devnull> europa 15:10 < o_be_one> deen: sorry, GER 15:10 <@deen> there's a fake EUR block server 15:10 < o_be_one> the one at 360 15:10 <@deen> DDNet EUR, the real one, hosts website and test servers, it's at harmony-hosting 15:11 <@deen> with OVH anti-ddos 15:11 < o_be_one> oh really ? nice 15:12 <@deen> i don't run any game servers with ovh anti-ddos because it didn't block any of the big attacks 15:12 < o_be_one> i'll try to work on better anti-ddos for HH by my work, i'm joing the ddos team to add to the cloud team with i already work 15:12 < o_be_one> yes i know, but i'll do my best to grow the ddos protection to handle big udp attack 15:13 <@deen> GER is at nfoserver.com, they have InterNAP anti-ddos 15:13 <@deen> GER2 is at amazon aws, no anti-ddos 15:13 < o_be_one> it's just that about GER ? 15:13 < o_be_one> AWS ^^ i like it :p i work on openstack :p 15:13 < o_be_one> AWS asked me to meet them to maybe work with them last year ^^ i was happy, but the localisation wasnt where i expect to live :p. 15:14 < o_be_one> deen: but for GER you just use nfoservers ? 15:15 <@deen> yes, best ddos protection I've seen so far 15:15 < o_be_one> yes sure i can confirm that 15:15 <@deen> haven't tried any for 400 € / month of course 15:15 < o_be_one> but i hope that OVH will be better than internap ahah, its my goal :p 15:15 <@deen> i liked EastByte's theory about that 15:16 < o_be_one> yes we talk about cheap heavy solution 15:16 < o_be_one> what is his theory ? 15:16 <@deen> since OVH is the most used anti-ddos worldwide, the attackers advertise that they can break OVH and everyone optimizes their attacks to get through OVH protection 15:16 <@deen> at least most used in cheap sector 15:16 <@deen> Thanks for the donation, o_be_one =) 15:18 <@EastByte> o_be_one: please make ovh bullet-proof :) thanks 15:18 < o_be_one> your welcome like everytime i do :) 15:18 < o_be_one> EastByte: i'm joining ddos team, dont worry its what i want to do ahah :p 15:18 < o_be_one> i want to be the most hated guy from kids using booters :p 15:19 <@EastByte> then you should better hide your personality^^ 15:19 < o_be_one> deen: but TCP protection is ok at ovh, its just over UDP. But if someone dont use UDP for his services, no problem with ovh anti-ddos 15:20 < o_be_one> the udp anti-ddos is just launched on game servers from OVH, its still in beta but it will evolve, they are studying different games as ive seen on theyre website 15:20 < o_be_one> EastByte: well they'll have to kill me soon ahah :D 15:20 < o_be_one> EastByte: what was your theory about ovh ? 15:20 <@EastByte> o_be_one: would be nice to know how to make an udp game protocol supported by ovh 15:20 < o_be_one> and ddos protection 15:21 <@EastByte> what deen said 15:21 < o_be_one> oh ok 15:21 < o_be_one> EastByte: well i know more about what they do to prevent udp ddos, and it's really fine 15:22 < o_be_one> btw, network team is really awesome and with heavy knowledge, learned more about this too, and this is just really impressive 15:22 < o_be_one> (and thats maybe why my ping is better on internap now lol) 15:22 <@deen> if they want to study ddos attacks on game servers, they could try hosting DDNet GER :P 15:22 < o_be_one> deen: thats what i'll want to dos :p 15:22 <@deen> guaranteed 30 attacks per week 15:22 <@EastByte> yea you should bring teeworlds up as an example 15:22 < o_be_one> to do* 15:22 < o_be_one> yes its my project, to handle TW ddos by ovh 15:23 <@EastByte> so you are fighting against internap? 15:23 < o_be_one> but i think i'll try to do this by Harmony Hosting cause they host many game servers 15:23 < o_be_one> no fight against internap afaik 15:23 < o_be_one> they just did peering with them i think 15:24 < o_be_one> cause i got same ping with internap than with ovh, so maybe internep peers with my providers to, its more possible 15:24 < o_be_one> provider too* 15:24 < o_be_one> (wtf my english today ?) 15:27 <@EastByte> deen: I'll implement the spoof protection in ddnet now 15:28 <@deen> great 15:28 <@EastByte> but I think for now I will keep the dummy map without background 15:28 <@EastByte> I'm kinda struggling with the map format 15:28 <@EastByte> deen: also the yellow screen comes from "gfx_clear 1" 15:33 <@deen> EastByte: can't you just use a regular map? 15:33 <@deen> everyone just has to download it a single time or am i wrong? 15:34 <@EastByte> I'm more concerned about possible reflection attacks 15:35 <@EastByte> okay, let me see how big the packet will be with normal empty map 15:39 <@EastByte> "everyone just has to download it a single time or am i wrong?" currently the dummy map is sent on each connect 15:39 <@deen> ah 15:45 <@EastByte> packet ack: 0 flags: compress size: 623->368 15:46 <@EastByte> hm 368 is still acceptable I guess 15:47 <@EastByte> deen: can we make some statistics about how many clients use the token protocol? 15:48 <@EastByte> (players I mean) 15:48 <@deen> token protocol? 15:48 <@EastByte> SECURITY_TOKEN stuff 15:48 <@EastByte> I just named it token protocol 15:49 <@EastByte> or did you forget about that update? :p 15:54 <@deen> what's the security token supposed to do? 15:55 <@EastByte> prevent packet injection 15:55 <@EastByte> https://github.com/east/teeworlds/commit/96417849c0df374942eb7e993a19ec0ec2fec1ab 15:56 <@deen> right right, now i remember 15:56 <@deen> sure, how do you want to take stats? 15:56 <@EastByte> no idea 15:59 <@EastByte> have you already made statistics for client version and stuff? 16:05 <@deen> not really 16:06 <@deen> no serious ones 16:10 <@EastByte> okay, how should we retreive the information from the server? 16:10 <@EastByte> I could dbg_msg information about a connecting client 16:11 <@EastByte> or using sql? 16:12 <@deen> yeah, write a message 16:12 <@deen> then we can just grep and wc -l 16:13 <@EastByte> okay 16:13 <@deen> or can it be told from the client version? 16:13 <@deen> i can check how high the client versions are 16:13 <@deen> then we don't need to change any code 16:14 <@EastByte> I would like to encourage people to add the security token protocol to their client/server mods 16:14 <@EastByte> so the log should be independent from ddnet client 16:15 <@deen> so are there any clients that have it except ddnet client? 16:16 <@EastByte> currently not 16:16 <@EastByte> I guess 16:16 <@EastByte> well except ddnet based clients like baumalein 16:32 <@EastByte> "[55cdfbce][server]: player is ready. ClientID=0 addr=127.0.0.1:49019 secure=yes" 16:32 <@deen> sounds ok 16:33 <@deen> but i think clients based on ddnet should keep ddnet's version numbers so that they work properly anyway 16:33 <@deen> so using the numbers should work fine 16:35 <@EastByte> currently yes but in the future there will be clients supporting the token protocol itself 16:35 <@EastByte> not based on ddnet 16:36 <@EastByte> the patch can be easily merged in any client 16:38 <@deen> got a nice script to get client numbers of all people on ddnet ger(1) currently 16:39 <@deen> http://ddnet.tw/clients-ger.log 16:39 <@EastByte> hmm, from which version do we have token support? 16:40 <@deen> 7.3 16:40 <@EastByte> ah, well 16:41 <@deen> quite a lot of people on vanilla client and a few with really old versions 16:41 <@EastByte> is 0 vanilla? 16:41 <@deen> yes 16:41 <@deen> 1 is old ddrace 16:41 <@deen> 2 is very old ddnet 16:41 <@EastByte> many of some modded clients I suppose 16:41 <@deen> 16 is old baumalein 16:42 <@deen> rest are ddnet client versions 16:49 <@EastByte> old clients or non-ddnet clients will not be able to connect dummys 16:49 <@EastByte> I'm expecting complains there 16:49 <@EastByte> kclient for example crashes on dummy connect^^ 16:49 <@deen> you can broadcast a message that they have to update to new ddnet client? 16:50 <@EastByte> for <703 it should be done, yes 17:00 <@deen> but <707 already gets a message whenever they join a ddnet server 17:00 <@deen> and they chose to ignore it for weeks 17:05 <@EastByte> hm I don't think we have to care about that 17:05 < Chairn> f1 is default for console ~deen 17:05 < Chairn> so used to have it on f4 ^^ 17:06 <@EastByte> didn't even know it's bindable 17:06 <@deen> f-key binds even work in menu 17:08 < Chairn> i never tried other f-keys than 1 to 4 17:25 <@EastByte> I hate merge conflicts which mix two functions together 17:34 <@EastByte> wouldn't it be cool if there were special diffing tools for each language 17:34 <@EastByte> instead of line based text diffing 17:56 <@EastByte> Savander: btw. pointers are like the evil version references 17:56 < Savander> it's hard to understand for noobies like me :PP 17:57 < Savander> didn't see real functionality for it :D 17:57 < Savander> don't* 17:57 <@EastByte> pointers probably are the most difficult part of C 17:57 <@EastByte> take your time :P 17:57 < Savander> in teeworlds code 17:58 < Savander> i see pointers everywhere 17:58 < Savander> even on functions 17:58 < Savander> D 17:58 < Savander> xD 17:58 <@EastByte> sure 17:58 < Savander> int *something(bla bla, bla bla,); 17:58 < Savander> xD 17:58 <@EastByte> have you worked with references before (some other langauge maybe)? 17:59 < Savander> im not real programmer 17:59 <@EastByte> kk 17:59 < Savander> i was working in java 17:59 < Savander> and php 17:59 < Savander> Java -> for minecraft server haha 17:59 <@EastByte> well in java you are mostly working with references 18:03 < Savander> ou 18:04 < Savander> int i = 0; int b = i; 18:04 < Savander> its reference? 18:04 < Savander> b to i? 18:04 < Savander> (in java) 18:05 <@EastByte> no, not for primitive types 18:05 <@EastByte> but when you are creating an object using new 18:05 < Savander> Object s = null; 18:05 < Savander> xd 18:05 <@EastByte> you get a reference to that object 18:05 < Savander> aaaa, this! 18:05 < Savander> okay i know now 18:06 <@EastByte> :) 18:42 < Savander> How it's called? public: 18:42 < Savander> IInterface() : m_pKernel(0) {} 18:42 < Savander> i mean, this type 18:43 < Savander> i mean this: IInterface() : m_pKernel(0) {} ( colon between interface and pKernel ) 18:50 < Savander> ah okay, initialization lists 18:52 < Chairn> oh, just saw a flybot for the first time 18:55 < Savander> flybot? 18:55 < Savander> you're able to fly xD? 18:55 < Savander> without hooking etc? 18:55 < Savander> xD 18:55 < Savander> (even through the freezess !?!) 18:55 < Savander> xD 18:59 < Nimda> Skyisland2 by Storm just released on Ddmax at 2015-08-14 18:53 19:01 < Chairn> nah, a bot that always stays same place with lots of small & fast hooks 19:02 < Chairn> it can be used for solo map like fly out of hell 19:04 < Savander> lol. 19:05 < Savander> it wasnt be in zClient? 19:29 < ddnet-commits> [ddnet] Chairn opened pull request #284: Fixed double clicking on friend when friend was on top server. (master...upstream) http://git.io/v3D5y 19:46 < Hamid_Jigool> hi evrybody 19:46 < Hamid_Jigool> im stuff of DDnet Persian 19:46 < Hamid_Jigool> i have a question 19:46 < Hamid_Jigool> anybody here? 19:47 < Hamid_Jigool> im KinG's Friend 19:47 < Hamid_Jigool> :D 19:47 < Hamid_Jigool> deen 19:47 < Hamid_Jigool> common 19:47 < Hamid_Jigool> aswer me 19:47 < Hamid_Jigool> :D 19:47 < solala> just wait.. 19:47 < Hamid_Jigool> ok :D 19:47 < Savander> just ask 19:48 < Savander> don't wait, ask 19:48 < Hamid_Jigool> i want to run another server "TeeBall" 19:48 < Hamid_Jigool> when i run it give me error = "failed to load map "maps/.map" 19:49 < Hamid_Jigool> i have autoexec and i put my map in maps Folder 19:49 < Hamid_Jigool> but again server give me an error 19:49 < solala> search for "sv_map" in your config 19:49 < Hamid_Jigool> waitt.. 19:49 < Savander> map 19:50 < Savander> without .map 19:50 < Savander> in config 19:50 < Hamid_Jigool> sv_map football 19:50 < Hamid_Jigool> its my code 19:50 < Savander> put it in data/maps 19:50 < Savander> try ok? 19:50 < Savander> i mean, this map 19:50 < solala> "failed to load map "maps/.map" - "/.map" 19:51 < Hamid_Jigool> sv_map "data/maps/football.map" 19:51 < Hamid_Jigool> like this? 19:51 < solala> no 19:51 < solala> sv_map without ".map" 19:51 < Hamid_Jigool> aha 19:51 < Hamid_Jigool> ok 19:51 < solala> but it tries to open the file ".map" in the folder "maps" 19:51 < Savander> noo 19:51 < solala> without the "football" part 19:51 < Savander> sv_map "footbal" 19:51 < Savander> just 19:51 < Savander> data/maps is included automatically 19:51 < Savander> .map too 19:51 < solala> ye 19:52 < solala> but look at his error 19:52 < Hamid_Jigool> i put this code 19:52 < Hamid_Jigool> sv_map "footbal" 19:52 < Hamid_Jigool> bu again error 19:52 < Hamid_Jigool> :| 19:52 < Savander> it should be 19:52 < Savander> fotball 19:52 < Savander> football 19:52 < Savander> o footbal 19:52 < Savander> not footbal* 19:52 < Savander> why sometimes this client cut my sentence 19:52 < Savander> lol 19:53 < Savander> ( i mean, IRC Client) 19:53 < Hamid_Jigool> i have a "football.map" in folder "data/maps" 19:53 < solala> yes 19:53 < Hamid_Jigool> but again give me error.. i sayed that before 19:54 < solala> try putting the mapsfolder in the same dir. as the server file 19:55 < Hamid_Jigool> at last year one of friends that i must put some space before map name in autoexec.cfg 19:55 < Hamid_Jigool> and i did 19:55 < Savander> wow, it could be mod error 19:56 < solala> ^ thats what i said with "look at the error" 19:56 < Hamid_Jigool> what can i do? 19:57 < Savander> solala, this error don't give anything 19:57 < Savander> :PP 19:57 < solala> well it does 19:57 < Hamid_Jigool> sv_map " football" 19:57 < Hamid_Jigool> like this 19:57 < solala> no.. 19:57 < Hamid_Jigool> but now its not work 19:58 < solala> put the maps folder in the same folder as the server file and try again 20:05 < Hamid_Jigool> o its work 20:06 < Hamid_Jigool> i put my maps Folder out of "data" Folder 20:06 < Hamid_Jigool> and its work 20:06 < Hamid_Jigool> thank u evrybody 20:06 < Hamid_Jigool> :D 20:25 < Chairn> facebook page needs screenshot, come ger server^^ 20:51 <@deen> Savander: why am i in the special thanks for the tw video?^^ 20:51 < Savander> you helped me with recording this demo 20:51 < Savander> i put there all of those players 20:51 < Savander> :D 20:51 <@deen> i just jumped around for 1 minute^^ 20:51 <@deen> but thanks 20:51 < Savander> ^^ 20:52 < Savander> but, you was ^^. 20:52 <@deen> I think .me' wants a DDNet trailer now for http://facebook.com/DDraceNetwork ^^ 20:52 < Savander> haha 20:52 < Savander> ^^. 20:52 < Savander> there is a lot of good movie makers 20:53 < Savander> someone probably want to create trailer for ddnet too! 20:55 < Chairn> oh man 20:55 < Chairn> im hidden behind facebook's banner... 20:57 < Savander> ddnet on facebook 20:57 < Savander> uhu 21:00 <@deen> Chairn: me too, but i'm happy about it :P 21:00 < Chairn> xD, you're behind ddnet's logo ^^ 21:00 < Chairn> but this one has no transparency :P 21:01 < Chairn> hopefully, you have removed the name before screenshot 21:01 <@deen> ? 21:03 < Chairn> so no one can say, i was there, and you weren't 21:21 < Chairn> skyisland2 needs so many fix... 21:21 < Chairn> checkpoint tele are all fucked... 21:22 <@deen> ouch 21:38 <@deen> Savander: https://github.com/def-/ddnet/pull/283#issuecomment-131216405 21:40 < Savander> i don't understand ^^> 21:42 < Savander> maybe he want to make demoplayer looked more like html video player 21:58 <@EastByte> lalalala 21:58 < ddnet-commits> [ddnet] east opened pull request #285: Ip spoofing protection (prevents spoofed connections) (master...antispoof) http://git.io/v3yQs 22:00 <@EastByte> now I need some look overs and testing 22:00 <@deen> Looks nice, eeeee: want to proof read? 22:47 < Savander> http://www.savander.pl/img/LH37UKRD7336 22:47 < Savander> hehe 22:47 < Savander> ^^. 22:54 < Savander> deen, you changed pw on zcatch? 23:02 <@deen> Savander: yeah, I'm doing that right now 23:02 <@deen> zio and .me' asked me to do that 23:02 < Savander> okay ^^ :D 23:03 <@deen> except on one server because it's full^^ 23:03 <@deen> i should use fifos for the zcatch servers 23:05 < Savander> ye, zcatch is really popular 23:05 < Savander> on ddnet 23:05 < Savander> fifo will be usable for news too 23:05 < Savander> :p 23:06 <@deen> but i think fifo is not implemented for zcatch? 23:06 <@deen> if you want, you can implement it 23:06 <@deen> just take the code from ddnet 23:06 <@deen> and also please sv_shutdown_when_empty 23:06 <@deen> it's really useful to restart servers 23:06 < Savander> with fifo i have few problems 23:06 <@deen> i just do this: echo sv_shutdown_when_empty 1 > servers/*.fifo 23:06 < Savander> i can't test it :PP 23:06 < Savander> (windows) 23:06 <@deen> hm, no linux 23:06 <@deen> meh, then i do it^^ 23:07 < Savander> but i can add shutdown_when_empty 23:07 <@deen> also, I asked github to give me the ddnet organization 23:07 <@deen> so i can put all ddnet repos under github.com/ddnet 23:07 < Savander> (experience for me! ahah) 23:07 < Savander> oh ye 23:07 < Savander> it'd be cool 23:07 < Savander> all mods in one place 23:09 < Savander> few people asked me, if i can increase number of players which are required to win the game. 23:09 < Savander> because they are cheating ranking 23:09 <@deen> yeah, doesn't mean much if you win 100 games vs 5 people 23:10 < Savander> yup 23:10 < Savander> so i should change that? 23:10 <@deen> yeah, your choice 23:10 < Savander> either yours 23:10 < Savander> ^^ 23:10 <@deen> nah, you know more about zcatch and it's your mod 23:10 <@deen> i just host it 23:11 < Savander> generally .me and zio knows more 23:11 < Savander> i did it because, when i host zcatch it was small 23:11 < Savander> only teevision 23:11 < Savander> so i wanted to change a bit this mod, and here we go ^^. 23:11 < Savander> (most popular zcatch servers, mhm) 23:39 < Savander> oh okay 23:52 < Savander> deen, it's proper? http://pastebin.com/MrQXb0Ht 23:52 < Savander> i can use #else? 23:53 < Savander> ok, nevermind 23:53 < Savander> i can