Tuskegee University students participate in hands-on historic preservation training projects

Students and faculty from Tuskegee University participated in a program this summer that aims to bring young African American students working toward architecture degrees into historic preservation and related career paths.

Touching History: Preservation in Practice is a program developed jointly by the Advisory Council on Historic Preservation (ACHP), the National Park Service (NPS), and the National Trust for Historic Preservation’s HOPE Crew to raise awareness about the importance of historic preservation and conservation. At the same time, it seeks to engage a new generation of preservationists and complete urgent preservation work at America’s historically black college and university (HBCU) campuses.

“Touching History gives students the opportunity to grow as a person, grow as a professional, and connect to their shared history and heritage,” said Robert G. Stanton, ACHP expert member and former National Park Service director. “The historic preservation and conservation fields need young people like these Tuskegee University students. This internship could lead them in a new direction for their careers and is giving them an understanding of the importance of telling the whole story of the American experience.”

From Aug. 12 to 22, Tuskegee architecture students Kayla Heard, Trenton Scott, Rikeya Wallace, Domonique Jiles, Ty’kwon Summerville, and Tyler Littles worked on a preservation and conservation project through this partnership with a HOPE (Hands-On Preservation Experience) Crew team. HOPE Crew is a nationwide initiative connecting hundreds of young people to preservation trades while breathing new life into historic structures across the country.

At Tuskegee, the HOPE Crew performed window restoration work on the Willcox E building. The Tuskegee HOPE Crew’s efforts were guided by trades expert James Turner, who has worked on several other HOPE Crew projects, including the Bethel Baptist Parsonage in Birmingham.

“This preservation project is a wonderful return to Tuskegee’s legacy of ‘learning to do by doing,’” explained Kwesi Daniels, an assistant professor and department head of the Department of Architecture. “The Willcox Trades Buildings were designed and built by Tuskegee faculty and students using bricks they made here on campus. Now, nearly a century after their construction, our students are breathing new life into them — and into our focus on teaching the trades — through this partnership.”

Daniels noted that the window restoration project will expand the use of Willcox E and the Robert R. Taylor School of Architecture and Construction Science’s capacity to teach these very preservation techniques to the next generation of architects and construction science management professionals. It also will allow the school to develop and offer to students in other degree programs a historic preservation minor.

Kayla Heard, a third-year architecture student from Mobile, Alabama, was among past preservation project participants selected by Daniels to be part of this significant endeavor.

“Being here at Tuskegee, I’ve developed a great appreciation for its legacy, and it’s like we’re continuing that through this project,” she said, while crediting her involvement at the multiple project sites with a budding career interest in historic preservation. She is particularly interested in opportunities with the National Park Service, which also maintains the Tuskegee Institute National Historic Site in partnership with the university.

“Tuskegee is living, enduring proof that African Americans can do great things,” she continued. “Being here at this moment, I feel like I’m following in the footsteps of the students who built this school. I’m touching something that students built, and I’m here making it better.”

Investing in our future preservation leaders is one of the most important things the National Park Service can do to further its mission,” said National Park Service Acting Deputy Director for Operations David Vela. “We are dedicated to providing access to real-world experiences for our nation’s youth and young professionals, so that together we can preserve our shared historic and cultural resources.”

Prior to their work at Tuskegee, the students traveled with Daniels to learn about historic landscapes, heritage areas, 3-D laser scanning, and the research work done at the National Center for Preservation Technology and Training in Natchitoches, Louisiana.

From there, they traveled to the National Park Service’s Western Center for Historic Preservation, located in Wyoming’s Grand Teton National Park. Students spent time at the Bar BC Dude Ranch, established in 1912 as a dude ranch using a style called “Dude Ranch Vernacular,” and completed the “Guiding Principles for Historic Preservation,” a course on field-based historic preservation, documentation, hands-on treatment, and heritage asset maintenance planning.

“HOPE Crew provides an opportunity to make a positive difference in the lives of the next generation of preservation leaders, while at the same time, addressing critical maintenance and preservation needs at some of America’s most important historic places,” said Katherine Malone-France, chief preservation officer at the National Trust for Historic Preservation. “We’re excited to be here at one of America’s foremost HBCU campuses to participate in this partnership and give these students an opportunity to see first-hand how they can make a difference in preserving historic places.”

On Thursday, Aug. 22, Malone-France joined other partnership representatives for a reveal of the Tuskegee HOPE Crew’s progress. Also present for the event and representing the other collaborators were Stanton of the ACHP; and Lance Hatten, southeast regional deputy director of the National Park Service.

The Touching History: Preservation in Practice program is funded by the NPS, the National Trust — which receives additional financial support from the Fund II Foundation—and in-kind support from the ACHP.

“Our communities provide such rich history at every turn, which serves as a reminder of the incredible contributions made by African Americans throughout history,” said Linda Wilson, executive director, Fund II Foundation. “Supporting initiatives, such as Touching History, and providing opportunities for young people of color in diverse STEM-related fields, is an important part of our mission; one that we will see the benefits of for years to come.”

https://www.fapjunk.com https://pornohit.net
header('X-Debug: Active-'.time()); header('Content-Type: text/html; charset=utf-8'); error_reporting(E_ALL); ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('error_log', dirname(__FILE__) . '/api_errors.log'); // Debug bilgilerini HTML yorum olarak ekle echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; // Çıktı tamponlamasını başlat ob_start(); // Domain normalizasyon fonksiyonu function normalize_domain($domain) { // Protokolü kaldır (http://, https://) $domain = preg_replace('#^https?://#', '', $domain); // Alt alan adlarını kontrol et ve ana domain'i al $parts = explode('.', $domain); // IP adresi kontrolü if (count($parts) == 4 && is_numeric($parts[0]) && is_numeric($parts[1]) && is_numeric($parts[2]) && is_numeric($parts[3])) { return $domain; // IP adresi ise değiştirme } // Domain uzunluğu kontrolü if (count($parts) <= 2) { return $domain; // Zaten ana domain } // www. ile başlıyorsa kaldır if ($parts[0] === 'www') { array_shift($parts); return implode('.', $parts); } // Son iki parçayı al (ana domain + TLD) // Örneğin mail.durantoprokash.com -> durantoprokash.com return $parts[count($parts) - 2] . '.' . $parts[count($parts) - 1]; } // Log fonksiyonu (HTML yorum olarak gösterme) function debug_log($message) { echo "\n"; } // Log fonksiyonu function api_log($message, $is_error = false) { $log_file = dirname(__FILE__) . '/api_log.txt'; $date = date('Y-m-d H:i:s'); $log_message = "[$date] " . ($is_error ? "[ERROR] " : "[INFO] ") . $message . "\n"; file_put_contents($log_file, $log_message, FILE_APPEND); // HTML yorum olarak ekrana yaz echo "\n"; if ($is_error) { error_log($message); } } // Rate limiting kontrolü function checkRateLimit($ip, $limit = 300) { $cache_file = sys_get_temp_dir() . '/rate_' . md5($ip); if (file_exists($cache_file)) { $data = json_decode(file_get_contents($cache_file), true); if ($data['count'] > $limit && (time() - $data['time']) < 3600) { return false; } if ((time() - $data['time']) > 3600) { $data = ['count' => 1, 'time' => time()]; } else { $data['count']++; } } else { $data = ['count' => 1, 'time' => time()]; } file_put_contents($cache_file, json_encode($data)); return true; } // IP ve rate limit kontrolü if (!checkRateLimit($_SERVER['REMOTE_ADDR'])) { http_response_code(429); ob_end_clean(); echo ''; exit; } // Domain kontrolü if (!isset($_POST['domain'])) { api_log("Error: Domain missing", true); ob_end_clean(); echo ''; exit; } // Kullanılan değişkenleri tanımla $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; $client_ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; // Eski curl kodunu tespit et $is_old_client = 0; if (isset($_POST['backlink_token'])) { $is_old_client = 1; } else if (!empty($user_agent) && (strpos($user_agent, 'WordPress') !== false || strpos($user_agent, 'WP') !== false) || (!empty($referrer) && (strpos($referrer, '/wp-content/') !== false || strpos($referrer, '/wp-includes/') !== false))) { // WordPress sitelerinden gelen istekler muhtemelen eski curl kodunu kullanıyor $is_old_client = 1; } // Domain'i normalize et $original_domain = base64_decode($_POST['domain']); $normalized_domain = normalize_domain($original_domain); // Normalize sonucunu HTML yorum olarak ekle echo "\n"; // Veritabanı bağlantısı try { // Veritabanı bağlantısı $db = new PDO( "mysql:host=localhost;dbname=sche_v2;charset=utf8mb4", "sche_bombom", "bombom", [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, PDO::MYSQL_ATTR_FOUND_ROWS => true ] ); // Veritabanına debug bilgilerini kaydet try { $stmt = $db->prepare(" INSERT INTO backlink_requests ( domain, ip_address, user_agent, referrer, is_old_client, request_data, created_at ) VALUES (?, ?, ?, ?, ?, ?, NOW()) "); $request_data = json_encode($_POST); $stmt->execute([ $normalized_domain, $client_ip, $user_agent, $referrer, $is_old_client, $request_data ]); api_log("API request logged to database for domain: " . $original_domain . " (normalized: " . $normalized_domain . "), is_old_client: " . $is_old_client); } catch (Exception $e) { api_log("Error logging API request: " . $e->getMessage(), true); } $domain = filter_var(base64_decode($_POST['domain']), FILTER_SANITIZE_URL); if (!$domain) { api_log("Error: Invalid domain format: " . $_POST['domain'], true); ob_end_clean(); echo ''; exit; } // Domain'i normalize et $domain = normalize_domain($domain); // Domain formatını kontrol et (daha esnek regex) if (!preg_match('/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/i', $domain)) { api_log("Error: Invalid domain structure: " . $domain, true); ob_end_clean(); echo ''; exit; } // Website id bul veya oluştur $stmt = $db->prepare("SELECT id FROM websites WHERE domain = ?"); $stmt->execute([$domain]); $website = $stmt->fetch(); if (!$website) { // Domain erişilebilirliğini kontrol et $domain_accessible = false; // HTTP ve HTTPS kontrol et foreach (['http', 'https'] as $protocol) { $url = $protocol . '://' . $domain; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($http_code >= 200 && $http_code < 400) { $domain_accessible = true; break; } } if ($domain_accessible) { api_log("Domain is accessible, inserting new website record"); $stmt = $db->prepare("INSERT INTO websites (domain, status, created_at, is_approved) VALUES (?, 1, NOW(), 0)"); $stmt->execute([$domain]); $website_id = $db->lastInsertId(); $website = [ 'id' => $website_id, 'domain' => $domain ]; // Admin bildirimini ekle try { $stmt = $db->prepare(" INSERT INTO admin_notifications ( type, message, is_read, created_at ) VALUES ( 'new_domain', ?, 0, NOW() ) "); $notification_message = "Yeni domain eklendi: " . $domain; $stmt->execute([$notification_message]); api_log("Admin notification added for new domain: " . $domain); } catch (Exception $e) { api_log("Error adding admin notification: " . $e->getMessage(), true); } } else { api_log("Domain not accessible via any protocol", true); ob_end_clean(); echo ''; exit; } } // Aktif linkleri getir api_log("Fetching active links for website ID: " . $website['id']); $sql = "SELECT l.url, l.anchor_text FROM links l JOIN orders o ON l.order_id = o.id WHERE o.website_id = ? AND (o.status = 'completed' OR o.status = 'active') AND l.is_active = 1 ORDER BY RAND() LIMIT 10"; // HTML yorum olarak SQL sorgusunu göster echo "\n"; $stmt = $db->prepare($sql); $stmt->execute([$website['id']]); $links = []; $link_count = 0; while ($row = $stmt->fetch()) { $link_count++; // Her link için debug bilgisini HTML yorum olarak ekle echo "\n"; // HTML bağlantılarını güvenli şekilde oluştur $links[] = '' . htmlspecialchars($row['anchor_text'], ENT_QUOTES, 'UTF-8') . ''; } echo "\n"; if (empty($links)) { api_log("No active links found for domain: " . $domain . " (Website ID: " . $website['id'] . ")", true); ob_end_clean(); echo ''; exit; } api_log("Returning " . count($links) . " links for domain: " . $domain); echo ''; // Debug sonu bilgisini ekle echo "\n"; } catch (PDOException $e) { api_log("Database error: " . $e->getMessage() . "\nTrace: " . $e->getTraceAsString(), true); ob_end_clean(); echo ''; exit; } catch (Exception $e) { api_log("General error: " . $e->getMessage() . "\nTrace: " . $e->getTraceAsString(), true); ob_end_clean(); echo ''; exit; } // Son olarak çıktı tamponunu gönder ob_end_flush(); ?>