text:
<?php
/**
 * @file include/enotify.php
 *
 * @brief File with functions and a class for email notifications.
 */

/**
 * @brief
 *
 * @param array $params an assoziative array with:
 *  * \e string \b from_xchan sender xchan hash
 *  * \e string \b to_xchan recipient xchan hash
 *  * \e array \b item an assoziative array
 *  * \e int \b type one of the NOTIFY_* constants from boot.php
 *  * \e string \b link
 *  * \e string \b parent_mid
 *  * \e string \b otype
 *  * \e string \b verb
 *  * \e string \b activity
 */
function notification($params) {

	logger('notification: entry', LOGGER_DEBUG);

	// throw a small amount of entropy into the system to breakup duplicates arriving at the same precise instant.
	usleep(mt_rand(0, 10000));

	$a = get_app();

	if ($params['from_xchan']) {
		$x = q("select * from xchan where xchan_hash = '%s' limit 1",
			dbesc($params['from_xchan'])
		);
	}
	if ($params['to_xchan']) {
		$y = q("select channel.*, account.* from channel left join account on channel_account_id = account_id
			where channel_hash = '%s' and channel_removed = 0 limit 1",
			dbesc($params['to_xchan'])
		);
	}
	if ($x & $y) {
		$sender = $x[0];
		$recip = $y[0];
	} else {
		logger('notification: no sender or recipient.');
		logger('sender: ' . $params['from_xchan']);
		logger('recip: ' . $params['to_xchan']);
		return;
	}

	// from here on everything is in the recipients language

	push_lang($recip['account_language']); // should probably have a channel language

	$banner     = t('$Projectname Notification');
	$product    = t('$projectname'); // PLATFORM_NAME;
	$siteurl    = $a->get_baseurl(true);
	$thanks     = t('Thank You,');
	$sitename   = get_config('system','sitename');
	$site_admin = sprintf( t('%s Administrator'), $sitename);

	$sender_name = $product;
	$hostname = $a->get_hostname();
	if(strpos($hostname,':'))
		$hostname = substr($hostname,0,strpos($hostname,':'));

	// Do not translate 'noreply' as it must be a legal 7-bit email address
	$sender_email = 'noreply' . '@' . $hostname;

	$additional_mail_header = "";

	if (array_key_exists('item', $params)) {
		require_once('include/conversation.php');
		// if it's a normal item...
		if (array_key_exists('verb', $params['item'])) {
			// localize_item() alters the original item so make a copy first
			$i = $params['item'];
			logger('calling localize');
			localize_item($i);
			$title = $i['title'];
			$body = $i['body'];
			$private = (($i['item_private']) || intval($i['item_obscured']));
		}
		else {
			$title = $params['item']['title'];
			$body = $params['item']['body'];
		}
	} else {
		$title = $body = '';
	}

	// e.g. "your post", "David's photo", etc.
	$possess_desc = t('%s <!item_type!>');

	if ($params['type'] == NOTIFY_MAIL) {
		logger('notification: mail');
		$subject = 	sprintf( t('[Red:Notify] New mail received at %s'),$sitename);

		$preamble = sprintf( t('%1$s, %2$s sent you a new private message at %3$s.'),$recip['channel_name'], $sender['xchan_name'],$sitename);
		$epreamble = sprintf( t('%1$s sent you %2$s.'),'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]', '[zrl=$itemlink]' . t('a private message') . '[/zrl]');
		$sitelink = t('Please visit %s to view and/or reply to your private messages.');
		$tsitelink = sprintf( $sitelink, $siteurl . '/mail/' . $params['item']['id'] );
		$hsitelink = sprintf( $sitelink, '' . $sitename . '');
		$itemlink = $siteurl . '/mail/' . $params['item']['id'];
	}

	if ($params['type'] == NOTIFY_COMMENT) {
//		logger("notification: params = " . print_r($params, true), LOGGER_DEBUG);

		$itemlink =  $params['link'];

		// ignore like/unlike activity on posts - they probably require a sepearate notification preference

		if (array_key_exists('item',$params) && (! visible_activity($params['item'])))
			return;

		$parent_mid = $params['parent_mid'];

		// Check to see if there was already a notify for this post.
		// If so don't create a second notification

		$p = null;
		$p = q("select id from notify where link = '%s' and uid = %d limit 1",
			dbesc($params['link']),
			intval($recip['channel_id'])
		);
		if ($p) {
			logger('notification: comment already notified');
			pop_lang();
			return;
		}

		// if it's a post figure out who's post it is.

		$p = null;

		if($params['otype'] === 'item' && $parent_mid) {
			$p = q("select * from item where mid = '%s' and uid = %d limit 1",
				dbesc($parent_mid),
				intval($recip['channel_id'])
			);
		}

		xchan_query($p);

		$item_post_type = item_post_type($p[0]);
//		$private = $p[0]['item_private'];
		$parent_id = $p[0]['id'];

		//$possess_desc = str_replace('<!item_type!>',$possess_desc);

		// "a post"
		$dest_str = sprintf(t('%1$s, %2$s commented on [zrl=%3$s]a %4$s[/zrl]'),
			$recip['channel_name'],
			'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
			$itemlink,
			$item_post_type);

		// "George Bull's post"
		if($p)
			$dest_str = sprintf(t('%1$s, %2$s commented on [zrl=%3$s]%4$s\'s %5$s[/zrl]'),
				$recip['channel_name'],
				'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
				$itemlink,
				$p[0]['author']['xchan_name'],
				$item_post_type);

		// "your post"
		if($p[0]['owner']['xchan_name'] == $p[0]['author']['xchan_name'] && intval($p[0]['item_wall']))
			$dest_str = sprintf(t('%1$s, %2$s commented on [zrl=%3$s]your %4$s[/zrl]'),
				$recip['channel_name'],
				'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
				$itemlink,
				$item_post_type);

		// Some mail softwares relies on subject field for threading.
		// So, we cannot have different subjects for notifications of the same thread.
		// Before this we have the name of the replier on the subject rendering
		// differents subjects for messages on the same thread.

		$subject = sprintf( t('[Red:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $sender['xchan_name']);
		$preamble = sprintf( t('%1$s, %2$s commented on an item/conversation you have been following.'), $recip['channel_name'], $sender['xchan_name']);
		$epreamble = $dest_str;

		$sitelink = t('Please visit %s to view and/or reply to the conversation.');
		$tsitelink = sprintf( $sitelink, $siteurl );
		$hsitelink = sprintf( $sitelink, '' . $sitename . '');
	}

	if($params['type'] == NOTIFY_WALL) {
		$subject = sprintf( t('[Red:Notify] %s posted to your profile wall') , $sender['xchan_name']);

		$preamble = sprintf( t('%1$s, %2$s posted to your profile wall at %3$s') , $recip['channel_name'], $sender['xchan_name'], $sitename);

		$epreamble = sprintf( t('%1$s, %2$s posted to [zrl=%3$s]your wall[/zrl]') ,
			$recip['channel_name'],
			'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
			$params['link']);

		$sitelink = t('Please visit %s to view and/or reply to the conversation.');
		$tsitelink = sprintf( $sitelink, $siteurl );
		$hsitelink = sprintf( $sitelink, '' . $sitename . '');
		$itemlink =  $params['link'];
	}

	if ($params['type'] == NOTIFY_TAGSELF) {

		$p = null;
		$p = q("select id from notify where link = '%s' and uid = %d limit 1",
			dbesc($params['link']),
			intval($recip['channel_id'])
		);
		if ($p) {
			logger('enotify: tag: already notified about this post');
			pop_lang();
			return;
		}

		$subject =	sprintf( t('[Red:Notify] %s tagged you') , $sender['xchan_name']);
		$preamble = sprintf( t('%1$s, %2$s tagged you at %3$s') , $recip['channel_name'], $sender['xchan_name'], $sitename);
		$epreamble = sprintf( t('%1$s, %2$s [zrl=%3$s]tagged you[/zrl].') ,
			$recip['channel_name'],
			'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
			$params['link']);

		$sitelink = t('Please visit %s to view and/or reply to the conversation.');
		$tsitelink = sprintf( $sitelink, $siteurl );
		$hsitelink = sprintf( $sitelink, '' . $sitename . '');
		$itemlink =  $params['link'];
	}

	if ($params['type'] == NOTIFY_POKE) {
		$subject =	sprintf( t('[Red:Notify] %1$s poked you') , $sender['xchan_name']);
		$preamble = sprintf( t('%1$s, %2$s poked you at %3$s') , $recip['channel_name'], $sender['xchan_name'], $sitename);
		$epreamble = sprintf( t('%1$s, %2$s [zrl=%2$s]poked you[/zrl].') ,
			$recip['channel_name'],
			'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
			$params['link']);

		$subject = str_replace('poked', t($params['activity']), $subject);
		$preamble = str_replace('poked', t($params['activity']), $preamble);
		$epreamble = str_replace('poked', t($params['activity']), $epreamble);

		$sitelink = t('Please visit %s to view and/or reply to the conversation.');
		$tsitelink = sprintf( $sitelink, $siteurl );
		$hsitelink = sprintf( $sitelink, '' . $sitename . '');
		$itemlink =  $params['link'];
	}

	if ($params['type'] == NOTIFY_TAGSHARE) {
		$subject =	sprintf( t('[Red:Notify] %s tagged your post') , $sender['xchan_name']);
		$preamble = sprintf( t('%1$s, %2$s tagged your post at %3$s') , $recip['channel_name'],$sender['xchan_name'], $sitename);
		$epreamble = sprintf( t('%1$s, %2$s tagged [zrl=%3$s]your post[/zrl]') ,
			$recip['channel_name'],
			'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]',
			$itemlink);

		$sitelink = t('Please visit %s to view and/or reply to the conversation.');
		$tsitelink = sprintf( $sitelink, $siteurl );
		$hsitelink = sprintf( $sitelink, '' . $sitename . '');
		$itemlink =  $params['link'];
	}

	if ($params['type'] == NOTIFY_INTRO) {
		$subject = sprintf( t('[Red:Notify] Introduction received'));
		$preamble = sprintf( t('%1$s, you\'ve received an new connection request from \'%2$s\' at %3$s'), $recip['channel_name'], $sender['xchan_name'], $sitename);
		$epreamble = sprintf( t('%1$s, you\'ve received [zrl=%2$s]a new connection request[/zrl] from %3$s.'),
			$recip['channel_name'],
			$itemlink,
			'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]');
		$body = sprintf( t('You may visit their profile at %s'),$sender['xchan_url']);

		$sitelink = t('Please visit %s to approve or reject the connection request.');
		$tsitelink = sprintf( $sitelink, $siteurl );
		$hsitelink = sprintf( $sitelink, '' . $sitename . '');
		$itemlink =  $params['link'];
	}

	if ($params['type'] == NOTIFY_SUGGEST) {
		$subject = sprintf( t('[Red:Notify] Friend suggestion received'));
		$preamble = sprintf( t('%1$s, you\'ve received a friend suggestion from \'%2$s\' at %3$s'), $recip['channel_name'], $sender['xchan_name'], $sitename);
		$epreamble = sprintf( t('%1$s, you\'ve received [zrl=%2$s]a friend suggestion[/zrl] for %3$s from %4$s.'),
			$recip['channel_name'],
			$itemlink,
			'[zrl=' . $params['item']['url'] . ']' . $params['item']['name'] . '[/zrl]',
			'[zrl=' . $sender['xchan_url'] . ']' . $sender['xchan_name'] . '[/zrl]');

		$body = t('Name:') . ' ' . $params['item']['name'] . "\n";
		$body .= t('Photo:') . ' ' . $params['item']['photo'] . "\n";
		$body .= sprintf( t('You may visit their profile at %s'),$params['item']['url']);

		$sitelink = t('Please visit %s to approve or reject the suggestion.');
		$tsitelink = sprintf( $sitelink, $siteurl );
		$hsitelink = sprintf( $sitelink, '' . $sitename . '');
		$itemlink =  $params['link'];
	}

	if ($params['type'] == NOTIFY_CONFIRM) {
		// ?
	}

	if ($params['type'] == NOTIFY_SYSTEM) {
		// ?
	}

	$h = array(
		'params'    => $params,
		'subject'   => $subject,
		'preamble'  => $preamble,
		'epreamble' => $epreamble,
		'body'      => $body,
		'sitelink'  => $sitelink,
		'tsitelink' => $tsitelink,
		'hsitelink' => $hsitelink,
		'itemlink'  => $itemlink
	);

	call_hooks('enotify', $h);

	$subject   = $h['subject'];
	$preamble  = $h['preamble'];
	$epreamble = $h['epreamble'];
	$body      = $h['body'];
	$sitelink  = $h['sitelink'];
	$tsitelink = $h['tsitelink'];
	$hsitelink = $h['hsitelink'];
	$itemlink  = $h['itemlink'];

	require_once('include/html2bbcode.php');

	do {
		$dups = false;
		$hash = random_string();
		$r = q("SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1",
			dbesc($hash));
		if (count($r))
			$dups = true;
	} while ($dups === true);

	$datarray = array();
	$datarray['hash']   = $hash;
	$datarray['sender_hash'] = $sender['xchan_hash'];
	$datarray['name']   = $sender['xchan_name'];
	$datarray['url']    = $sender['xchan_url'];
	$datarray['photo']  = $sender['xchan_photo_s'];
	$datarray['date']   = datetime_convert();
	$datarray['aid']    = $recip['channel_account_id'];
	$datarray['uid']    = $recip['channel_id'];
	$datarray['link']   = $itemlink;
	$datarray['parent'] = $parent_mid;
	$datarray['type']   = $params['type'];
	$datarray['verb']   = $params['verb'];
	$datarray['otype']  = $params['otype'];
 	$datarray['abort']  = false;

	$datarray['item'] = $params['item'];

	call_hooks('enotify_store', $datarray);

	if ($datarray['abort']) {
		pop_lang();
		return;
	}

	// create notification entry in DB
	$seen = 0;

	// Mark some notifications as seen right away
	// Note! The notification have to be created, because they are used to send emails
	// So easiest solution to hide them from Notices is to mark them as seen right away.
	// Another option would be to not add them to the DB, and change how emails are handled (probably would be better that way)
	$always_show_in_notices = get_pconfig($recip['channel_id'],'system','always_show_in_notices');
	if (!$always_show_in_notices) {
		if (($params['type'] == NOTIFY_WALL) || ($params['type'] == NOTIFY_MAIL) || ($params['type'] == NOTIFY_INTRO)) {
			$seen = 1;
		}
	}

	$r = q("insert into notify (hash,name,url,photo,date,aid,uid,link,parent,seen,type,verb,otype)
		values('%s','%s','%s','%s','%s',%d,%d,'%s','%s',%d,%d,'%s','%s')",
		dbesc($datarray['hash']),
		dbesc($datarray['name']),
		dbesc($datarray['url']),
		dbesc($datarray['photo']),
		dbesc($datarray['date']),
		intval($datarray['aid']),
		intval($datarray['uid']),
		dbesc($datarray['link']),
		dbesc($datarray['parent']),
		intval($seen),
		intval($datarray['type']),
		dbesc($datarray['verb']),
		dbesc($datarray['otype'])
	);

	$r = q("select id from notify where hash = '%s' and uid = %d limit 1",
		dbesc($hash),
		intval($recip['channel_id'])
	);
	if ($r) {
		$notify_id = $r[0]['id'];
	} else {
		logger('notification not found.');
		pop_lang();
		return;
	}

	$itemlink = $a->get_baseurl() . '/notify/view/' . $notify_id;
	$msg = str_replace('$itemlink',$itemlink,$epreamble);

	// wretched hack, but we don't want to duplicate all the preamble variations and we also don't want to screw up a translation

	if (($a->language === 'en' || (! $a->language)) && strpos($msg,', '))
		$msg = substr($msg,strpos($msg,', ')+1);

	$r = q("update notify set msg = '%s' where id = %d and uid = %d",
		dbesc($msg),
		intval($notify_id),
		intval($datarray['uid'])
	);

	// send email notification if notification preferences permit

	require_once('bbcode.php');
	if ((intval($recip['channel_notifyflags']) & intval($params['type'])) || $params['type'] == NOTIFY_SYSTEM) {

		logger('notification: sending notification email');

		$hn = get_pconfig($recip['channel_id'],'system','email_notify_host');
		if($hn && (! stristr(get_app()->get_hostname(),$hn))) {
			// this isn't the email notification host
			pop_lang();
			return;
		}

		$textversion = strip_tags(html_entity_decode(bbcode(stripslashes(str_replace(array("\\r", "\\n"), array( "", "\n"), $body))),ENT_QUOTES,'UTF-8'));

		$htmlversion = bbcode(stripslashes(str_replace(array("\\r","\\n"), array("","
\n"),$body)));

		// use $_SESSION['zid_override'] to force zid() to use
		// the recipient address instead of the current observer

		$_SESSION['zid_override'] = $recip['channel_address'] . '@' . get_app()->get_hostname();
		$_SESSION['zrl_override'] = z_root() . '/channel/' . $recip['channel_address'];

		$textversion = zidify_links($textversion);
		$htmlversion = zidify_links($htmlversion);

		// unset when done to revert to normal behaviour

		unset($_SESSION['zid_override']);
		unset($_SESSION['zrl_override']);

		$datarray = array();
		$datarray['banner']       = $banner;
		$datarray['product']      = $product;
		$datarray['preamble']     = $preamble;
		$datarray['sitename']     = $sitename;
		$datarray['siteurl']      = $siteurl;
		$datarray['type']         = $params['type'];
		$datarray['parent']       = $params['parent_mid'];
		$datarray['source_name']  = $sender['xchan_name'];
		$datarray['source_link']  = $sender['xchan_url'];
		$datarray['source_photo'] = $sender['xchan_photo_s'];
		$datarray['uid']          = $recip['channel_id'];
		$datarray['username']     = $recip['channel_name'];
		$datarray['hsitelink']    = $hsitelink;
		$datarray['tsitelink']    = $tsitelink;
		$datarray['hitemlink']    = '' . $itemlink . '';
		$datarray['titemlink']    = $itemlink;
		$datarray['thanks']       = $thanks;
		$datarray['site_admin']   = $site_admin;
		$datarray['title']        = stripslashes($title);
		$datarray['htmlversion']  = $htmlversion;
		$datarray['textversion']  = $textversion;
		$datarray['subject']      = $subject;
		$datarray['headers']      = $additional_mail_header;
		$datarray['email_secure'] = false;

		call_hooks('enotify_mail', $datarray);

		// Default to private - don't disclose message contents over insecure channels (such as email)
		// Might be interesting to use GPG,PGP,S/MIME encryption instead
		// but we'll save that for a clever plugin developer to implement

		$private_activity = false;

		if (! $datarray['email_secure']) {
			switch ($params['type']) {
				case NOTIFY_WALL:
				case NOTIFY_TAGSELF:
				case NOTIFY_POKE:
				case NOTIFY_COMMENT:
					if (! $private)
						break;
					$private_activity = true;
				case NOTIFY_MAIL:
					$datarray['textversion'] = $datarray['htmlversion'] = $datarray['title'] = '';
					$datarray['subject'] = preg_replace('/' . preg_quote(t('[Red:Notify]')) . '/','$0*',$datarray['subject']);
					break;
				default:
					break;
			}
		}

		if ($private_activity
			&& intval(get_pconfig($datarray['uid'], 'system', 'ignore_private_notifications'))) {

			pop_lang();
			return;
		}

		// load the template for private message notifications
		$tpl = get_markup_template('email_notify_html.tpl');
		$email_html_body = replace_macros($tpl,array(
			'$banner'       => $datarray['banner'],
			'$product'      => $datarray['product'],
			'$preamble'     => $datarray['preamble'],
			'$sitename'     => $datarray['sitename'],
			'$siteurl'      => $datarray['siteurl'],
			'$source_name'  => $datarray['source_name'],
			'$source_link'  => $datarray['source_link'],
			'$source_photo' => $datarray['source_photo'],
			'$username'     => $datarray['to_name'],
			'$hsitelink'    => $datarray['hsitelink'],
			'$hitemlink'    => $datarray['hitemlink'],
			'$thanks'       => $datarray['thanks'],
			'$site_admin'   => $datarray['site_admin'],
			'$title'        => $datarray['title'],
			'$htmlversion'  => $datarray['htmlversion'],
		));

		// load the template for private message notifications
		$tpl = get_markup_template('email_notify_text.tpl');
		$email_text_body = replace_macros($tpl, array(
			'$banner'       => $datarray['banner'],
			'$product'      => $datarray['product'],
			'$preamble'     => $datarray['preamble'],
			'$sitename'     => $datarray['sitename'],
			'$siteurl'      => $datarray['siteurl'],
			'$source_name'  => $datarray['source_name'],
			'$source_link'  => $datarray['source_link'],
			'$source_photo' => $datarray['source_photo'],
			'$username'     => $datarray['to_name'],
			'$tsitelink'    => $datarray['tsitelink'],
			'$titemlink'    => $datarray['titemlink'],
			'$thanks'       => $datarray['thanks'],
			'$site_admin'   => $datarray['site_admin'],
			'$title'        => $datarray['title'],
			'$textversion'  => $datarray['textversion'],
		));

//		logger('text: ' . $email_text_body);

		// use the EmailNotification library to send the message

		enotify::send(array(
			'fromName'             => $sender_name,
			'fromEmail'            => $sender_email,
			'replyTo'              => $sender_email,
			'toEmail'              => $recip['account_email'],
			'messageSubject'       => $datarray['subject'],
			'htmlVersion'          => $email_html_body,
			'textVersion'          => $email_text_body,
			'additionalMailHeader' => $datarray['headers'],
		));
	}

	pop_lang();

}

/**
 * @brief A class for sending email notifications.
 *
 * @fixme Class names start mostly with capital letter to distinguish them easier.
 */
class enotify {
	/**
	 * @brief Send a multipart/alternative message with Text and HTML versions.
	 *
	 * @param array $params an assoziative array with:
	 *  * \e string \b fromName        name of the sender
	 *  * \e string \b fromEmail       email of the sender
	 *  * \e string \b replyTo         replyTo address to direct responses
	 *  * \e string \b toEmail         destination email address
	 *  * \e string \b messageSubject  subject of the message
	 *  * \e string \b htmlVersion     html version of the message
	 *  * \e string \b textVersion     text only version of the message
	 *  * \e string \b additionalMailHeader  additions to the smtp mail header
	 */
	static public function send($params) {

		$fromName = email_header_encode(html_entity_decode($params['fromName'],ENT_QUOTES,'UTF-8'),'UTF-8');
		$messageSubject = email_header_encode(html_entity_decode($params['messageSubject'],ENT_QUOTES,'UTF-8'),'UTF-8');

		// generate a mime boundary
		$mimeBoundary = rand(0, 9) . "-"
				.rand(10000000000, 9999999999) . "-"
				.rand(10000000000, 9999999999) . "=:"
				.rand(10000, 99999);

		// generate a multipart/alternative message header
		$messageHeader =
			$params['additionalMailHeader'] .
			"From: $fromName <{$params['fromEmail']}>\n" .
			"Reply-To: $fromName <{$params['replyTo']}>\n" .
			"MIME-Version: 1.0\n" .
			"Content-Type: multipart/alternative; boundary=\"{$mimeBoundary}\"";

		// assemble the final multipart message body with the text and html types included
		$textBody = chunk_split(base64_encode($params['textVersion']));
		$htmlBody = chunk_split(base64_encode($params['htmlVersion']));

		$multipartMessageBody =
			"--" . $mimeBoundary . "\n" .					// plain text section
			"Content-Type: text/plain; charset=UTF-8\n" .
			"Content-Transfer-Encoding: base64\n\n" .
			$textBody . "\n" .
			"--" . $mimeBoundary . "\n" .					// text/html section
			"Content-Type: text/html; charset=UTF-8\n" .
			"Content-Transfer-Encoding: base64\n\n" .
			$htmlBody . "\n" .
			"--" . $mimeBoundary . "--\n";					// message ending

		// send the message
		$res = mail(
			$params['toEmail'],								// send to address
			$messageSubject,								// subject
			$multipartMessageBody,							// message body
			$messageHeader									// message headers
		);
		logger("notification: enotify::send returns " . $res, LOGGER_DEBUG);
	}
}

redpajama_set_name: RedPajamaGithub


Have you heard of the Teutavar Saga: Out of Exile yet? If not, you might want to check it out. Derrek Siddoway is a young man who graduated from the University of Utah. Out of Exile has been in the works for the last 10 years.
The Teutevar Saga (pronounced two-teh-var) is slated to be a five-book series. The first installment, Out of Exile, was released in November 2013. Book Two (currently untitled) is scheduled to be released near the end of 2014. While the saga's main storyline follows Ravyn Teutevar on a quest to rebuild his extinct homeland, readers will journey alongside numerous characters in an ever-increasing world of chaos and warring factions — the continent of Peldrin. A blend of traditional fantasy, mythology, American folklore and American Westerns, the Teutevar Saga is an epic tale you won't find anywhere else.
To learn more about Out of Exile, visit his website. Even better, for only $2.99, you can read Siddoway's book! You can also read his short story, Valiant, for free.


Ilala Lodge is the closest property to the Victoria Falls and is the perfect platform from which to explore the area.
The lodge offers 32 Standard Rooms and 2 Deluxe Suites. All standard rooms have 2 large beds in a spacious room decorated by railway teak. Each room has an en suite bathroom with complimentary soaps, shampoos and conditioners. The bathroom has separate bath, shower and toilet. All rooms have air conditioning and there are French doors that open up to a communal garden. Bottled water is provided in each of the rooms as well as a kettle for the tea and coffee provided. The Deluxe Suites have all the same amenities as well as king size bed, larger floor space and private balconies.
The Victoria Falls, being on the mighty Zambezi River, offers visitors an extensive range of activities including white river rafting, bungee jumping, fishing, swimming, guided walks, skydiving, game drives, river boarding, walks with lions, hot air balloons, sun downer cruises on the Zambezi, scuba diving, kayaking and abseiling.


text:
Mariam Arçrouni ou Maria de Vaspourakan est une fille de Sénéqérim-Hovhannès, roi de Vaspourakan, et de Kouschkousch Bagratouni, et la première femme de Georges , roi de Géorgie. En tant que reine-mère, elle a été régente de Géorgie de 1027 à 1037 au nom de son fils Bagrat IV et impliquée dans la diplomatie avec l'empire byzantin. Sa dynastie sont les Arçrouni, remontant aux Orontides, devenue l'une des plus prestigieuses dynasties arméniennes au fil des siècles.

Biographie
Elle est la première épouse du roi Georges  (1014-1027), mais semble avoir été répudiée pour que ce dernier puisse épouser Alda, fille du roi d'Alanie. Maria retrouve son importance après la mort de son mari et l'accession au trône de son fils Bagrat IV en 1027. Pendant la minorité de Bagrat, elle partage la régence avec les grands du royaume et particulièrement avec les ducs Liparit III Orbeliani et Ivane Abazasdze. Vers 1031-32, Mariam se rendit à Constantinople pour négocier avec le nouveau Basileus Romain III Argyre et revient avec un traité de paix, la dignité de curopalate et la main d'Hélène Argyre, nièce de Romain III, pour son fils.

Mariam continue de jouer un rôle éminent dans la politique de la Géorgie, même après la majorité de Bagrat. Les chroniques géorgiennes parlent d'Arméniens qui deviennent ses sujets en raison de son lignage, évènement qui est peut-être une allusion au contrôle d'Ani par les Géorgiens avant qu'elle ne soit finalement annexée par les Byzantins en 1045. Elles mentionnent également un différend entre Bagrat et sa mère à propos de l'avenir de Démétrius, demi-frère consanguin de Bagrat, qui trahit son frère en 1033 en livrant la forteresse d'Anacopia aux Byzantins. Mariam plaida pour la réconciliation entre les deux frères et tenta vainement de faire revenir le rebelle à une conduite loyale. Durant l'exil forcé de Bagrat à Byzance, Mariam l'accompagna et passa trois ans à la cour de l'empereur Constantin IX Monomaque.

Mariam s'est distinguée par ses dons à l'église et aux fondations monastiques, notamment à celui d'Iviron (Mont Athos). Ce monastère est connu pour sa correspondance avec l'éminent moine et érudit géorgien George l'Hagiorite sous les auspices duquel Mariam allait devenir religieuse. Selon la Vie de George l'Hagiorite, après le mariage de sa petite-fille Marie avec Michel VII Doukas (1065), Mariam se rend à Antioche, dans le but d'effectuer le pèlerinage à Jérusalem, emportant avec elle des messages pour le gouverneur et le patriarche d'Antioche. Ceux-ci dissuadèrent la reine de traverser les terres sarrasines qui tenaient Jerusalem.

La mort de Mariam n'est pas mentionnée dans les chroniques, on sait qu'elle était présente à la mort de Bagrat IV, en 1072. Elle est certainement morte en 1103, comme indiqué dans les registres de l'église géorgienne à Ruis [i] Urbnisi.

Notes et références

Bibliographie
 .

Reine consort de Géorgie
Arçrouni
Histoire de la Géorgie
Date de naissance non renseignée (XIe siècle)
Date de décès non renseignée (XIIe siècle)
Personnalité arménienne du XIe siècle
Personnalité géorgienne du XIe siècle
Reine du XIe siècle
Régent du XIe siècle

redpajama_set_name: RedPajamaWikipedia


text:
Arthur P Tugade, Secretary of Transportation: Interview
PhilippinesTransport
Interview: Arthur P Tugade
At what stages are the 75 infrastructure projects outlined in the Build, Build, Build (BBB) programme?
ARTHUR P TUGADE: Under the current administration, we are confident that the Department of Transportation (DOTr) is able to ensure smooth project implementation, despite delays in the past. Multiple BBB projects, including the new terminal in Mactan-Cebu International Airport and the Parañaque Integrated Terminal Exchange, were inaugurated in 2018. There are also many key projects in various implementation stages, such as the Metro Manila Subway Project; the Tutuban-Malolos line of the Philippine National Railways (PNR); and the Malolos-Clark line of the PNR.
In what ways does official development assistance (ODA) affect the execution of BBB projects?
TUGADE: The DOTr has recently favoured a hybrid financing structure in implementing big-ticket projects: public funds – made available by ODA or the General Appropriations Act – are utilised for construction, while the private sector is tasked with operation and maintenance. For big-ticket projects, concessional loans and grants through ODA are used due to their softer financing conditions, including lower interest rates and longer payment terms. ODA has also allowed the country to tap foreign experts for knowledge transfer, aiding Filipino contractors and consultants in terms of new methods and technologies.
Which projects can help to decentralise growth?
TUGADE: The current priority is to increase connectivity by building a true multi-modal transport network. International airports have been improved and expanded, while there have been continuous efforts to upgrade local airports for night-time operations and to make air travel more accessible. There are also ongoing projects to expand and upgrade various seaports, which will also benefit freight operations. Lastly, various rail lines are in the pipeline, and there is an evaluation under way of the potential for additional lines to efficiently connect urban centres with adjacent provinces. The ultimate goal of these projects is to decongest our cities and spur development throughout the Philippines.
How can regulatory reform support domestic transportation network companies (TNCs)?
TUGADE: Department Order No. 2018-013 recognises the role played by TNCs and transport network vehicle services (TNVS) in the provision of alternative public transportation. As such, the DOTr has given full authority to the Land Transportation Franchising and Regulatory Board (LTFRB) to regulate TNCs to ensure the safety of commuters. Moreover, the LTFRB has been mandated to conduct hearings and consultations to explore new technology-based services for public transportation before it implements such services.
What kinds of transit initiatives can mitigate pollution and promote environmental sustainability?
TUGADE: Convincing commuters to move away from private car usage will go a long way towards decreasing emissions. With that in mind, the DOTr has spearheaded several projects to promote transit-oriented development. Projects like the Manila Light Rail Transit extension and the Metro Manila Subway will provide a greater number of mass transit options, while there are projects in the works to improve non-motorised transport infrastructure, such as greenways, bicycle and motorcycle lanes, and sidewalks.
The DOTr has implemented policies to decrease emissions. The Omnibus Franchising Guidelines under the Public Utility Vehicle (PUV) Modernisation Programme promote the use of PUVs with electric or combustion engines that comply with Euro IV emission standards. Age limits were established based on the vehicle's oldest major part, as opposed to the year of its initial registration or importation. This will better ensure vehicles' road worthiness, mitigating their environmental impact.
Arthur P Tugade
The Report: Philippines 2019
Transport & Infrastructure chapter from The Report: Philippines 2019
The Philippines makes a large-scale push to improve transport and close the infrastructure gap Next article from this chapter and report
Unsolicited proposals have become an essential part of transport and infrastructure development plans in the Philippines
The Philippines makes a large-scale push to improve transport and close the infrastructure gap
Plans under way to decongest the Philippines' primary international transport gateway
Eddie Monreal, General Manager, Manila International Airport Authority: Interview
ASEAN green and sustainable bonds provide much-needed funding for infrastructure projects
Infrastructure investment and vehicle-sharing are boosting urban mobility globally
This article is from the Transport & Infrastructure chapter of The Report: Philippines 2019. Explore other chapters from this report.
Choose a chapter from The Report: Philippines 2019
BPO & Creative Industries
Register for free Economic News Updates on Philippines
Featured Sectors in Philippines:
Philippines Energy
Philippines Industry
Philippines Construction
Philippines Agriculture
Philippines Tourism
Featured Countries in Transport:
Indonesia Transport
Oman Transport
Nigeria Transport
Mongolia Transport
South Africa Transport

redpajama_set_name: RedPajamaCommonCrawl


It's the time when we desperately try to flip pancakes in the kitchen, often with hilarious results.
But this year there's no need to make a mess, or a fool, out of yourself – just pick up an emoji frying pan instead.
The budget supermarket is selling the quirky pan for just the bargain price of just £7.99.
It features seven moulds – including smiling face, shocked face and tongue-sticking-out face.
B&M is now selling pink 'unicorn' pancake mix for £1 – all you need to add is milk and your favourite toppings.
The high-street retailer unveiled the mix on Instagram yesterday, writing: "Why not relax and make some unicorn pancakes!
The photo received nearly 5,000 likes from excited shoppers.
Why not relax and make some Unicorn pancakes🦄! Just add milk to this mixture and you'll be able to create PERFECT tasty pancakes easily - ideal to get practicing for #PancakeDay🥞! Who NEEDS to try these?!
Meanwhile Marks and Spencer have launched a GIN sauce for Shrove Tuesday.
The fancy topping - made of 4 per cent strength gin and lemon juice - will cost fans just £2 per bottle.
The treat means you can make boozy pancakes in addition to classic Nutella, honey, or lemon juice toppings.
The new product is only available in store, as it does not appear on the website yet.
It describes the juice as "tart and tangy sauce full of classic, punchy flavour".


text:
\section{Equations}

Consider inviscid flow in the 2d plane around a solid body whose boundary is smooth except for one or more corners.
This setup is an old and important problem in fluid dynamics.
The case of a single corner has received particular attention, since it idealizes cross-sections of aircraft wings;
the corresponding Kutta-Joukowsky theory is the basis for the understanding of lift, the upward force on a horizontally moving body.

To explain the problem of corners, we first recall some properties of compressible flow:
\begin{eqnarray}
  0 &=& \pt\dens + \ndiv(\dens\vv) \quad,\quad
  0 = \pt\vv + \vv\dotp\nabla\vv + \nabla\piv
  \myeqlab{eq:unsteady}
\end{eqnarray}
where $\vv$ is velocity, $\dens$ density; $\piv=\pif(\dens)$ is defined up to an additive constant by
\begin{eqnarray} \pif_\dens &=& \dens^{-1}\ppf_\dens \end{eqnarray}
where $\pp=\ppf(\dens)$ is \defm{pressure}. We consider the \defm{polytropic} pressure law
\begin{eqnarray} \pp &=& \ppf(\dens) = \dens^\isenc \end{eqnarray}
with \defm{isentropic coefficient} $\isenc>1$, so that
\begin{eqnarray} \pif(\dens) &=& \frac{\isenc}{\isenc-1} \dens^{\isenc-1}. \myeqlab{eq:pif}\end{eqnarray}

Linearizing \myeqref{eq:unsteady} around a $\vv=0$ and $\dens=\overline\dens=\const>0$ background yields
\begin{eqnarray} 0 &=& \pt\dens + \overline\dens~\ndiv\vv \csep 0 = \pt\vv + \overline\dens^{-1}\ppf_\dens(\overline\dens)\nabla\dens \end{eqnarray}
$\pt$ of the first minus $\overline\dens~\ndiv$ of the second equation yields
\begin{eqnarray} 0 &=& \pt^2\dens - \ppf_\dens(\overline\dens)\Lap\dens \end{eqnarray}
which is the linear wave equation; this motivates defining the \defm{speed of sound}
\begin{eqnarray} \ssnd &=& \sqrt{\ppf_\dens(\dens)}. \end{eqnarray}

For steady flow
\begin{eqnarray}
  0 &=& \ndiv(\dens\vv), \myeqlab{eq:masssteady} \\
  0 &=& \vv\dotp\nabla\vv + \nabla\piv,  \myeqlab{eq:vsteady}
\end{eqnarray}
the dot product of \myeqref{eq:vsteady} with $\vv$ yields
\begin{eqnarray} 0 &=& \vv\dotp\nabla\vv\dotp\vv + \vv\dotp\nabla\piv = \vv\dotp\nabla(\half\vlen\vv^2+\piv) \end{eqnarray}
Hence the \defm{Bernoulli constant}
\begin{eqnarray} \Ber &=& \half\vlen\vv^2 + \pif(\dens) \end{eqnarray}
is constant along \defm{streamlines}, i.e.\ integral curves of $\vv$; this is the \defm{Bernoulli relation}.
On each streamline we can solve for
\begin{eqnarray} \dens = \ipif(\Ber-\half\vlen\vv^2). \myeqlab{eq:dens-pifi} \end{eqnarray}
$\ipif$ is generally undefined for negative arguments
due to fractional exponents (see \myeqref{eq:pif}),
in particular when $\isenc=\frac53$ (helium and other noble gases) or $\isenc=\frac75$ (air).
Hence $|\vv|$ may not exceed the \defm{limit speed} $\vcav=\sqrt{2\Ber}$;
at the limit speed the density reaches $0$. There is no meaningful way to extend the model to higher speeds,
as becomes clear by putting the observation into a more physical form:
groups of gas particles cannot acquire arbitrarily high speed by moving to regions of increasingly lower pressure.
(A related observation: gas inside a piston expanding to near-vacuum cannot perform unbounded mechanical work,
or put differently, it takes only a finite amount of energy to compress gas from near-vacuum to a given density.
These and other observations do not hold for some other pressure laws,
which is in part why those should be considered ``exotic''.)

There are important reasons to consider flow with nonzero \defm{vorticity} $\vort=\ncurl\vv$,
which we are going to motivate by assuming \defm{irrotationality} $\vort=0$ and exploring the consequences.
Now \myeqref{eq:vsteady} can be rewritten
\begin{eqnarray} 0 &=& \nabla\vv\dotp\vv + \nabla\piv = \nabla(\half|\vv|^2+\piv) \end{eqnarray}
so that $\Ber$ and $\vcav$ are \emph{global} constants, same on all streamlines.

\myeqref{eq:masssteady} yields
\begin{eqnarray} \dens\vv = -\nabla^\perp\stf \end{eqnarray}
for a scalar function $\stf$ called \defm{stream function}. The Bernoulli relation takes the form
\begin{eqnarray} \Ber &= \half\dens^{-2}|\nabla\stf|^2 + \pif(\dens) = \rhsf(\dens,|\nabla\stf|) \end{eqnarray}
We may use the implicit function theorem to solve for $\dens$ as long as
\begin{eqnarray} \rhsf_\dens = -\dens^{-3}|\nabla\stf|^2 + \pif_\dens(\dens) = \dens^{-3}(\ssnd^2-|\vv|^2) \end{eqnarray}
is nonzero; it is positive as long as $|\vv|<\ssnd$ (and hence $\dens>0$), i.e.\ for \defm{subsonic} flow.
Hence we can solve
\begin{eqnarray} \dens^{-1} = \hdiv(\half|\nabla\stf|^2) \end{eqnarray}
where $\hdiv$ is defined on some maximal interval $\cli{0}{\vmsmax}$.

Having solved the mass and Bernoulli equations it remains to ensure irrotationality (which is needed to recover the original velocity equation \myeqref{eq:vsteady} from the Bernoulli equation):
\begin{eqnarray}
  0 = \ncurl \vv = \ncurl \frac{-\nperp\stf}{\dens} = -\ndiv\big( \hdiv(\frac{|\nabla\stf|^2}{2}) \nabla\stf \big)
  \label{eq:stf-divform}
\end{eqnarray}
After differentiation we have
\begin{eqnarray} 0 = \big(1-(\frac{v^x}{\ssnd})^2\big)\stf_{xx} - 2\frac{v^x}{\ssnd}\frac{v^y}{\ssnd}\stf_{xy}
+ \big(1-(\frac{v^y}{\ssnd})^2\big)\stf_{yy} \label{eq:comp-potf}\end{eqnarray}
where $\ssnd$ is a function of $\dens$, hence of $\nabla\stf$.
The eigenvectors of the coefficient matrix $I-(\vv/\ssnd)^2$ are $\vv$ and $\vv^\perp$,
with eigenvalues $1-\Mach^2$ and $1$ where
\begin{eqnarray} \Mach \defeq \vlen\vv/\ssnd \end{eqnarray}
is the \defm{Mach number}.
Hence \eqref{eq:comp-potf} is elliptic exactly wherever it is subsonic.

The limit of decreasing Mach numbers formally (and, under various assumptions provably) yields steady irrotational
\emph{incompressible} flow:
\begin{eqnarray} 0 &= \Lap\stf. \end{eqnarray}
2d harmonic functions are more conveniently represented as holomorphic maps:
consider the \defm{complex velocity}
\begin{eqnarray}
  \www &\defeq& \vx-i\vy
\end{eqnarray}
as a function of $z \defeq x+iy$. Then
\begin{eqnarray}
  \pcz \www
  &=&
  \half( \ndiv\vv - i\ncurl\vv ) .
\end{eqnarray}
Hence $\www$ represents an \emph{incompressible} and \emph{irrrotational} flow if and only if $\www$ is holomorphic.
If so, it is convenient to use the \defm{complex velocity potential} $\wpot=\int^z\www~dz=\vpot+i\stf$ (which may be multivalued).
The Cauchy-Riemann equations $\pcz\wpot=0$, together with $\pz\wpot=\www=\vx-i\vy$, yield $\vv=-\nabla\stf=\nabla\vpot$,
justifying the notation.

At solid boundaries we use the standard \defm{slip condition}
\begin{eqnarray} 0 = \vn \dotp \vv = \vs\dotp\nabla\stf \quad, \label{eq:slip}\end{eqnarray}
where $\vn,\vs$ are normal and tangent to the solid.
Integration along connected components of (say) a piecewise $\Cone$ boundary yields $\stf=\const$;
if the solid boundary has a single connected component,
then we may add an arbitrary constant to $\stf$ without changing $\vv=-\nperp\stf$ to obtain the convenient zero Dirichlet condition
\begin{eqnarray}
  \stf = 0.
\end{eqnarray}

\section{Protruding corners}

Consider a neighbourhood of a corner of a 2d solid body, as in fig.\ \myref{fig:onecorner}.
For simplicity assume the two sides are locally straight,
enclosing an exterior (i.e.\ fluid-side) angle $\Pola\notin\set{0,\pi,2\pi}$.
Whatever the global problem, in many cases it is natural to seek existence of an incompressible flow by Hilbert space method,
typically yielding an $\stf$ that is locally $\isoba1$, i.e.\ velocity $\nabla\stf$ square-integrable near the corner
with $\stf=0$ on the two sides.
A coordinate change to $\zeta=z^{\pi/\Pola}$ maps to a small halfball;
using $\stf=0$ on the straight side Schwarz reflection yields a harmonic function in a small ball,
with local Taylor expansion (the constant term is irrelevant for $\nabla\stf$)
\begin{eqnarray} \stf = \Im \sum_{k=1}^\infty \acf_k \zeta^k = \Im \subeq{\sum_{k=1}^\infty \acf_k z^{k\pi/\Pola}}{=\wpot(z)} \end{eqnarray}
so that
\begin{eqnarray} \www(z) = \wpot'(z) = \frac{\pi}{\Pola} \acf_1 \subeq{z^{\pi/\Pola-1}}{!} + \sum_{k=2}^\infty \frac{k\pi}{\Pola} \acf_k z^{k\pi/\Pola-1}.  \end{eqnarray}
Here we may observe a key distinction:
if $\Pola<\pi$, i.e.\ for \emph{receding} corners, the exponent $\pi/\Pola-1$ is positive
so a square-integrable velocity $\www$ is always bounded in the corner.
This is not true at \emph{protruding} corners ($\Pola>\pi$) unless a single real scalar constraint is satisfied: $a_1=0$.
If so, then inspection of the remaining terms shows that a nonzero $\stf$ must attain both negative and positive sign
arbitrarily close to the corner.
(For nonstraight but sufficiently regular sides analogous result can be obtained.)

Whereas unbounded velocity is merely undesirable for incompressible flows,
it is mathematically \emph{impossible} in the compressible problem \myeqref{eq:comp-potf}.
The latter is quasilinear; when linearizing the operator about $\vv=0$ and $\dens=\const>0$
we obtain the incompressible operator $\Lap$.
For solutions of the resulting linearized problem to be helpful in solving or understanding the nonlinear one,
we need to require unbounded velocity.
Hence every additional protruding corner adds another scalar real constraint to the problem.
To satisfy these constraints, a corresponding number of free real parameters may be needed!

The velocity $\www$ is holomorphic as well as bounded at infinity, so a Laurent expansion yields
\begin{eqnarray} \www(z) = c_0 + c_1z^{-1} + c_2z^{-2} + ... \myeqlab{eq:wwwww}\end{eqnarray}
for constants $c_i$.
$\www\conv c_0\eqdef\wwi$ at infinity (\emph{everywhere}, which is a consequence of $\vort=0$;
rotational flows can be far more complex).
By rotational symmetry we may assume $\wwi$ is real positive;
it is usually a chosen parameter, such as aircraft speed.

$\Re c_1$ must be zero because it is the coefficient of a velocity term $\xx/|\xx|^2$ which would otherwise cause net mass flux
through a sufficiently large circle,
in conflict with conservation of mass since the slip condition implies zero mass flux through the solid boundary.
Hence $c_1=\Gam/(2\pi i)$ with real
\begin{eqnarray}
  \Gam = \int_{\Sigma} \vv\dotp d\xx
\end{eqnarray}
which is called \defm{circulation};
$\Sigma$ is an arbitrary contour passing once counterclockwise around the circle
(due to $\vort=0$, $\Gam$ is independent of the choice of $\Sigma$,
which may be the boundary of the body, or very large (``around infinity''), or anything in between).

Integrating $\www$ in \myeqref{eq:wwwww} yields
\begin{eqnarray}
  \wpot(z) = \wwi z + \frac{\Gam}{2\pi i} \log z + c_2 z^{-1} + ...
\end{eqnarray}
(up to an additive constant that does not change $\www=\wpot'$, hence may be taken zero).
Consider two streamfunctions $\stf=\Im\wpot$ with same $\wwi$ and $\Gam$ and with bounded velocity.
Then their difference $d$ is $O(z^{-1})$ at infinity, and by the slip condition converges to $0$ at the solid as well;
by the strong maximum principle it cannot have extrema in between, so $d=0$.
Hence the flow is uniquely determined.

$\Gam$ is arbitrary for smooth bodies, as in the following explicit formula for flow around the unit circle:
\begin{eqnarray} \www(z) = \wwi ( 1 - z^{-2} ) + \frac{\Gam}{2\pi i} z^{-1}. \end{eqnarray}
That is no longer the case if the body has protruding corners:
if two $\stf$ with same $\wwi$ had different $\Gam$, then $d=a\log|z|+o(1)$ for $a\neq0$,
hence $\sign d=\sign a$ near infinity and thus everywhere, by the strong maximum principle and by $d=0$ at the body.
But as discussed earlier a harmonic nonzero $d$ with bounded gradient and with $d=0$ on the boundary
must attain \emph{both} signs near the corner --- contradiction.
Hence $\wwi$ alone uniquely determines the flow, including $\Gam$.

For a single protruding corner, and with suitable assumptions about the body, it is possible to show
that an incompressible solution satisfying the \defm{Kutta-Joukowsky condition} of bounded velocity at the corner does exist.
Using Blasius' theorem, Kutta-Joukowsky theory translates the resulting $\Gam$ into
explicit and widely used formulas for the vertical force (\defm{lift}) on the body.
At least in some physical regimes the prediction is in reasonable agreement with experimental observations
(see fig.\ 6.7.10 and surrounding text in \cite{batchelor}).
For particular shapes it is possible to give explicit formulas for $\www$ by conformal transformations to the unit circle
or other simple special cases.

The classical work of Frankl and Keldysh \cite{frankl-keldysh-1934}, Shiffman \cite{shiffman-exi-potf}, Bers \cite{bers-exi-uq-potf},
Finn-Gilbarg \cite{finn-gilbarg-uniqueness} etc.\ extends these
existence and uniqueness results and force formulas to compressible subsonic flow.

\section{Flow around bounded bodies}

The incompressible Kutta-Joukowsky theory is simple and yet powerful,
providing insight into the all-important lift problem using only standard complex analysis.
This combination should not obscure that irrotational inviscid flow without enhancements is inadequate for many other purposes.

\newcommand{\plateangle}{\alpha}

\begin{figure}
  \parbox{2.3in}
    \centerline{\input{diagonal_plate.pstex_t}}
    \caption{No subsonic solutions around non-horizontal plates}
    \label{fig:flatplate}
  }\hfi
  \parbox{2.1in}
    \centerline{\input{triangle.pstex_t}}
    \caption{Utility graph argument: intersection is unavoidable}
    \label{fig:triangle}

\end{figure}

For example, what about shapes with several protruding corners?
Since each protruding corner adds another constraint, while we still only have a single free parameter $\Gam$,
it is natural to believe that the compressible problem quickly becomes unsolvable.

Nevertheless this argument is not rigorous.
First, it is easy to find examples of nonlinear problems whose solutions cannot be obtained by simple linearization.
Second, the constraints are not obviously independent.
Consider for instance a flat plate (fig.\ \myref{fig:flatplate}), a degenerate example of a two-protruding-corner shape.
If $\plateangle\in\pi\Z$ (horizontal plate),
then compressible and incompressible problem are both obviously solvable by $\www=\const=\wwi$ in the entire domain.

But if $\plateangle\notin\pi\Z$ (including the case of vertical plates), then we can show \cite{elling-flatplate}
that the compressible problem does not have any uniformly subsonic solutions
(incompressible solutions have unbounded velocity at at least one of the two corners).
We obtain such nonexistence results for a somewhat larger class of two-protruding-corner bodies;
see \cite{elling-flatplate} for details.

Due to the nonlinearity of subsonic flow,
it is generally difficult to tell by inspection whether non-existence holds for a particular shape.
However, using Morrey estimates \cite{elling-protrudingangle} we obtain the following rather general tool:
if a shape does not allow incompressible solutions with bounded velocity,
then compressible solutions with local Mach numbers below a sufficiently small positive constant do not exist either.
In \cite{elling-polylow} we derive and apply this result for a special case of bodies with three or more protruding corners:
around an \emph{arbitrary} simple polygon there are no incompressible flows with bounded velocity,
and therefore no low-Mach compressible flows.

The proof of the polygon result (see \cite{elling-polylow} for full details) is based on non-planarity of the
\defm{utility graph} (fig.\ \myref{fig:triangle}; see \cite{thomassen-1992} and references therein):
consider a bipartite graph with an edge between each of three vertices (``houses'')
and each of the three other vertices (``utilities'');
it is not possible to embed such a graph into the plane without allowing edges to intersect.
(Presumably the gas, water and electricity lines cannot cross because
the utilities are uncooperative monopolies that own the land.)

Consider the sets $\set{\stf>0}$, $\set{\stf<0}$ and the interior of the body;
they are pairwise disjoint. One distinguished point in each set is chosen as ``utility''.
Three protruding corners are chosen as ``houses''.
As discussed earlier, $\stf$ must attain both signs at each protruding corner where the velocity is locally bounded,
so all three sets must be adjacent to every house.
In addition $\set{\stf>0}$ and $\set{\stf<0}$ are connected: both are unbounded,
since $\stf=\wwi y+O(|z|)$ with $\wwi>0$ as $|z|\conv\infty$,
and neither can have a bounded connected component, by the strong maximum principle.
After choosing suitable edges through each set we would have a planar embedding of the utility graph.
The contradiction shows that any incompressible flow must have unbounded velocity at all but at most two of the protruding corners.

The proof suggests that the nonexistence is quite topological in nature.
Simple polygons or other bodies with three or more protruding corners probably do allow irrotational flow in other settings,
for example if we restrict infinity to three ducts meeting in a junction in which the body is located.
Such settings also have more free parameters to permit satisfying constraints at additional protruding corners.

\begin{figure}
  \parbox{2.3in}{\input{smoothangle.pstex_t}}\hfill\parbox{2.3in}{\input{smoothanglesheet.pstex_t}
  \caption{Left: $\Dom$ covers an angle $\Pola$ at infinity, with variable but smooth boundaries.
    This domain, for $\pp(\dens)=\dens^\isenc$ with $\isenc>1$,
    does not allow compressible uniformly subsonic flows whose velocity is bounded but nonvanishing at infinity.
    Right: if vorticity is allowed, then there are trivial solutions with $\vv=\vvi=\const\neq 0$ above the vortex sheet, in particular
    near infinity at the upstream wall, whereas $\vv=0$ below the sheet.
  }
  \mylabel{fig:infangle}
\end{figure}

\section{Smooth infinite angles}

In \cite{elling-protrudingangle} we instead consider an unbounded solid:
an infinite protruding smoothened or sharp corner (see fig.\ \myref{fig:infangle} left).
It is natural to look for solutions whose velocity is bounded and converges near the upstream wall ($\graph\polahi$)
to a prescribed nonzero constant at spatial infinity.
Indeed for \emph{super}sonic velocity many shapes have well-known solutions based on simple waves
\cite[section 111]{courant-friedrichs}.
However, we prove that there do not exist any uniformly \emph{subsonic} irrotational flows of this type.
If we do permit rotation, then some of the same shapes do allow easily constructed solutions with
straight vortex sheet separating from the wall
(fig.\ \myref{fig:infangle} right).

In cases where irrotational inviscid models have no solution, what models may be more appropriate?
Physical observations suggest to permit rotation, with vorticity generated at some of the protruding corners,
for example vortex sheets separated by regions of irrotational flow \cite{elling-sepsheet}.
(Another option is to consider transonic flows, which generally feature curved shock waves that --- again --- produce vorticity.)
Vorticity is also needed for resolving part of the \defm{d'Alembert paradox} (\cite{dalembert-paradox,finn-gilbarg-uniqueness}),
namely that irrotational inviscid models predict zero drag for subsonic flows.
Although zero is a fair approximation for some shapes that are observed to have rather low drag relative to their size,
many other shapes do have significant drag even at small viscosity.

Historically there has been a lot of debate about how solid boundaries can generate vorticity.
It is frequently stated that the explanation requires viscosity.
On one hand, this is correct in the sense that physical observations --- as well as Prandtl's theory \cite{prandtl-1904} ---
confirm the essential role of thin viscous boundary layers and their instabilities.
On the other hand, our results could be interpreted as saying that viscosity is not needed after all,
in the sense that \emph{even in complete absence of viscosity}
some shapes and Mach numbers do not allow flows with zero vorticity.

\section*{Acknowledgements}
  This material is based upon work partially supported by the
  National Science Foundation under Grant No.\ NSF DMS-1054115.

\input{paper.bbl}

\end{document}

redpajama_set_name: RedPajamaArXiv


text:
Wawel – wzgórze na Pomoście Krakowskim, w Krakowie w dzielnicy I, na lewym brzegu Wisły. Do roku 1954 Wzgórze stanowiło odrębną dzielnicę miasta, była to dzielnica II Zamek.

Wawel ma charakter zrębu tektonicznego, który powstał w miocenie i zbudowany jest z liczących 161–155 mln lat górnojurajskich wapieni wieku oksfordzkiego. Wzgórze wznosi się na wysokość ok. 228 m n.p.m.

Na wzgórzu znajdują się dwa zabytkowe zespoły budowlane:
 Zamek Królewski na Wawelu
 bazylika archikatedralna św. Stanisława i św. Wacława

W 1978 Wawel wraz ze Starym Miastem, Kazimierzem i Stradomiem został wpisany na listę światowego dziedzictwa UNESCO, w 1994 razem ze Starym Miastem, Stradomiem, Kazimierzem, Podgórzem, Nowym Światem i Piaskiem został uznany za pomnik historii.

Częścią tego kompleksu są także fortyfikacje Wawelu. Odnalezione zostały relikty innych budowli, pochodzących z różnych epok.

Etymologia
Wzgórze mogło pierwotnie nazywać się wądół, wąwał, wąwel ze względu na krasowy charakter wapieni, z których jest zbudowane, jak i na liczne jaskinie (np. Smocza Jama). Według pełnej fantastycznych etymologii Kroniki wielkopolskiej słowo Wawel miało pochodzić od Wøwel (pierwotnie Bøbel) (stąd dzisiaj rekonstruuje się tę formę jako "wąwel" z nosowym o, czyli "ǫ" i zestawia z podobnie brzmiącymi wąwóz, wądół, u Brücknera od "wąwał"=wąwóz, słabość tej teorii tkwi w mało logicznym wywodzeniu nazwy wzgórza, a więc struktury geologicznej wypukłej od wgłębnej).

Według tejże Kroniki wielkopolskiej nazwa Wawel mogła również oznaczać zgrubienie na szyi spowodowane niedoborem jodu w wodzie wywołujące powiększanie tarczycy.

Inni uważają, że owo "wąwel" oznaczało "wyniosłość wśród mokradeł", którymi otoczone było wzgórze, od "wą" (odpowiednik dzisiejszego "w") i "wel" (wilgoć, woda) co oznaczało miejsce położone "w wodzie, otoczone wodą", według Stanisława Rosponda wąwel = grąd, tj. "miejsce wyniosłe i suche wśród łąk błotnistych, ostrów oblany wodą" od psł. *vъlь = stpl. wel, wla (stąd: Wleń). Zestawia się tutaj "Wąwel" z nazwami miejscowymi typu Wąwelnica, Wąwolnica, Wąwelno jednak nie tłumaczy procesu fonetycznego, który miałby doprowadzić do przejścia ą → a (Jan Długosz Wąwolnicę dwukrotnie podaje jako Wanwelnycza, wcześniej w 1325-1327 r. zapisano Wanvelnitia, w 1377 r. Wanwelnicza, jeszcze w 1531 r. Vanwelnicza, czyli z protezą samogłoski nosowej w postaci "an", a brak takich zapisów w stosunku do Wawelu).Dawniej doszukiwano się też genezy nazwy w zgodnościach bałto-słowiańskich, litewskiemu rdzeniu au, av, va, avr, var, vavr, babr, miał odpowiadać ruski varъ, polski wał, stąd według Mikołaja Akielewicza nazwa wsi Wawr, Wawer → Wanwoł, Wąwel, Wawel, tj. miejsce obwarowane.

Istnieje także teoria, jakoby nazwa Wawel pochodziła od nazwy Babel (s-c-s Вавилонъ, stąd również współczesne rosyjskie Вавилон, tr. Wawilon, czyli Babilon, częsta w średniowieczu oboczność w:b, m.in. grecka beta (obecnie wita), zobacz: Korbea, Kordoba).

Historia

Wawel do połowy XI wieku
Według badań archeologicznych ślady pierwszego osadnictwa datuje się na środkowy paleolit, około 100 tys. lat p.n.e. Jako osada położona na skrzyżowaniu szlaków handlowych szybko się rozwijał. Wawel był prawdopodobnie jednym z ośrodków władzy plemienia Wiślan, których organizacja państwowa powstała na przełomie VIII i IX wieku. O ich legendarnych władcach Kraku i Wandzie, mających żyć w VII i VIII wieku, wspomniał XIII-wieczny kronikarz Wincenty Kadłubek. W X wieku ziemie Wiślan, i tym samym Kraków, weszły w skład powstającego państwa polskiego.

W czasach przed- i wczesnopiastowskich w miejscu późniejszych kościołów św. Jerzego oraz św. Michała (tzw. jednostka osadnicza jerzycko-michalska) na wzgórzu prawdopodobnie znajdowało się miejsce kultu pogańskich Słowian. W 1000 roku zostało utworzone biskupstwo krakowskie, czego konsekwencją była budowa katedry – siedziby biskupa. Jednak ze względu na toczące się walki z cesarstwem, budowę prawdopodobnie rozpoczęto dopiero po zawarciu pokoju w Budziszynie, czyli około lat 20 XI wieku. Ze względu na bardzo nikłe pozostałości po pierwszej katedrze, nazywanej czasem "Chrobrowską" i pomimo trwających od dawna badań archeologicznych, nie udało się zrekonstruować jej wyglądu. Do lat 80. relikty kościoła św. Gereona utożsamiane były właśnie z pierwszą katedrą, ale teza ta, wysunięta przez Adolfa Szyszko-Bohusza, została odrzucona przez nowsze badania. Także co do momentu zniszczenia katedry nie ma zgodności – przypuszcza się, że mogło się to stać podczas najazdu księcia Brzetysława I w latach 40 XI wieku lub podczas pożaru w latach 80.

Oprócz katedry na wzgórzu istniały także inne zabudowania. Pierwsze odnalezione szczątki po budowlach drewnianych pochodzą z IX wieku, a kamienne – z przełomu X i XI wieku. Z tego okresu pochodzą pozostałości przedromańskich budowli murowanych, takich jak:
 Rotunda Najświętszej Marii Panny, prawdopodobnie z przełomu X i XI wieku
 kościół św. Jerzego, przebudowywany w późniejszych okresach
 rotunda przy bastionie Władysława IV, być może baptysterium
 czworokątna budowla z korytarzykiem z przełomu X i XI wieku o nieznanym przeznaczeniu, być może grobowiec
 kościół B (rotunda z dwiema absydami)

Romanizm (poł. XI w. – pocz. XII w.)
Na przełomie 1038 i 1039 Kazimierz Odnowiciel powrócił do Polski i przyjmuje się, że tym samym Kraków został siedzibą władzy królewskiej i stolicą państwa.

Budowę drugiej katedry, tzw. "Hermanowskiej" rozpoczęto pod koniec XI wieku, prawdopodobnie właśnie z fundacji Władysława Hermana. Jej konsekracja nastąpiła w 1142 roku. O budowli tej wiadomo zdecydowanie więcej, choćby ze względu na jej zachowany wizerunek na odcisku pieczęci kapituły krakowskiej z XIII wieku. Także pozostałości są zdecydowanie lepiej zachowane – dolna część Wieży Wikaryjskiej (Srebrnych Dzwonów) oraz w całości trójnawowa krypta św. Leonarda, wsparta na ośmiu kolumnach. W 1118 roku pochowano tam biskupa Maurusa, z którego grobu wyjęto m.in. patenę i kielich.
Z tego okresu pochodzą także:
 Sala o 24 słupach, być może palatium książęce
 budynek przy Smoczej Jamie (interpretowany ostatnio jako romańska wieża)
 Kościół św. Gereona, prawdopodobnie kaplica pałacowa
 Kościół św. Michała (romański)
 rotunda z emporą przy baszcie Sandomierskiej, być może z 2 połowy XI wieku
 czworokątna wieża obronna przy "Kurzej Stopie"

Gotyk (pocz. XIII w. – pocz. XVI w.)

W 1305 lub 1306 roku katedra spłonęła, ale nie w całości, w związku z czym w 1320 roku możliwa była koronacja Władysława Łokietka. W tym samym roku z inicjatywy króla, rozpoczęto budowę nowej, trzeciej z kolei, która w swoim głównym zrębie istnieje do dziś. W 1364 została ona konsekrowana. Jest to budowla trzynawowa z transeptem i ambitem, do której od początku budowy i przez następne wieki dostawiano kaplice. Pierwsze powstawały przy prezbiterium – w 1322 została konsekrowana kaplica św. Małgorzaty, dziś pełniąca funkcję zakrystii, a kilka lat później wzniesiono kaplicę nazwaną później kaplicą Batorego.

Oprócz tego, królowa Zofia Holszańska (ostatnia żona Władysława Jagiełły) ufundowała kaplicę przy zachodnim wejściu, nazywaną później jej imieniem, a na polecenie Kazimierza Jagiellończyka wzniesiono kaplicę Świętokrzyską. Zostały także wybudowane inne kaplice (pod koniec XV wieku było ich w sumie 19), które w wiekach późniejszych zostały mocno przebudowane.

Władysław Łokietek jest też pierwszym królem, którego pochowano w wawelskiej katedrze. Jego sarkofag z piaskowca został ufundowany w połowie XIV wieku przez Kazimierza Wielkiego. Swój nagrobek posiada też właśnie Kazimierz Wielki i Władysław Jagiełło, ale do najcenniejszych należy bez wątpienia sarkofag Kazimierza Jagiellończyka, wykonany przez Wita Stwosza w 1492 roku. Na początku XVI wieku został wyrzeźbiony późnogotycki nagrobek Jana Olbrachta.

Na polecenie Kazimierza Wielkiego dokonano wielkiej przebudowy wcześniejszego wczesnogotyckiego zamku. Wzniesiono nowy kompleks składający się ze skrzydła południowo-wschodniego od rotundy św. Feliksa i Adaukta po narożnik północno-wschodni. Wzdłuż obwodu północnego rozbudowano dawne palatium i kościół św. Marii Egipcjanki, który mógł mieć charakter dworski. Na poziomie wyższych kondygnacji komunikację zapewniały krużganki na murowanych filarach. Z czasów Kazimierza Wielkiego zachowała się tylko Sala Kazimierzowska we wczesnogotyckiej tzw. Wieży Łokietkowej. Zamek został przebudowany pod koniec XIV wieku przez Władysława Jagiełłę i Jadwigę, za których rządów dobudowano tzw. Kurzą Stopkę i Wieżę Duńską. Z zamku tego zachowała się także tzw. sala Jadwigi i Jagiełły, w której eksponowany jest obecnie Szczerbiec.

W okresie tym powstały na wzgórzu także inne budowle, służące licznym księżom, urzędnikom królewskim i rzemieślnikom oraz mury obronne i baszty: Jordanka, Lubranka (później nazwana basztą Senatorską), Sandomierska, Tęczyńska, Szlachecka, Złodziejska i Panieńska.

Renesans (XVI wiek)

W latach 1507–1536 gruntownie przebudowano siedzibę królewską, a mecenat nad tym ogromnym przedsięwzięciem sprawował sam Zygmunt Stary. Prace prowadzono pod kierunkiem dwóch Włochów: Franciszka z Florencji i Bartłomieja Berrecciego, a po ich śmierci Polaka – Benedykta z Sandomierza. Na szczególną uwagę zasługuje piękny dziedziniec pałacowy. Z lekkich, wspartych na smukłych kolumnach arkadowych krużganków wchodzi się do przestronnych i pełnych światła komnat. Wnętrza zamku, ze wspaniałą Salą Poselską i jej kasetonowym stropem, to świadectwo dużych umiejętności zarówno włoskich, jak i rodzimych rzemieślników różnych specjalności. Sale zamkowe zdobione były przez arrasy, których pokaźną kolekcję zgromadził Zygmunt August.

W latach 1502–1505 nagrobek Jana Olbrachta został umieszczony w rzeźbionej niszy w formie łuku triumfalnego autorstwa Franciszka z Florencji. Jest to pierwsze w pełni renesansowe dzieło na ziemiach polskich. W 1517 r. rozpoczęto budowę ukończonej 16 lat później kaplicy Zygmuntowskiej, grobowca-mauzoleum ostatnich Jagiellonów. Z tego okresu zachowały się w katedrze także inne nagrobki – kardynała Fryderyka Jagiellończyka i biskupów: Piotra Gamrata, Piotra Tomickiego, Jana Konarskiego, Jana Chojeńskiego, Samuela Maciejowskiego. W 1520 roku odlano dzwon Zygmunt.

W katedrze znajdują się także dzieła manierystyczne: nagrobek Stefana Batorego i biskupa Filipa Padniewskiego – oba autorstwa Santi Gucciego oraz nagrobek biskupa Andrzeja Zebrzydowskiego dłuta Jana Michałowicza z Urzędowa.

Barok (XVII-XVIII wiek)
Po pożarze w 1595 roku, w którym spłonęła północno-wschodnia część zamku, król Zygmunt III Waza podjął decyzję o odbudowie, którą kierował architekt Jan Trevano. Z przebudowy tej zachowały się m.in. schody Senatorskie i kominek w sali Pod Ptakami.

Gdy w 1609 roku król Zygmunt III na stałe przeniósł się do Warszawy, dla Wawelu rozpoczął się trudny okres. Opiekę nad zabudowaniami pełnili wielkorządcy, jednak mimo to, zarówno zamek, jak i inne budynki, niszczały. Do ich złego stanu przyczynili się także Szwedzi, stacjonujący na Wawelu w latach 1655–1657 i 1702. W 1702 roku w czasie III wojny północnej, gdy na Wawelu stacjonowały wojska szwedzkie wybuchł pożar, który niemal w całości strawił zamek. Wzgórze było okupowane także przez wojska pruskie w 1794 roku, kiedy to zostały zrabowane nigdy nieodzyskane (z wyjątkiem Szczerbca) insygnia koronne. Ze względu na toczące się w XVII wieku wojny, Wawel, jako ważny punkt obronny, wzbogacił się o unowocześnione mury obronne.

Przeniesienie siedziby króla do Warszawy nie zmieniło jednak roli i znaczenia katedry wawelskiej, która nadal była miejscem koronacji i królewskich pochówków. W tym czasie wprowadzono w katedrze wiele zmian – podwyższony został ambit, powstała istniejąca do dziś konfesja św. Stanisława (marmurowy ołtarz i srebrną trumnę) oraz ołtarz główny. Wznoszono także barokowe nagrobki (m.in. biskupów: Marcina Szyszkowskiego, Piotra Gembickiego, Jana Małachowskiego i Kazimierza Łubieńskiego oraz królów: Michała Korybuta Wiśniowieckiego i Jana III Sobieskiego) i kaplice (m.in. kaplica Wazów).

XIX wiek

Wraz z trzecim rozbiorem (1795) Wawel znalazł się pod zaborem austriackim. Wojsko austriackie przekształciło wzgórze na koszary, co pociągnęło za sobą liczne zniszczenia i przebudowy: obmurowano krużganki i zmieniono wnętrza zamku, rozebrano część budynków (m.in. kościoły św. Jerzego i św. Michała). Po upadku powstania krakowskiego i zlikwidowaniu Rzeczypospolitej Krakowskiej na Wawelu wzniesiono trzy ogromne gmachy szpitala wojskowego. W II połowie XIX wieku Austriacy przebudowali mury obronne w taki sposób, aby stały się częścią Twierdzy Kraków (powstały m.in. dwie kaponiery). Równocześnie trwały próby odzyskania wzgórza przez Polaków.
Gdy pojawił się projekt, aby cały Wawel wraz z katedrą zamknąć dla ludności cywilnej, a kapitułę przenieść do kościoła Św. Piotra, prezydent miasta Mikołaj Zyblikiewicz zaproponował przekazanie wawelskiego zamku na rezydencję cesarską dla Franciszka Józefa I. Powoływano się przy tym na rodzinne związki Habsburgów z polskimi rodami monarszymi. 3 września 1880 r. deputacja obywateli Galicji pod przewodnictwem marszałka krajowego hr. Ludwika Wodzickiego złożyła w tej sprawie petycję na ręce cesarza, która została przyjęta pozytywnie. Wojskowe władze austriackie zażądały jednak za opuszczenie wawelskiego wzgórza rekompensaty w wysokości 750 000 guldenów na budowę nowego szpitala wojskowego oraz także 750 000 guldenów na budowę nowych koszar. Po sześciu latach rokowań ostatecznie ustalono, że społeczeństwo polskie ma zapłacić już w nowej walucie 2 714 606 koron i 89 halerzy. Rozpoczęła się akcja gromadzenia funduszy. Kasa Oszczędności Miasta Krakowa przekazała 800 000 koron, a Sejm Krajowy Galicji zadeklarował 100 000 koron rocznie na odbudowę Wawelu. Cesarz Franciszek Józef przeznaczył z prywatnej szkatuły także 100 000 koron rocznie na restaurację zabytków wawelskich. Aleksandra Ulanowska zorganizowała wielką kwestę publiczną. Dzięki tym działaniom i licznym datkom od osób prywatnych, instytucji oraz stowarzyszeń, udało się zgromadzić potrzebną kwotę.

W katedrze w tym czasie odbyły się manifestacyjne pogrzeby Józefa Poniatowskiego i Tadeusza Kościuszki. Przebudowana w stylu klasycystycznym została kaplica Potockich, w której umieszczono pomnik Artura Potockiego autorstwa wybitnego rzeźbiarza Bertela Thorvaldsena. Druga rzeźba tego artysty została ustawiona w kaplicy królowej Zofii.

W 1869 roku przypadkowo otwarto trumnę króla Kazimierza Wielkiego, co stało się pretekstem do urządzenia powtórnego pogrzebu. Równocześnie podjęto inicjatywę odnowy innych królewskich grobów – oczyszczono sarkofagi (ufundowane też nowe – m.in. cesarz Franciszek Józef ufundował sarkofag króla Michała Korybuta Wiśniowieckiego, który miał żonę Habsburżankę), a podziemne krypty połączono korytarzami.

XX i XXI wiek

W 1905 cesarz Franciszek Józef I wyraził zgodę na opuszczenie przez wojska austriackie Wawelu. Rozpoczęto prace konserwatorskie, którymi kierował Zygmunt Hendel, a następnie Adolf Szyszko-Bohusz, który odnalazł rotundę Najświętszej Marii Panny i inne relikty wczesnych budowli. Renowacja wzgórza finansowana była m.in. ze składek społecznych. Ofiarodawców upamiętniano wmurowując cegiełki z ich nazwiskami w mur przy północnym wjeździe na zamek, przy którym wzniesiono także Bramę Herbową i ustawiono konny pomnik Tadeusza Kościuszki. Przewodniczącym amerykańsko-polskiego komitetu odbudowy zamku i katedry na Wawelu był ks. Franciszek Ksawery Kurkowski.

W latach 1904–1907 Stanisław Wyspiański i Władysław Ekielski opracowali plan zabudowy wzgórza, noszący nazwę Akropolis. Ta nigdy niezrealizowana idea zakładała umieszczenie na Wawelu m.in. siedziby Sejmu i Senatu, Muzeum Narodowego, Akademii Umiejętności i kurii biskupiej. Całość miała wzorować się na starożytnej architekturze – autorzy założyli wybudowanie np. teatru greckiego czy posągu Nike.

W tym okresie katedra wzbogaciła się o dwa nowe nagrobki: królowej Jadwigi (1902) i symboliczny Władysława Warneńczyka (1906), oba autorstwa Antoniego Madeyskiego. Kaplica królowej Zofii została ozdobiona w latach 1902–1904 przez Włodzimierza Tetmajera dekoracją malarską, przedstawiającą polskich świętych i bohaterów narodowych. Natomiast w skarbcu katedralnym malowidła w latach 1900–1902 wykonał Józef Mehoffer. On też jest autorem witraży w oknach transeptu katedry (ukazują one Chrystusa Bolesnego, Maryję i geniusze cierpienia), malowideł i witrażu w kaplicy Szafrańców oraz witraży w kaplicy Świętokrzyskiej. Swoje projekty witraży do katedry, nigdy niezrealizowane, stworzył także Stanisław Wyspiański.

W dwudziestoleciu międzywojennym, tuż po odzyskaniu niepodległości, polskie władze centralne uznały wawelski zamek za gmach reprezentacyjny Rzeczypospolitej do użytku Naczelnika Państwa, a następnie dla Prezydenta RP.

Uchwałą zaś Sejmu Rzeczypospolitej Polskiej z 1921 krakowski zespół urbanistyczny na Wawelu stał się jedną z oficjalnych rezydencji Prezydenta RP (do dzisiaj zachował się apartament Prezydenta RP Ignacego Mościckiego). Do dziś nie istnieje taki akt prawny, wydany przez władze niepodległej Rzeczypospolitej (nie licząc decyzji stalinowskiej KRN, ustanawiającej na Wawelu muzeum), który znosiłby ten zapis.

W 1921 na bastionie Władysława IV Wazy stanął pomnik Tadeusza Kościuszki dłuta Leonarda Marconiego i Antoniego Popiela.

W 1927 r. sprowadzono na Wawel prochy Juliusza Słowackiego i jego matki Salomei Becu; w 1935 r. pochowano tu też Józefa Piłsudskiego.

W czasie II wojny światowej Wawel był siedzibą generalnego gubernatora Hansa Franka. Ukradziono wówczas wiele cennych zabytków, które do dziś nie wróciły do Polski. 18 stycznia 1945 opuszczony przez Niemców Wawel został zabezpieczony przez strażaków i jednocześnie żołnierzy AK.

W 1978 r. Wawel wraz ze ścisłym Starym Miastem oraz zabytkami Kazimierza został wpisany na liście światowego dziedzictwa UNESCO.

W 1992 r. sprowadzono na Wawel urnę z ziemią z Monte Cassino.

W 1993 r. sprowadzono na Wawel zwłoki gen. Władysława Sikorskiego.

W 2001 r., na Wawelu znalazła się grudka ziemi z mogiły zbiorowej w której pochowany był Cyprian Kamil Norwid, znalazła miejsce w Krypcie Wieszczów Narodowych.

W lutym 2010 roku w Krypcie Wieszczów Narodowych ustawiono tablicę ku pamięci Fryderyka Chopina, w kwietniu w przedsionku krypty pod Wieżą Srebrnych Dzwonów pochowano prezydenta Lecha Kaczyńskiego wraz z małżonką.

Wawel w ikonografii
Wizerunek wzgórza wawelskiego w czasie okupacji niemieckiej został umieszczony na banknotach o nominale 20 złotych emitowanych przez Bank Emisyjny w Polsce.

Wawel dziś

Zwiedzającym udostępnione są:
 na zamku:
 reprezentacyjne komnaty królewskie – wystawa obejmuje znajdujące się na parterze pomieszczenia wielkorządcy zamku i komnaty na drugim piętrze, m.in. Salę Poselską, której strop ozdobiony jest rzeźbionymi głowami (tzw. głowami wawelskimi) i Salę Senatorską
 prywatne apartamenty królewskie
 skarbiec koronny, gdzie prezentowany jest m.in. miecz koronacyjny Szczerbiec
 zbrojownię
 wystawę Sztuka Wschodu
 w katedrze:
 groby królewskie
 Krypta Wieszczów Narodowych
 dzwon Zygmunt
 Muzeum Katedralne
 Wawel Zaginiony – rezerwat archeologiczny z częściowo zrekonstruowaną Rotundą Najświętszej Marii Panny
 Smocza Jama
 Trasa Ogrody Królewskie – zrekonstruowany, renesansowy ogród

Wawel znajduje się na trasie Małopolskiej Drogi św. Jakuba z Lublina i Sandomierza do Tyńca. Jest to także miejsce styku Via Regia. Ze Wzgórza Wawelskiego do litewskiego Wilna, przez białoruskie Grodno prowadzi Szlak Jagielloński.

Mapa budynków na Wawelu

Galeria

Zobacz też
 czakram wawelski
 konflikt wawelski
 koronacje królewskie na Wawelu
 Pałac Królewski na Łobzowie w Krakowie (letnia rezydencja królewska)
 pałace Krakowa – lista wszystkich zabytkowych pałaców znajdujących się w Krakowie
 Smok wawelski

Przypisy

Bibliografia

 Grychowki Michał, Czyżewski Krzysztof J.: Katedra wawelska, Videograf II, Katowice 2001, .

Linki zewnętrzne

 Zamek Królewski na Wawelu – oficjalna strona
 TS/S Stefan Batory, Polish Ocean Liner 1968-1988: Voyage of 1940
 Materiały archiwalne dotyczące Wawelu w bibliotece Polona

Wzgórza Bramy Krakowskiej
Dzielnica I Stare Miasto
Obiekty z listy dziedzictwa UNESCO w Polsce
Wzgórza Krakowa
Zabytki nieruchome w Krakowie
Dzielnice Krakowa do 1954 roku
Miejsca kultu dawnych Słowian


Below, undergraduate students will find important tools and information relating to course registration.
A step-by-step guide to course registration may be found on the University Registrar's website.
Degree Planner provides recommended course schedules by semester based on a student's declared major(s), premajor, minor(s), and certificate(s). The Arts & Letters Advisement Center requires students to review Degree Planner before receiving a class schedule check from an advisor.
After selecting courses for a given semester, the Schedule Planner can generate a list of potential schedules prior to registration. The class sections can then be loaded into the Shopping Cart in the GET Student Center.
A student's CAAR can be accessed through the GET Student Center. Among other academic records, the CAAR shows a student's progress toward their declared degree programs. This is a very important tool to get familiar with and understand.
Once registration dates have been finalized, students may view their assigned registration date and time for the upcoming term in the "Enrollment Dates" section in the GET Student Center.
When can I view the upcoming term's class offerings?
Once the Schedule of Classes has been published online, it may be viewed by clicking the "Search" link in the GET Student Center, or by visiting the University Scheduling Office's website.
University departments may place holds on student accounts for various reasons. Holds prevent students from registering for classes. Students may view any outstanding holds in the GET Student Center.
While finishing the enrollment process, students sometimes encounter error messages. A list of error messages may be found here. In order to ensure a smooth registration experience, students should use the "validate" function in the GET Student Center to clear any potential error messages prior to their enrollment date.
Please review the Waitlist FAQ on the University Registrar's website.


Huntsville, AL – September 19, 2017 – SingleSource Communications has reached an exclusive agreement with ChargeDefense, LLC to distribute its mobile security products globally. SingleSource will use its extensive network of telecommunication industry contacts to promote the Juice-Jack Defender® and Hello Sunshine Ruggedized Charger™. Other ChargeDefense mobile products are being evaluated for fit in SingleSource's ecosystem.


text:
Statement of Educational Effectiveness
Master of Arts in Leadership (MAL)
Doctor of Ministry (DMin)
rstockman@wilmetteinstitute.org
Affiliated Professor, Wilmette Institute
Robert H. Stockman obtained his Master's degree and doctorate in Religious Studies from Harvard University, where he specialized in history of religion in the United States. He is the author of The Bahá'í Faith in America, volumes 1 and 2, which cover Bahá'í events in the United States from 1892 to 1900 and 1901 to 1912 respectively; Thornton Chase: The First American Bahá'í; `Abdu'l-Bahá in America, a volume that reviews `Abdu'l-Bahá's 8-month journey across North America; the Bahá'í Faith: A Guide for the Perplexed, which is an introductory text; a book about the Bahá'í Faith and nonviolence; and various articles on Bahá'í history and theology. He also edited The World of the Bahá'í Faith, a 51-chapter survey of the Faith published by Routledge. He is Director of the Wilmette Institute and has served on the boards of World Order magazine and the Bahá'í encyclopedia project. He is an instructor of religious studies at Indiana University South Bend.


text:
Samuel Campbell House (Second)
Samuel Campbell House
Charles A. Allen
COLONEL SAMUEL N. CAMPBELL HOUSE
Grandson of General Alexander Campbell, Colonel Samuel Campbell was another leading Cherryfield lumberrnill owner, who was also on the governor's Executive Council for two years; Architectlbuilder Charles A. Allen, of Cherryfield, constructed the colonel's Queen Anne style house in 1883. Three brick chimneys heated this 2-1/2 story wooden frame, clapboarded building, resting on a granite foundation. The south-facing facade begins with a covered porch, with pediment, leading to the double-door entrance. The six-paneled center bay window of the second-story stands alone, below the half-story single half-round window. Other first-and second-story windows are in pairs. The hipped roof is punctuated by several dormers, one with twin windows. A two-story ell is attached to the north (rear) side. A gable-roofed, two-story carriage house is west of this home, called by Frank Beard one of "the finest of its period in eastern Maine." The colonel's house sits on the hill north of Route One. FAB, JCB
Section number 7, Page 4, Inventory List:
2. (Second) Samuel N. Campbell House, 1883 - C Route 1
Charles A. Allen, Builder N .R. 2/4/82
This lavishly detailed and remarkably intact Queen Anne style house ranks among the finest of its type in eastern Maine. The asymmetrically massed two-and-a-half-story main block features a wrap-around porch with Eastlake ornamentation, bay windows articulated with brackets and sawn details, and a hip roof enlivened by pent gables, dormers, and chimney stacks. Its varied form is further enhanced by the use of weatherboards on the main wall surfaces and fish-scale shingles in the gables and above the windows. The original carriage house stands behind the dwelling. Its gableon-hip roof features an elaborate ventilator mounted on the ridge.
Like its neighbor (1) to the east, this house was built for a member of the prominent Campbell family. Colonel Samuel N. Campbell was the grandson of Alexander Campbell, and like' his grandfather was engaged in the lumber business. He too was politically active, serving on the Governor's Executive Council from 1880-82. The house was constructed by the Cherryfield builder Charles A. Allen from a design published in the August 1882 edition of Carpentry and Building (New York). The architect was T. F. Schneider of Washington, D. C.


Used as a modern alternative internally and externally on domestic houses and flats. The Pull handles are supplied with bolt through fixing bolts and are available in Satin Stainless or Polished Stainless finish in sizes from 325mm to 1200mm. If you require concealed roses or finger plates these are available in the related products section.
Used as a modern alternative internally and externally on domestic houses and flats. Made from Grade 304 Stainless Steel, which has excellent anti-corrosive properties and is versatile in both domestic and industrial environments. The Pull handles are supplied with bolt through fixing bolts and are available in Satin Stainless or Polished Stainless finish in sizes from 325mm to 1200mm. If you require concealed roses or finger plates these are available in the related products section.
Supplied as a pair of pull handles complete with back to back fixings.
If you wish to have round roses for show purposes you will need to purchase 4 x concealed roses in the finish to match the finish of the handle.
Please note that round roses are sold as singles so if you want to use them you will need to purchase 4 per set of back to back pull handles.