« first day (3750 days earlier)      last day (86 days later) » 

12:12 AM
also, I found out EF tracks how many data a table have. I saw it generates a subquery and specifies the top, i.e., ...FROM (SELECT TOP 2 ...
12:46 AM
1 hour later…
2:11 AM
[Not Li] I've been pining for Code First approach
[Not Li] but for some ungodly reason
[Not Li] my manage is like "nah, database first mate"
what's the difference between the two?
code first, you code the model and it autogenerates the table schema?
and db first, the traditional approach?
3:02 AM
@mr5, can you guess the fix for yesterday's issue?... formaction attribute!
3:28 AM
4:21 AM
@d4rk4ng31 noice
So I thought I need to write code like this when using EF: gist.github.com/mr5z/a4ff5a4faa5fef5fb5437c155246b832
But I could just define the relationship and use the .Include() extension.
4:42 AM
Q: `formaction` attribute acting weird in asp.net-core (razor pages) partial

d4rk4ng31I have a razor page called Home.cshtml which has a partial called Search.cshtml. Search.cshtml is a razor page. It is being called in the Home.cshtml page in the following way: <partial name="Partials/Search" model="new Partials.SearchModel()"/> Consider the following 3 codes: code1: @model Searc...

5:06 AM
@d4rk4ng31 have you tried a simple example with forms in it? Maybe you're missing some configurations.
@mr5 This is as simple as it gets! lol
I don't believe you.
Simple would be plain html
@mr5 hmm...
I guess you're right
Will try to use a simpler example
drop razor, return to monke plain html
5:38 AM
[kesarling] umm, if I want to create a sidebar, which queries a database, and will be shown by clicking a particular button on a page (3 pages, each has that button; same sidebar) where would I include the sidebar? In the Layout page, or as a hid-able partial view?
6:16 AM
@mr5 with plain html
it works as expected
7:02 AM
Good morning
@CaptainObvious Say I would like to add a boolean field to an EF table - how would I do that migration, and how would I make EF actually migrate that on the next deploy? I once figured that out years ago, then instantly forgot about it.
7:16 AM
[Squirrel in Training] GoOoOoOoOoOoOoOoOoOoOoOd Mornin' neglecterinos!
[Squirrel in Training] actually sql linq is more powerful than method linq
I demand proof
Because I don't believe you mostly but also because I like how the sql syntax looks so that might be an excuse to actually learn it
LINQ query syntax > LINQ method syntax
In case of EF
Looks better imo
But other than EF, it's the other way around.
Method syntax does the same as LINQ, so fits better into the rest of the code
7:20 AM
LINQ query syntax looks better when you have a complicated queries.
Also, you can make temp variables in LINQ query syntax.
Which can be accessed in multiple scopes.
Give me a use case
3 hours ago, by mr5
So I thought I need to write code like this when using EF: https://gist.github.com/mr5z/a4ff5a4faa5fef5fb5437c155246b832
The link here
You mean like 'AS' in SQL?
no, the let keyword
Oh the whole thing is one big query
Damn dude
7:27 AM
Yeah I don't know how .Include works so I made that.
.Include just changes that property from lazy to greedy
And even though I specify the table relationship under dbcontext, it seems to be useless?
7:39 AM
You need .Include if you want to make a query on a joined table - tableA.Where(ta => ta.TableB.Description == input) would probably fail, since the navigation property ta.TableB isn't loaded. So you need an Include like tableA.Include(ta => ta.TableB) to load it.
7:57 AM
That moment when your estimate is waaaaaaaaaay off the mark :D
8:09 AM
@Hozuki daily business?
I rarely forget something in estimates :3
my skill of making a reasonably correct estimate is sufficient to be waaaaaaaaaay off the mark :D
8:38 AM
[Squirrel in Training] there are good videos about that in youtube
[Squirrel in Training] somehting about also being able to store variables during quieries
[Squirrel in Training] and merging better
[Squirrel in Training] don't ask my anymore though
[Squirrel in Training] LINQ SqlSyntax feeld weird, but it's more POAFUL
it is more painful too
just like assembly is more powerful than C#, but also more painful
it's impossibru to estimate software development...
@Wietlol somehow. It looks better than "broken broken" LINQ methods.
broken broken?
Google told me it's the English translation for the word I meant.
8:50 AM
whats the original word?
it's "putol putol"
So a phrase, not a word
I suspect it has a meaning that is not completely literal, so google has difficulties translating it properly
// "broken broken" is like this:

var statement1 = list.Select(e => e);
statement = statement.Select(e => e);
statement = statement.Select(e => e);
statement = statement.Select(e => e);

// oth, the opposite is:

var statement2 = list
    .Select(e => e)
    .Select(e => e)
    .Select(e => e)
    .Select(e => e);
@Squirrelkiller I'm not sure how to categorize it.
why reassign the statement?
So not broken in the sense of damaged, but broken in the sense of "broken up into several smaller thingies"?
8:54 AM
ah, broken as is detached?
Like "one-by-one"
still begs the question... why?
@Wietlol I simplify the example. Just imagine those are some different methods.
> still begs the question... why?
Typical use case would be ConfigureServices where technically you could do the whole thing in one continuous call but still there are usually several calls.
8:55 AM
except that you dont re-assign the collection often times
Ah right
@Wietlol if you know how to make a temporary variables in LINQ method syntax without breaking it into multiple statements, then I'd change my mind that LINQ query > LINQ method.
even though it would be the 1:1 equivalent of the chain
@mr5 can you give an example?
@Squirrelkiller yep
@mr5 I think there is some XY going on here
8:57 AM
4 hours ago, by mr5
First try should be to maybe do it without actually needing a temp variable
the gist link
yeah, not sure how I would do it without temp variable though.
select new CaveDto in what context do you select just a new object? Why not return?
Or assign
Here's the full context for that query: gist.github.com/mr5z/b3a17e9ac7b057bfd149a2c564b5ce13
I thought there was something like IAsyncActionResult so you wouldn't have to wrap it in a Task
9:04 AM
first step is to not treat it as tables
you dont have to have a foreign key property
path.MapId ? just do path.Map
public Map Map { get; set; }
no id
[Squirrel in Training] Gosh since when is the c# room abck to its spammalot days?
Just needed to recover from the discord split :P
@mr5 I like it
Hello everyone.
I have a design decision. If my web app allows users to search through their data on several different websites, on the index page is it better to use a select tag with a menu of websites to login and fields for username and password, next to the search box input type, or on the index page is it better to have a login button for each website to connect to (e.g. log in to website A | log in to website B etc.) and route the button click to a search page for that website.
The first approach does everything on one page (i.e. log in and search is done on one page). The second approach does login on a separate page from search. If I chose the second approach then I would have to have a controller for each website, or maybe I could have one login button on the index page and then on the search page have a menu of websites that the app user needs to choose for the username and password they entered.
Also, I don't want to persist the username and password, so if I want to temporarily hold the username and password in memory, is it correct to store this data in static fields or properties in the controller class?
[Squirrel in Training] it was dead way b4 discord killerino
9:17 AM
A search box like this:
@ntohl thanks! All of this was because of I have no idea how to use .Include. Should be less lines if I could define the table relationship properly.
@Wietlol it indeed has Map property. I'm not sure if it's not null all the time.
@mr5 Not quite, when performing more complicated queries. For example, SelectMany, it is much easier to understand what's going on if you use LINQ method syntax.
the issue with linq sql syntax has the same cause as it's power
[Captain Obvious] [citation needed]
9:24 AM
the scope of variables and the context within the query are both really difficult to understand and able to avoid making hoops like new {cave, map}
[Squirrel in Training] do the work urself
@Squirrelintraining C# converts LINQ query syntax to method syntax anyway, so perhaps LINQ method syntax should offer more control over your query as it is more low level where as LINQ query syntax is higher level.
the method syntax is something people are already familiar with
@Wietlol so if I specify the relationship properly from DbContext, the cave.Scores and map.Paths would already be prefilled?
people understand methods and lambdas
the only thing they have to learn is "what da heck is 'SelectMany'?"
and "what da heck is 'Where'?"
some are easier than others tho
9:26 AM
[Captain Obvious] I looked at the example that was posted
[Captain Obvious] That's fucking horrific
that too...
but still
> first step is to not treat it as tables
lol. "That's fucking horrific" seems a valid argument... Especially I just said I like it
doing the joins based on ids just screams "RELATIONAL DATABASE"
but you dont care where it comes from, you just care that maps have paths and paths have points
@Wietlol Score = it.cave.Scores.Select(it => it.MaxScore).Sum() assumes cave.Scores is non empty.
that's the step when you make relational databases dtos
so it's full correct
9:29 AM
@mr5 true, but I blame C# for that
there are quite a few Linq methods missing or having a really bad signature/behavior
Still missing query though
Sum is one of them
Unless it's what specifying relationship under dbcontext do.
should return a Nullable<ISummable>
in your case... Nullable<Double> ?
Ok. Imma run your code.
But I am not out yet with my work.
9:31 AM
but in fairness, this will probably boil down to sql, where the database determines the outcome of an empty sum
which would probably be 0
[Captain Obvious] Why would sum return a nullable
[Captain Obvious] That's so fucking dumb
Seriously if you make a sum over numbers, return a number. You're not fucking excel where the numbers might be text.
\[**[Captain Obvious](https://discord.gg/PNMq3pBSUe)**] 1: "What's the total value of your bank accounts"
2: "Oh well I don't have any"
1: "So it's 0 then?
2. "Yeah, seems reasonable"
@CaptainObvious EmptyList<Double>().Sum()
what should that return?
[Captain Obvious] Because it's empty
9:34 AM
and what if you dont want it to be 0?
[Captain Obvious] Why wouldn't it be zero
You want it to be 0, because you have no money
well. Yes. I would prefer you handle the empty list at it's place. So like naturally if EmptyList<Double>.<anything> throws, you don't have to specify what does .Sum would return
[Captain Obvious] Like seriously, I can't possibly be see any use case where returning null to a sum operation would be the desired outcome
[Captain Obvious] A sum operation should return 1 of 2 value types
9:36 AM
if you want to handle empty lists, you DO handle it like EmptyList<Double>?.Sum() ?? <handle empty list>
[Captain Obvious] A number, which is the total of all of the numbers which are being summed, or an error, because you tried to sum something which isn't a number
[Captain Obvious] <@778912890404339712> that's not an empty list though, that's a null list
[Captain Obvious] ie there is no list to sum up in the first place
and that's the reason why I think null is not a mistake
[Captain Obvious] that doesn't even make sense
[Captain Obvious] That wasn't teh original argument
that's true. I changed topic
[Captain Obvious] List with no contents is not the same as no list
9:39 AM
EmptyList<Double> can be someLinqResultWithoutValues too
turns out that EmptyList<Int>.Sum() does return 0, but database sums do return null
still, the assumption is that you always want 0 as your value if you have no values
Depends on the use case actually
A sum over no bank accounts should return zero, since there is no money
the same for most other reducing operations
what should Max() be if there are no elements?
Unless you also want to be able to answer "Do I have bank accounts at all?" with that same method, which would be bad design though
||> Math.max().toString()
9:45 AM
@Wietlol null Logged: `` Took: 0ms
oh bother
@Wietlol "-Infinity" Logged: `` Took: 0ms
most reducing operations simply throw an exception
Does any one have any idea about my question starting here chat.stackoverflow.com/transcript/message/51421164#51421164 ?
I know it's a design decision, but some of us are full stack so know good app design
generally speaking, you dont create login forms on one website for another website...
9:51 AM
Why not?
@BlackPanther "full stack" does not mean they "know good app design" ;)
I'd probably make a select box
@Wietlol right. But the front end is all about design, isn't it :)
normally, you would have a link to the other website, where the user will authenticate on, and return an OAuth2 token back to your website
Depending on the future of that, option#2 might be smarter though. Is it possible that oauth will be added, like Microsoft/Google? Then the select box wouldn't be a good choice.
9:53 AM
From a UX perspective, the question you should be asking is "What is most convenient for my end-users?". Even if that implies that, from a technical aspect, it's a horror to build and maintain. If you prioritize UX, do what makes the most sense for the user.

In this case... I'd expect to be able to 'connect' different "sites" in a settings page and use one unified search that looks through my, um, "data"... on all sites, in one unified view.
this way, website A wouldn't know the user credentials for website B, but is still able to perform operations on system B on behalf of the user
although, if you both own website A and website B...
but then why do you have different logins for the same user on the same managed system?
@Squirrelkiller So the first approach is better:
38 mins ago, by Black Panther
I would recommend Hozuki's recommendation
have a separate page where you manage which sites are connected
@Wietlol But I think that's different from what I want. What you describe is authenticating using an external website so that you can login to a site without having to register. Instead I want to just use a user's username and password to fetch their data from an external website and perform some operations on it before displaying the result of the operations to the user.
@BlackPanther In this case, yes. Unless of course Roel's solution is feasible in your situation.
9:57 AM
@BlackPanther and exactly that is basically "forbidden" in good design
you dont ask a user's username and password for www.othersite.com
@Squirrelkiller Nope, no Microsoft or Google or Github OAuth will be added.
Yea. Your site shouldn't have access to user credentials to access another site. That's a big no-no.
you ask them to authenticate themselves on the other site and return an OAuth2 token that you can use to operate on their behalf
That said, if it's a web-app running locally, then it makes sense.
I mean, theoretically you could make a PWA WebAssembly "access manager" aka password manager where you, once logged in to some sites, just click a button card and get sent directly to that site, already logged it.
10:00 AM
an account's password is a verification of ownership, and you do not own their account, so you should not have the password
@Hozuki Really? I'm surprised. Isn't code maintainability a priority for companies. I wonder how that would be received at a job interview, or is it just an unspoken rule.
@Squirrelkiller wouldnt that be a password store?
or password manager
plus links and a process to login to each site
Hence "Access Manager"
(I should learn to read)
@BlackPanther It depends. You have different disciplines. UX focuses inherently on that. UI and back-end people will take maintainability into consideration, but UX does not. It's all about the user-experience for them. And that's why UX and UI people fight. Someone involved, like a product owner, usually balances between UX and the effort it would take. But like I said, if your absolutely priority is UX, then ignore all your maintain considerations focus on the best experience.
(Most super successful companies prioritize UX fwiw)
10:03 AM
best UX: dont even need a password, so users dont have to remember them
@Wietlol "Just gimme your username I'll log you in"
Best UX is through phone call, no UI :)
@Squirrelkiller or this
> The password you entered "hunter2" is currently not your password, would you like to update your password to "hunter2" instead?
@Hozuki That's very interesting. One search for all sites, but all the sites are completely separate from each other, so I would think a search needs to be specific to a particular website, which is why I'm thinking of using a select tag or separate login buttons for each site that send the user to a search page for that particular site.
10:05 AM
why not just use Google? :)
@BlackPanther I don't know the use case, but if as a user I find a search box, I expect it to work across the entirety of the app. Even if that means aggregated results and hwatever.
Orayt done!
what did you complete?
@Wietlol So that a user can login to their account on social media A, social media B, or social media C, and browse their data on the logged in site.
@Wietlol I learned how to use DevExpress and submitted the PR :)
Izz work related, not personal project.
10:08 AM
@BlackPanther Is this the real use case?
Imma try the code you suggested.
@Squirrelkiller Well it sounds good but I don't have Roel's experience, so not sure how to implement his solution.
look at each connection, figure out how you generally authenticate (probably OAuth2)
@Wietlol kek. How do I populate this maps?
10:10 AM
@Wietlol I didn't know that, interesting.
then figure out how you can ask a user to provide you the token
@BlackPanther What does your process look like? Do you send the credentials to the specific website, log in to get the token, then use the token to issue a search?
@mr5 EF does it for you
@Wietlol also, there is no model that contains a collection of Maps :(
is there not?
10:12 AM
Cave.Include(c => c.Maps)
Now it's populated
@Wietlol I'm assuming it's forbidden because it's a privacy/security issue. If I'm not storing their username and password in a database, and their password is encrypted after being submitted to the server, then is it no longer forbidden.
@BlackPanther nope
@Hozuki Who made up this rule, haha.
most websites also say that you should never share your password with anyone
10:13 AM
This is how the end result looks like.
and definitely not with other websites
Probably some sites steal people's passwords
@BlackPanther It's quite simple, really. I don't trust you. I'm not giving you my Facebook password.
It's a collection of Cave rather than Map
@BlackPanther I am quite sure you wouldnt abuse it, but you still are not allowed to have it, and I am not allowed to give it to you
what I am allowed to give to you is a token of authentication, specifically for your system with only the authority that your system needs
which we often do with OAuth2 tokens with a certain list of scopes
10:16 AM
@Hozuki The practice of a site having access to user credentials must be widespread because I'm sure I've signed up to quite a few websites that had me register by creating a username and password, even worse, those sites stored my user credentials in a database, which is why I probably got a warning not too long ago that one of my passwords has been compromised.
@mr5 but every cave is associated to maps
@BlackPanther It's a very different thing for my to generate a new username/password for blackpanther.com, than it is to give my facebook.com username/password to blackpanther.com.
Yes, I can give you a new set of credentials that you can use to identify me. That's fine. But I'm not giving you sets of credentials I use on other sites.
If you want to access my facebook data, use an OAuth connection and ask for the required scopes. Then I'm assured you never get my credentials, and I can manage exactly what you can or cannot do.
.SelectMany(user => user.Caves.Select(map => new { user, map }))
.SelectMany(c => c.user.Caves.Select(cave => new { c.user, c.map, cave }))
.SelectMany(s => s.user.Scores.Select(score => new { s.user, s.map, s.cave, score }))
I think I need to do something like this?
Well for the score, it looks wrong.
10:21 AM
you dont need a collection of each combination
Because it doesn't compile.
it compiled on my machine
Anyway, I think the code above is the equivalent of this:
from cave in context.Cave
join user in context.User on cave.AuthorId equals user.Id
join map in context.Map on cave.Id equals map.CaveId
the equivalent of that is context.Caves
10:23 AM
you already have the combination with the user because of cave.Author
and you already have the combination with the map because of cave.Maps
Actually I have basically that in my project, but Cave == Team, Author == Owner, Maps == Members
		public async IAsyncEnumerable<Team> GetAllTeams()
			foreach (var t in entities.Teams)
				yield return await ConvertToModel(t);
Wrote this one long ago
		private async Task<Team> ConvertToModel(Teams team)
			return new Team
				Members = await GetPlayersForTeam(team.TeamId),
				Name = team.Name,
				Owner = await entities.Players.SingleAsync(p => p.PlayerId == team.Owner)
So yeah, I have it in several calls
@Wietlol I'mma stop now. My head hurts.
private async Task<IList<Player>> GetPlayersForTeam(int teamId)
	return await entities.Players.Include(p => p.TeamMembers).Where(p => p.TeamMembers.Any(m => m.Team == teamId)).Cast<Player>().ToListAsync().ConfigureAwait(false);
[Captain Obvious] Yeah it's really weird
[Captain Obvious] SQL style is just overly verbose, looks weird in a .cs file, and is generally a bit shit
@Wietlol But how would my app be able to access their data on the other site on their behalf? Unless the OAuth2 token that is returned can be used to access the other site, is this possible?
@Wietlol Say I want to use the twitter API to access a user's twitter history, I somehow ask them to authenticate themselves on twitter and then return an OAuth2 token. Then would this token authorize my app to use the twitter API which can only be accessed using a bearer token returned by authenticating the app with twitter.
10:26 AM
@Squirrelkiller I'm still weirded by that IAsyncEnumerable. On Discord bot API, it is used for batching API calls.
most other sites have a web service, where you can access stuff
the bearer token is probably the oauth2 token
@Hozuki For now, the web app is running on local host, but I plan to host it on the cloud, so it will be publicly available
@BlackPanther That's exactly what OAuth is for.
@BlackPanther Yep. Use OAuth then.
> Features:
- Twitter integration - The Log in with Twitter flow can grant authorization to use Twitter APIs on your users' behalf.
10:30 AM
@Hozuki Thanks. This is a great insight into office politics, perhaps remote work can avoid it.
there is one problem... you probably cant do everything via the web services
in simple terms, how is Twitter going to show ads if you are not on their website?
and all the bots were also quite a pain for them to deal with
@Wietlol Google is not that powerful ;)
so, most social media sites dumbed down the web service side of the product
@BlackPanther Google: Is that a challenge?
[Captain Obvious] I mean that entirely depends on the platform
[Captain Obvious] Some platforms expose the entire functionality through their APIs
well, there will always be some that do it
Parler probably didnt block any functionality
Telegram probably neither
as opposed to Twitter and WhatsApp
10:34 AM
Telegram is actively providing the API so others can build their own client, so it makes sense to have 100% of the functionality in the API
@Hozuki Yeah, something like that. Does this change the design decision I should take?
@BlackPanther I'd definitely go for a connector page where you can hook up services like Facebook, Twitter, etc. Then the search box would just use all connectors and aggregate the search results. That's the best UX, I think.
@Squirrelkiller Right now, I use the user credentials (and app credentials) with basic authentication to get a bearer token from the social media API, so the credentials are sent in a Post request. Then use the bearer token returned from the Post request in a GET request to issue a search. So essentially what you describe, yes.
I think VS has a nice Blazor template that includes a Microsoft oauth2 login component.
@BlackPanther Then that is indeed the right way from before we decided we don't wanna give random websites the credentials for other services.
@Hozuki I think that domain name is already taken :)
@Hozuki Well said, I need to find an alternative because no one will use my site if I ask them for their social media password. Is it better to use OAuth2 than this approach you mentioned:
55 mins ago, by Hozuki

@Hozuki I've not set up a GUI OAuth2 before. Right now the app runs on only localhost. I'm hoping it won't be a problem setting up and debugging OAuth2 in an app running on localhost.
10:57 AM
Something like that would be my idea. Search box with icons underneath. Turn them green if connected, gray if not. Clicking a gray icon redirects browser to respective site to do OAuth, then come back and turn the icon green cuz it's connected now. Quite an easy-to-use UX, but your technical challenge may be fun
@Hozuki I'll look into setting up OAuth for my site, thanks. Maybe it's not that difficult, it sounds like OAuth2 just redirects a user to an external website where the user logs in, then returns an OAuth2 token to my site which my app can then use to access the users data on their behalf.
@Wietlol Good point. Web services include things like APIs right?
@Wietlol Speaking of Google, can someone tell me how all these big software companies like Google and Facebook make so much money when most of their software are free?
I know that their business model is to produce revenue from advertising but I don't see how a company can have revenues of over $100 billion dollars from just advertising to random users on the internet. Microsoft and Apple sell software and hardware so it's easy to see where and how they make so much money.
@Hozuki How would this connector page combine with OAuth2?
@Hozuki That's a very descriptive illustration, thanks. Do you often draw the user interface when designing an app? I should probably start doing this for the design part of app development.
11:30 AM
@Hozuki Is an icon the same as a button?
@Hozuki I'm guessing all three social media sites can be connected to at the same time. However, only one social media site should be searched at a time, right, because if a user only has an account/history with FaceBook but you search both FaceBook and Twitter then you'll get a 400 status code from Twitter?
@BlackPanther Google also has Google Cloud and business apps. And they know everything you search for. Their profiles of you are so detailed, they can target ads to such insane precision, others are willing to pay for that. That's how. You are the product :-)
@BlackPanther I do. I use a tablet and draw images to detail the UX, the flow of changes, and make it visible like that. That's how I can show others my ideas.
@Hozuki did you draw this using mouse?
@BlackPanther Nah. If they have both Facebook and Twitter connected, launch a search to bother services and aggregate the results. The search page for the user will appear as "one search result", even if it's just a combination of multiple.
@mr5 Drawing tablet.
@BlackPanther Google also getting their profit from their APIs. They have a lot of it actually. And YouTube, don't forget about that. Facebook on the other hand just sells users data for ads.
Anyone have tried Xamarin.UWP here?
Why is it that most XAML syntax that works on iOS&Android doesn't work on UWP despite of UWP heavily based from XAML!?
public ICommand DeleteEintragCommand
        return new Command((e) =>
                var item = (e as MyModelObject);
                // delete logic on item
Why are codes like this being upvoted in SO
I'mma play dotka now.
11:51 AM
@Hozuki It's too bad I'm locked into google products. On the other hand, Google products are great so perhaps them having a profile of me is a compromise I'm willing to make
@Hozuki That's very cool. No tablet here, so pen and paper for the time being :)
@BlackPanther a web service has an api
but you probably have a different understanding of what an api is
@BlackPanther You should watch imdb.com/title/tt11464826
@Hozuki "aggregate" as in put together the results? Of course in the results page the results from FaceBook and Twitter for example, should be clearly separated and identified.
is that a movie I am too self isolated to understand?
@Hozuki And if the user only wants to search their Twitter history and not their FaceBook history, all they have to do is not connect to FaceBook using OAuth2, right?
11:56 AM
that is a different scenario
consider they already are connected to both platforms
and then you want to only search on one platform...
do you disconnect them?
or do you, as user, just tell the website to only search on twitter?
keeping the authentication there, but just not using it at that moment
@mr5 Google charge a fee to use their APIs? Facebook's revenue from advertising is something I don't understand. Is everyone's user data equal, or are celebrities user data more lucrative for Facebook.
