|
I've never heard of Truecaller, and would never use it. I do NOT expose my contact list to anything or anyone out of respect for the vulnerability of that data, the contacts themselves, and the possibility of its misuse.
I would never trust any 3rd party security keeping that data safe on their systems.
|
|
|
|
|
Hello everyone
I don't really know how to code but i have this project to create a centralized messaging app to concentrate all the messages of my social networks (snapchat, telegram, wattsap...).
I have done some research on API or similar projects but didn't find things that could help me.
If you have any advice on what type of code i will have to learn, idea of similar questions on the forum or documentation it will help.
Thanks
|
|
|
|
|
el chupino wrote: I don't really know how to code Then you have a long way to go to bring such a project to completion. The default language for Android development is Java, so you should head over to Java Tutorials Learning Paths[^] and start reading.
|
|
|
|
|
I have a idea for a project a app, that I think could be a money maker, but even better I think could save lives and make lives better for many? Huge catch, it would require coding I do not know, and business cooperation but I think I have some contacts to begin. I thought about making it open source and no profit but I think if others want to be paid, I could not afford that, so I am working on making a nondisclosure aggreement, then cut percentages for the app? What interests developers, attracts talent? Is this enough? (looking at some months to mature maybe years) I am thinking I could dump into a nonprofit developer site then there is a hardware component I want to add at some point.
|
|
|
|
|
I don't think this would be a good idea to attract developers. There is a classical notion of getting paid for the work in terms of salary but yes of course you can get the one who will be really interested in your plan and would work by getting associated with your plan.
|
|
|
|
|
Well, I would agree with the basic notion of anyone getting paid for the work they are doing but yes these days people are really interested in doing charity work and also they want to get involved in the project which they like. Therefore you may ask your group or any big influencer who is ready for charity work as their CSR.
|
|
|
|
|
Hello *All,
in Visual Studio 2022 XAMARIN for Android i need Access to iSeries-DB2 V7.1 for select and update.
I try it with NuGet-Package IBM-Data.DB2.Core (3.1.0.500).
string sqlconn = "Datasource=AS400; default collection=LIBR; Pooling=false";
iDB2Connection sqlConnection = new iDB2Connection(sqlconn);
At runtime i get the error:
System.TypeInitializationException: 'The type initializer for 'Microsoft.Win32.Registry' threw an exception.'
Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
Warnung Konflikt zwischen der Prozessorarchitektur des Projekts "MSIL", das erstellt wird, und der Prozessorarchitektur des Verweises, "C:\Users\user\.nuget\packages\ibm.data.db2.core\3.1.0.500\lib\netstandard2.1\IBM.Data.DB2.Core.dll", "AMD64". Dieser Konflikt kann zu Laufzeitfehlern führen. Ändern Sie ggf. mithilfe des Konfigurations-Managers die als Ziel angegebene Prozessorarchitektur Ihres Projekts so, dass die Prozessorarchitekturen zwischen Ihrem Projekt und den Verweisen ausgerichtet werden, oder wählen Sie eine Abhängigkeit von Verweisen mit einer Prozessorarchitektur, die der als Ziel angegebene Prozessorarchitektur Ihres Projekts entspricht. XMARIN.Android
best Regards
|
|
|
|
|
Hi,
i need a little help.
I'm creating my custom Drawing View.
The functionality I am trying to achieve is:
Arrow icon => touch one point and drag until other point draws line-arrow
Text icon => touch in one point of screen and enter a text (open keyboard and write and close it)
Eraser icon => erase canvas drawn
These is the design of the menu I've made:
TOOLS MENU
And all interface is here:
INTERFACE
How can I edit my custom drawing view for make tools specified above? Whick portion of code will I put inside CustomDrawingView class?
Here my DrawingView class:
public class DrawingView extends View
{
private Path mDrawPath;
private Paint mBackgroundPaint;
private Paint mDrawPaint;
private Canvas mDrawCanvas;
private Bitmap mCanvasBitmap;
private ArrayList<Path> mPaths = new ArrayList<>();
private ArrayList<Paint> mPaints = new ArrayList<>();
private ArrayList<Path> mUndonePaths = new ArrayList<>();
private ArrayList<Paint> mUndonePaints = new ArrayList<>();
private int mBackgroundColor = 0x00FFFFFF;
private int mPaintColor = 0x00660000;
private int mStrokeWidth = 10;
public DrawingView(Context context, AttributeSet attrs)
{
super(context, attrs);
init();
}
private void init()
{
mDrawPath = new Path();
mBackgroundPaint = new Paint();
initPaint();
}
private void initPaint()
{
mDrawPaint = new Paint();
mDrawPaint.setColor(mPaintColor);
mDrawPaint.setAntiAlias(true);
mDrawPaint.setStrokeWidth(mStrokeWidth);
mDrawPaint.setStyle(Paint.Style.STROKE);
mDrawPaint.setStrokeJoin(Paint.Join.ROUND);
mDrawPaint.setStrokeCap(Paint.Cap.ROUND);
}
private void drawBackground(Canvas canvas)
{
mBackgroundPaint.setColor(Color.TRANSPARENT);
mBackgroundPaint.setAntiAlias(true);
mBackgroundPaint.setAlpha(0);
canvas.drawRect(0, 0, this.getWidth(), this.getHeight(), mBackgroundPaint);
}
private void drawPaths(Canvas canvas)
{
int i = 0;
for (Path p : mPaths)
{
canvas.drawPath(p, mPaints.get(i));
i++;
}
}
@Override
protected void onDraw(Canvas canvas)
{
drawBackground(canvas);
drawPaths(canvas);
canvas.drawPath(mDrawPath, mDrawPaint);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
super.onSizeChanged(w, h, oldw, oldh);
mCanvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mDrawCanvas = new Canvas(mCanvasBitmap);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
float touchX = event.getX();
float touchY = event.getY();
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
Log.d("Debug", "TOUCH EVENT: ACTION_DOWN");
mDrawPath.moveTo(touchX, touchY);
break;
case MotionEvent.ACTION_MOVE:
Log.d("Debug", "TOUCH EVENT: ACTION_DOWN");
mDrawPath.lineTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP:
Log.d("Debug", "TOUCH EVENT: ACTION_DOWN");
mDrawPath.lineTo(touchX, touchY);
mPaths.add(mDrawPath);
mPaints.add(mDrawPaint);
mDrawPath = new Path();
initPaint();
break;
default:
return false;
}
invalidate();
return true;
}
public void clearCanvas()
{
mPaths.clear();
mPaints.clear();
mUndonePaths.clear();
mUndonePaints.clear();
mDrawCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
invalidate();
}
public void startEraser()
{
Log.d("Drawingview", "StartEraser");
mDrawPaint.setXfermode(null);
mDrawPaint.setAlpha(0xFF);
mDrawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
}
public void setPaintColor(int color)
{
mPaintColor = color;
mDrawPaint.setColor(mPaintColor);
}
public void setPaintStrokeWidth(int strokeWidth)
{
mStrokeWidth = strokeWidth;
mDrawPaint.setStrokeWidth(mStrokeWidth);
}
public void setBackgroundColor(int color)
{
mBackgroundColor = color;
mBackgroundPaint.setColor(mBackgroundColor);
invalidate();
}
public Bitmap getBitmap()
{
drawBackground(mDrawCanvas);
drawPaths(mDrawCanvas);
return mCanvasBitmap;
}
public void undo()
{
if (mPaths.size() > 0)
{
mUndonePaths.add(mPaths.remove(mPaths.size() - 1));
mUndonePaints.add(mPaints.remove(mPaints.size() - 1));
invalidate();
}
}
public void redo()
{
if (mUndonePaths.size() > 0)
{
mPaths.add(mUndonePaths.remove(mUndonePaths.size() - 1));
mPaints.add(mUndonePaints.remove(mUndonePaints.size() - 1));
invalidate();
}
}
}
And this is my interface (as see in picture) class:
<pre>public class Board1 extends AppCompatActivity {
private TextView titolo;
private DrawingView areaDisegno;
private ImageView testo, freccia, sceltaColore, sceltaSpessore, undo, redo;
private Bitmap drawable;
private boolean isEnabledManoLibera = true;
private boolean isEnabledLinea = false;
private boolean isEnabledArrow = false;
public ImageButton menuButton;
private int mCurrentBackgroundColor;
private int mCurrentColor;
private int mCurrentStroke;
private static final int MAX_STROKE_WIDTH = 50;
@Override
protected void onCreate(Bundle savedInstanceState) {
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setNavigationBarColor(getResources().getColor(R.color.black));
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_board1);
menuButton = findViewById(R.id.menu_button);
menuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popup = new PopupMenu( Board1.this, menuButton);
popup.getMenuInflater()
.inflate(R.menu.menu, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
switch (item.getTitle().toString())
{
case "Match Up":
CaricaMainActivity("TabellaMatchUp");
break;
case "Match Board":
CaricaMainActivity("SceltaBoards");
break;
case "Match Book":
CaricaMainActivity("InfoBook");
break;
}
return true;
}
});
popup.show();
}
});
titolo = findViewById(R.id.titolo);
titolo.setText("MATCHUP BOARD 1");
areaDisegno = findViewById(R.id.area_disegno);
testo = findViewById(R.id.testo);
freccia = findViewById(R.id.freccia);
sceltaColore= findViewById(R.id.scelta_colore);
sceltaSpessore = findViewById(R.id.scelta_spessore);
undo = findViewById(R.id.undo);
redo = findViewById(R.id.redo);
testo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isEnabledArrow = false;
isEnabledLinea = false;
isEnabledManoLibera = false;
}
});
freccia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isEnabledArrow = true;
isEnabledLinea = false;
isEnabledManoLibera = false;
}
});
sceltaColore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startColorPickerDialog();
}
});
sceltaSpessore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startStrokeSelectorDialog();
}
});
undo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
areaDisegno.undo();
}
});
redo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
areaDisegno.redo();;
}
});
inizializzaAreaDisegno();
}
public void CaricaMainActivity(String todo)
{
Intent mainActivity = new Intent(Board1.this, MainActivity.class);
mainActivity.putExtra("todo", todo);
startActivity(mainActivity);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
private void inizializzaAreaDisegno()
{
mCurrentColor = ContextCompat.getColor(this, android.R.color.black);
mCurrentStroke = 10;
areaDisegno.setBackgroundColor(mCurrentBackgroundColor);
areaDisegno.setPaintColor(mCurrentColor);
areaDisegno.setPaintStrokeWidth(mCurrentStroke);
}
private void startColorPickerDialog()
{
int[] colors = getResources().getIntArray(R.array.palette);
String[] nomiColori = getResources().getStringArray(R.array.palette_colori);
ColorPickerDialog dialog = ColorPickerDialog.newInstance(R.string.color_picker_default_title,
colors,
mCurrentColor,
6,
ColorPickerDialog.SIZE_SMALL);
dialog.setOnColorSelectedListener(new ColorPickerSwatch.OnColorSelectedListener()
{
@Override
public void onColorSelected(int color)
{
int position = ArrayUtils.getArrayIndex(colors, color);
mCurrentColor = color;
areaDisegno.setPaintColor(mCurrentColor);
Log.d("DEBUG","Colore Scelto: " + mCurrentColor);
sceltaColore.setBackground(getDrawableByName(nomiColori[position], getApplicationContext()));
}
});
dialog.show(getFragmentManager(), "ColorPickerDialog");
}
public static Drawable getDrawableByName(String name, Context context) {
int drawableResource = context.getResources().getIdentifier(name, "drawable", context.getPackageName());
if (drawableResource == 0) {
throw new RuntimeException("Can't find drawable with name: " + name);
}
return context.getResources().getDrawable(drawableResource);
}
private void startStrokeSelectorDialog()
{
StrokeSelectorDialog dialog = StrokeSelectorDialog.newInstance(mCurrentStroke, MAX_STROKE_WIDTH);
dialog.setOnStrokeSelectedListener(new StrokeSelectorDialog.OnStrokeSelectedListener()
{
@Override
public void onStrokeSelected(int stroke)
{
mCurrentStroke = stroke;
areaDisegno.setPaintStrokeWidth(mCurrentStroke);
}
});
dialog.show(getSupportFragmentManager(), "StrokeSelectorDialog");
}
private void startShareDialog(Uri uri)
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");
intent.putExtra(android.content.Intent.EXTRA_TEXT, "");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, "Share Image"));
}
private void requestPermissionsAndSaveBitmap()
{
if (PermissionManager.checkWriteStoragePermissions(this))
{
Uri uri = FileManager.saveBitmap(this, areaDisegno.getBitmap());
startShareDialog(uri);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case PermissionManager.REQUEST_WRITE_STORAGE:
{
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
Uri uri = FileManager.saveBitmap(this, areaDisegno.getBitmap());
startShareDialog(uri);
} else
{
Toast.makeText(this, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
}
}
}
}
public static Bitmap drawableToBitmap (Drawable drawable) {
Bitmap bitmap = null;
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
if(bitmapDrawable.getBitmap() != null) {
return bitmapDrawable.getBitmap();
}
}
if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
} }
I've tried to add this method inside Drawing View class:
public void drawText(String testo)
{
mDrawPaint.setColor(Color.WHITE);
mDrawPaint.setTextSize(200);
mDrawCanvas.drawText(testo, 10, 25, mDrawPaint);
invalidate();
}
But when i call this method can't see add text...
Thanks for any help. Cris
|
|
|
|
|
My first suggestion would be to trim your code down to just the absolute minimum needed to reproduce the problem. Everything else is just extra noise getting in the way. People here don't mind helping at all, but they can't be expected to wade through a bunch of code that only you understand.
Have you tried using different colors for text and background? Have you tried drawing on the DrawingView canvas itself instead of the canvas that is created from within the onSizeChanged() method? Have you tried stepping through the code using the debugger?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
The usual answer.
Thanks.
Cris
|
|
|
|
|
I do wonder what your expectation is when posting such a request, from volunteers! You seem to expect someone to go through your entire program and basically mentor you to get what you want to achieve.
You don't post any error, there is no indication where the problem lies, just the entire code with a set of design requirements.
So you should not expect anything but the usual answer . This implies that you have posted such requests before, it seems you do not learn from the usual answer !
Never underestimate the power of human stupidity -
RAH
I'm old. I know stuff - JSOP
|
|
|
|
|
I'm having trouble uploading apps on Google Playstore, what should I do, thank you
|
|
|
|
|
You could start by explaining, in detail, what the trouble is.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
To Upload Apps on Google Playstore, you need to follow these steps:-
Step 1: Fill credentials in Google Play Developer Console.
Step 2: After getting your google account uploaded link it with your google wallet merchant account.
Step 3: Now Create an Application
Step 4: Using appropriate Keywords you need to create your App Listing.
Step 5: Next step is to upload APK or App Bundles to google play.
Step 6: This is a crucial step now where you need to do the content rating, if the content is unrated then you App will get removed from the play store.
Step 7: Now you need to assign the price to your App and decide whether you want to make your app free or paid.
Step 8: When everything is filled then you can publish your app.
|
|
|
|
|
|
Hello ,
I am facing issues to do search from a search-box. There are a couple of solutions in Java, but couldn't find the right solution in c#. Please help. I have tried the following code.
DdlStoreAddress.GetElement().Click();
TxtSearchShop.GetElement().Click();
TxtSearchShop.GetElement().SendKeys(stroreID);
//TxtSearchShop.GetElement().Click();
//AppiumDriverContext.Driver.PressKeyCode(AndroidKeyCode.Keycode_SEARCH);
//AppiumDriverContext.Driver.HideKeyboard();
//new Actions(AppiumDriverContext.Driver).KeyDown(OpenQA.Selenium.Keys.Enter).Perform();
//Thread.Sleep(TimeSpan.FromSeconds(1));
//new Actions(AppiumDriverContext.Driver).KeyUp(OpenQA.Selenium.Keys.Enter).Perform();
//AppiumDriverContext.Driver.Keyboard.PressKey(("{ENTER}");
//AppiumDriverContext.Driver.Keyboard.SendKeys(84);
AppiumDriverContext.Driver.PressKeyCode(84);
//System.Threading.Thread.Sleep(500);
//AppiumDriverContext.Driver.HideKeyboard();
//BtnSearchShop.GetElement().Click();
Thread.Sleep(10000);
//Thread.Sleep(2000);
//AppiumDriverContext.Driver.PressKeyCode(AndroidKeyCode.Keycode_SEARCH);
//Thread.Sleep(2000);
//AppiumDriverContext.Driver.PressKeyCode(AndroidKeyCode.KeycodeNumpad_ENTER);
//Thread.Sleep(5000);
//driver.ExecuteScript("mobile:scroll", new Dictionary<string, string=""> { { "direction", "down" } });
//BtnSearchShop.GetElement().Click();
//TxtSearchShop.GetElement().SendKeys(AndroidKeyCode.Enter);
//AppiumDriverContext.Driver.LongPressKeyCode(66);
//AppiumDriverContext.Driver.HideKeyboard();
The following is my capabilities.
caps.AddAdditionalCapability("browserstack.user", MobileBaseConfiguration.BrowserStackUser);
caps.AddAdditionalCapability("browserstack.key", MobileBaseConfiguration.BrowserStackKey);
caps.AddAdditionalCapability("app", MobileBaseConfiguration.AppUrl);
caps.AddAdditionalCapability("device", MobileBaseConfiguration.Device);
caps.AddAdditionalCapability("os_version", MobileBaseConfiguration.OSVersion);
caps.PlatformName = MobileBaseConfiguration.PlatformName.ToString();
caps.AddAdditionalCapability("project", MobileBaseConfiguration.Project);
caps.AddAdditionalCapability("build", MobileBaseConfiguration.Build);
caps.AddAdditionalCapability("name", MobileBaseConfiguration.Name);
//caps.AddAdditionalCapability("unicodeKeyboard", "true");
caps.AddAdditionalCapability("autoGrantPermissions", "true");
caps.AddAdditionalCapability("nativeWebTap", "true");
modified 3-Feb-22 4:09am.
|
|
|
|
|
You seem to have forgotten to ask a question; "not working" is nowhere near enough information for anyone to help you.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
android studio code in java to do biblle app
|
|
|
|
|
You seem to have mistaken this site for Google. To search for samples, go to Google[^], or your preferred search engine, and type your search terms into the big box in the middle of the page.
If you actually intended to ask a question, then you need to actually ask a question. You need to describe precisely what you are trying to do, what you have tried, and where you are stuck. Include the relevant parts of your code, and the full details of any errors.
And if you were expecting someone to do your work for you, you've come to the wrong site. There are plenty of sites where you can hire a developer to write code for you; this isn't one of them.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I have updated my Android Studio to the Artic Fox Version. After that neither the projects with old Gradle versions running nor the new projects with latest Gradle versions running. Only the following errors appears: Could not install Gradle distribution from 'https: //services.gradle.org/distributions/gradle-7.0.2-bin.zip'
After this error I manually downloaded the Gradle 7.0.2, extracted it and Set it as Gradle path in Android Studio > File>Settings>Gradle and choose the option "Use Gradle from Specified Location". But all in vain. Only I can see the following message, when I try to Sync project with Gradle.
"The system cannot find the path specified." I have been searching this problem for two days on internet, but nothing worked out for me.
Current Path where I have downloaded and extracted the Gradle Distribution is follows F:/Android Gradle/gradle-7.0.2
What mistake I am making?
|
|
|
|
|
I'm confused about navigation in Xamarin Forms using INavigation.
What I'd like is to be able to show any page I want from anywhere, any time.
From what I can see about using INavigation, when you call PushAsync you are basically opening a new page ON TOP of an existing one. And when you call PopAsync, you remove the top-most page.
This is fine if you have a linear approach to your pages, as in Page1 -> Page2 -> Page3 then Page3 <- Page2 <- Page1, and so on...
But what if I want to open some page without PushAsync and PopAsync?
I've seen some Google results that seem to take a lot of code to make this work. One SO post suggests using a 3rd party library like FreshMvvm", ir passing a reference to INavigation from one VM to another. ANd, if you choose this route, where does it start from???
Can someone shed some light o this?
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
How Much Does It Cost for E-Wallet App Development with Custom Features?
|
|
|
|
|
It doesn't quite work like that - this is not a "code to order" site.
I suggest you go to Freelancer.com and ask there.
But be aware: you get what you pay for. Pay peanuts, get monkeys.
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Don't worry - I suspect one of his friends will be along soon with a convenient link to his app development company to answer this thread.
(I may be wrong, but this smells strongly of "spam setup" to me.)
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
A strong odour of pink meat is with this one, indeed.
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|